Skip to content

Commit 8a8f2cf

Browse files
committed
refactor(material/menu): simplify structural styles
Simplifies the menu structural styles to make them more maintainable.
1 parent 0e36a31 commit 8a8f2cf

File tree

1 file changed

+40
-35
lines changed

1 file changed

+40
-35
lines changed

src/material/menu/menu.scss

Lines changed: 40 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,23 @@
1-
@use 'sass:map';
21
@use '@angular/cdk';
3-
@use '@material/list/evolution-mixins' as mdc-list-mixins;
4-
@use '@material/list/evolution-variables' as mdc-list-variables;
5-
@use '@material/typography/typography' as mdc-typography;
62
@use '../core/tokens/m2/mat/menu' as tokens-mat-menu;
73
@use '../core/tokens/token-utils';
8-
@use '../core/mdc-helpers/mdc-helpers';
94
@use '../core/style/menu-common';
105
@use '../core/style/button-common';
6+
@use '../core/style/vendor-prefixes';
117

128
// Prevent rendering mat-menu as it can affect the flex layout.
139
mat-menu {
1410
display: none;
1511
}
1612

1713
.mat-mdc-menu-content {
18-
@include mdc-list-mixins.list-base($query: structure);
14+
margin: 0;
15+
padding: 8px 0;
16+
outline: none;
1917

2018
&,
2119
.mat-mdc-menu-item .mat-mdc-menu-item-text {
22-
@include mdc-typography.smooth-font();
20+
@include vendor-prefixes.smooth-font();
2321
flex: 1;
2422
white-space: normal;
2523

@@ -78,23 +76,39 @@ mat-menu {
7876
}
7977

8078
.mat-mdc-menu-item {
81-
@include mdc-helpers.disable-mdc-fallback-declarations {
82-
@include mdc-list-mixins.item-base;
83-
@include token-utils.use-tokens(tokens-mat-menu.$prefix, tokens-mat-menu.get-token-slots()) {
84-
@include mdc-list-mixins.item-spacing(
85-
var(#{token-utils.get-token-variable(item-leading-spacing)}),
86-
var(#{token-utils.get-token-variable(item-trailing-spacing)}),
87-
$query: mdc-helpers.$mdc-base-styles-query
88-
);
89-
90-
// stylelint-disable-next-line selector-class-pattern
91-
&:has(.material-icons, mat-icon, [matButtonIcon]) {
92-
@include mdc-list-mixins.item-spacing(
93-
var(#{token-utils.get-token-variable(item-with-icon-leading-spacing)}),
94-
var(#{token-utils.get-token-variable(item-with-icon-trailing-spacing)}),
95-
$query: mdc-helpers.$mdc-base-styles-query
96-
);
97-
}
79+
display: flex;
80+
position: relative;
81+
align-items: center;
82+
justify-content: flex-start;
83+
overflow: hidden;
84+
padding: 0;
85+
outline: none;
86+
87+
@include token-utils.use-tokens(tokens-mat-menu.$prefix, tokens-mat-menu.get-token-slots()) {
88+
$icons-selector: '.material-icons, mat-icon, [matButtonIcon]';
89+
$leading-padding: var(#{token-utils.get-token-variable(item-leading-spacing)});
90+
$trailing-padding: var(#{token-utils.get-token-variable(item-trailing-spacing)});
91+
$with-icon-leading-padding:
92+
var(#{token-utils.get-token-variable(item-with-icon-leading-spacing)});
93+
$with-icon-trailing-padding:
94+
var(#{token-utils.get-token-variable(item-with-icon-trailing-spacing)});
95+
96+
padding-left: $leading-padding;
97+
padding-right: $trailing-padding;
98+
99+
[dir='rtl'] & {
100+
padding-right: $leading-padding;
101+
padding-left: $trailing-padding;
102+
}
103+
104+
&:has(#{$icons-selector}) {
105+
padding-left: $with-icon-leading-padding;
106+
padding-right: $with-icon-trailing-padding;
107+
}
108+
109+
[dir='rtl'] &:has(#{$icons-selector}) {
110+
padding-right: $with-icon-leading-padding;
111+
padding-left: $with-icon-trailing-padding;
98112
}
99113
}
100114

@@ -110,13 +124,7 @@ mat-menu {
110124
background: none;
111125
text-decoration: none;
112126
margin: 0; // Resolves an issue where buttons have an extra 2px margin on Safari.
113-
align-items: center;
114-
115-
// Set the `min-height` here ourselves, instead of going through
116-
// the `mdc-list-one-line-item-density` mixin, because it sets a `height`
117-
// which doesn't work well with multi-line items.
118-
$height-config: map.get(mdc-list-variables.$one-line-item-density-config, height);
119-
min-height: map.get($height-config, default);
127+
min-height: 48px;
120128

121129
@include token-utils.use-tokens(tokens-mat-menu.$prefix, tokens-mat-menu.get-token-slots()) {
122130
// The class selector isn't specific enough to overide the link pseudo selectors so we need
@@ -134,10 +142,7 @@ mat-menu {
134142

135143
&[disabled] {
136144
cursor: default;
137-
138-
// This is the same as `mdc-list-mixins.list-disabled-opacity` which
139-
// we can't use directly, because it comes with some selectors.
140-
opacity: mdc-list-variables.$content-disabled-opacity;
145+
opacity: 0.38;
141146

142147
// The browser prevents clicks on disabled buttons from propagating which prevents the menu
143148
// from closing, but clicks on child nodes still propagate which is inconsistent (see #16694).

0 commit comments

Comments
 (0)