Fix vertical spacing in compact <ContextMenu> (#7684)

Fix https://github.com/vector-im/element-web/issues/20801

Regressed in https://github.com/matrix-org/matrix-react-sdk/pull/7339

Relevant styles were first added in https://github.com/matrix-org/matrix-react-sdk/pull/4858
(context behind why the original styles were added)

---

## Cause

Battling CSS specificity between the default and compact styles, https://specificity.keegan.st/

Known good (On `app.element.io` (expected)):
```css
// 0 3 0
.mx_IconizedContextMenu .mx_IconizedContextMenu_optionList .mx_AccessibleButton {
    padding-top: 12px;
    padding-bottom: 12px;
}

// Compact styles override our default rules because they come
// after the other styles (source order) and have the same specificity
// 0 3 0
.mx_IconizedContextMenu.mx_IconizedContextMenu_compact .mx_IconizedContextMenu_optionList > * {
    padding: 8px 16px 8px 11px;
}
```

Bad (On `develop` (broken)):
```css
// Default rules always override because they have higher specificity.
// The `:not()` selector doesn't add any extra specificity but the selectors inside the `:not(...)` do.
// 0 4 0
.mx_IconizedContextMenu .mx_IconizedContextMenu_optionList .mx_AccessibleButton:not(.mx_AccessibleButton_hasKind) {
    padding-top: 12px;
    padding-bottom: 12px;
}

// 0 3 0
.mx_IconizedContextMenu.mx_IconizedContextMenu_compact .mx_IconizedContextMenu_optionList > * {
    padding: 8px 16px 8px 11px;
}
```
This commit is contained in:
Eric Eastwood 2022-02-01 11:23:21 -06:00 committed by GitHub
parent 82f3888cee
commit 9b0da552e7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 26 additions and 9 deletions

View file

@ -50,21 +50,21 @@ limitations under the License.
}
// round the top corners of the top button for the hover effect to be bounded
&:first-child .mx_AccessibleButton:not(.mx_AccessibleButton_hasKind):first-child {
&:first-child .mx_IconizedContextMenu_item:first-child {
border-radius: 8px 8px 0 0; // radius matches .mx_ContextualMenu
}
// round the bottom corners of the bottom button for the hover effect to be bounded
&:last-child .mx_AccessibleButton:not(.mx_AccessibleButton_hasKind):last-child {
&:last-child .mx_IconizedContextMenu_item:last-child {
border-radius: 0 0 8px 8px; // radius matches .mx_ContextualMenu
}
// round all corners of the only button for the hover effect to be bounded
&:first-child:last-child .mx_AccessibleButton:not(.mx_AccessibleButton_hasKind):first-child:last-child {
&:first-child:last-child .mx_IconizedContextMenu_item:first-child:last-child {
border-radius: 8px; // radius matches .mx_ContextualMenu
}
.mx_AccessibleButton:not(.mx_AccessibleButton_hasKind) {
.mx_IconizedContextMenu_item {
// pad the inside of the button so that the hover background is padded too
padding-top: 12px;
padding-bottom: 12px;
@ -130,7 +130,7 @@ limitations under the License.
}
.mx_IconizedContextMenu_optionList_red {
.mx_AccessibleButton:not(.mx_AccessibleButton_hasKind) {
.mx_IconizedContextMenu_item {
color: $alert !important;
}
@ -148,7 +148,7 @@ limitations under the License.
}
.mx_IconizedContextMenu_active {
&.mx_AccessibleButton:not(.mx_AccessibleButton_hasKind), .mx_AccessibleButton:not(.mx_AccessibleButton_hasKind) {
&.mx_IconizedContextMenu_item, .mx_IconizedContextMenu_item {
color: $accent !important;
}