Skip to content

Commit 3f20001

Browse files
committed
fix(material/button): allow touch target size to be customized
Adds tokens to the various button appearances to allow the touch target to be customized. (cherry picked from commit e8dcbbe)
1 parent 60414e9 commit 3f20001

File tree

10 files changed

+36
-11
lines changed

10 files changed

+36
-11
lines changed

src/material/button/_button-base.scss

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -119,16 +119,20 @@
119119
}
120120
}
121121

122-
@mixin mat-private-button-touch-target($is-square, $touch-target-display-token, $fallbacks) {
122+
@mixin mat-private-button-touch-target(
123+
$is-square,
124+
$touch-target-size-token,
125+
$touch-target-display-token,
126+
$fallbacks) {
123127
.mat-mdc-button-touch-target {
124128
position: absolute;
125129
top: 50%;
126-
height: 48px;
130+
height: token-utils.slot($touch-target-size-token, $fallbacks);
127131
display: token-utils.slot($touch-target-display-token, $fallbacks);
128132

129133
@if $is-square {
130134
left: 50%;
131-
width: 48px;
135+
width: token-utils.slot($touch-target-size-token, $fallbacks);
132136
transform: translate(-50%, -50%);
133137
} @else {
134138
left: 0;

src/material/button/_m2-button.scss

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,22 @@
1717
-3: 24px,
1818
), $scale);
1919
$touch-target-display: if($scale < -1, none, block);
20+
$touch-target-size: 48px;
2021

2122
@return (
2223
base: (
2324
button-filled-container-shape: 4px,
2425
button-filled-horizontal-padding: 16px,
2526
button-filled-icon-offset: -4px,
2627
button-filled-icon-spacing: 8px,
28+
button-filled-touch-target-size: $touch-target-size,
2729
button-outlined-container-shape: 4px,
2830
button-outlined-horizontal-padding: 15px, // Normally it's 16px, but -1px for the outline.
2931
button-outlined-icon-offset: -4px,
3032
button-outlined-icon-spacing: 8px,
3133
button-outlined-keep-touch-target: false,
3234
button-outlined-outline-width: 1px,
35+
button-outlined-touch-target-size: $touch-target-size,
3336
button-protected-container-elevation-shadow: elevation.get-box-shadow(2),
3437
button-protected-container-shape: 4px,
3538
button-protected-disabled-container-elevation-shadow: elevation.get-box-shadow(0),
@@ -39,15 +42,18 @@
3942
button-protected-icon-offset: -4px,
4043
button-protected-icon-spacing: 8px,
4144
button-protected-pressed-container-elevation-shadow: elevation.get-box-shadow(8),
45+
button-protected-touch-target-size: $touch-target-size,
4246
button-text-container-shape: 4px,
4347
button-text-horizontal-padding: 8px,
4448
button-text-icon-offset: 0,
4549
button-text-icon-spacing: 8px,
4650
button-text-with-icon-horizontal-padding: 8px,
51+
button-text-touch-target-size: $touch-target-size,
4752
button-tonal-container-shape: 4px,
4853
button-tonal-horizontal-padding: 16px,
4954
button-tonal-icon-offset: -4px,
5055
button-tonal-icon-spacing: 8px,
56+
button-tonal-touch-target-size: $touch-target-size,
5157
),
5258
color: (
5359
button-filled-container-color: map.get($system, surface),

src/material/button/_m2-fab.scss

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,13 @@
1616
$disabled: m3-utils.color-with-opacity(map.get($system, on-surface), 38%);
1717
$disabled-container : m3-utils.color-with-opacity(map.get($system, on-surface), 12%);
1818
$density-scale: theming.clamp-density(map.get($system, density-scale), -3);
19+
$touch-target-size: 48px;
1920

2021
@return (
2122
base: (
2223
fab-container-elevation-shadow: elevation.get-box-shadow(6),
2324
fab-container-shape: 50%,
25+
fab-touch-target-size: $touch-target-size,
2426
fab-extended-container-elevation-shadow: elevation.get-box-shadow(6),
2527
fab-extended-container-height: 48px,
2628
fab-extended-container-shape: 24px,
@@ -32,6 +34,7 @@
3234
fab-pressed-container-elevation-shadow: elevation.get-box-shadow(12),
3335
fab-small-container-elevation-shadow: elevation.get-box-shadow(6),
3436
fab-small-container-shape: 50%,
37+
fab-small-touch-target-size: $touch-target-size,
3538
fab-small-focus-container-elevation-shadow: elevation.get-box-shadow(8),
3639
fab-small-hover-container-elevation-shadow: elevation.get-box-shadow(8),
3740
fab-small-pressed-container-elevation-shadow: elevation.get-box-shadow(12),

src/material/button/_m2-icon-button.scss

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
base: (
1212
icon-button-icon-size: 24px,
1313
icon-button-container-shape: 50%,
14+
icon-button-touch-target-size: 48px,
1415
),
1516
color: (
1617
icon-button-disabled-icon-color:

src/material/button/_m3-button.scss

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
/// Generates custom tokens for the button.
1010
@function get-tokens($theme: m3.$sys-theme, $color-variant: null) {
1111
$system: m3-utils.get-system($theme);
12+
$touch-target-size: 48px;
1213
@if $color-variant {
1314
$system: m3-utils.replace-colors-with-variant($system, primary, $color-variant);
1415
$system: m3-utils.replace-colors-with-variant($system, secondary, $color-variant);
@@ -21,28 +22,33 @@
2122
button-filled-icon-offset: -8px,
2223
button-filled-icon-spacing: 8px,
2324
button-filled-label-text-transform: null,
25+
button-filled-touch-target-size: $touch-target-size,
2426
button-outlined-container-shape: map.get($system, corner-full),
2527
button-outlined-horizontal-padding: 24px,
2628
button-outlined-icon-offset: -8px,
2729
button-outlined-icon-spacing: 8px,
2830
button-outlined-outline-width: 1px,
2931
button-outlined-label-text-transform: null,
32+
button-outlined-touch-target-size: $touch-target-size,
3033
button-protected-container-shape: map.get($system, corner-full),
3134
button-protected-horizontal-padding: 24px,
3235
button-protected-icon-offset: -8px,
3336
button-protected-icon-spacing: 8px,
3437
button-protected-label-text-transform: null,
38+
button-protected-touch-target-size: $touch-target-size,
3539
button-text-container-shape: map.get($system, corner-full),
3640
button-text-horizontal-padding: 12px,
3741
button-text-icon-offset: -4px,
3842
button-text-icon-spacing: 8px,
3943
button-text-with-icon-horizontal-padding: 16px,
4044
button-text-label-text-transform: null,
45+
button-text-touch-target-size: $touch-target-size,
4146
button-tonal-container-shape: map.get($system, corner-full),
4247
button-tonal-horizontal-padding: 24px,
4348
button-tonal-icon-offset: -8px,
4449
button-tonal-icon-spacing: 8px,
4550
button-tonal-label-text-transform: null,
51+
button-tonal-touch-target-size: $touch-target-size,
4652
),
4753
color: (
4854
button-filled-container-color: map.get($system, primary),

src/material/button/_m3-fab.scss

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
/// Generates custom tokens for the mat-fab.
99
@function get-tokens($theme: m3.$sys-theme, $color-variant: null) {
1010
$system: m3-utils.get-system($theme);
11+
$touch-target-size: 48px;
1112
@if $color-variant {
1213
$system: m3-utils.replace-colors-with-variant($system, primary, $color-variant);
1314
}
@@ -19,6 +20,8 @@
1920
fab-extended-container-shape: map.get($system, corner-large),
2021
fab-small-container-shape: map.get($system, corner-medium),
2122
fab-touch-target-display: null,
23+
fab-touch-target-size: $touch-target-size,
24+
fab-small-touch-target-size: $touch-target-size,
2225
),
2326
color: (
2427
fab-container-color: map.get($system, primary-container),

src/material/button/_m3-icon-button.scss

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
base: (
2121
icon-button-icon-size: 24px,
2222
icon-button-container-shape: map.get($system, corner-full),
23+
icon-button-touch-target-size: 48px,
2324
),
2425
color: (
2526
icon-button-disabled-icon-color:

src/material/button/button.scss

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ $fallbacks: m3-button.get-tokens();
9393
button-text-hover-state-layer-opacity, button-text-focus-state-layer-opacity,
9494
button-text-pressed-state-layer-opacity, $fallbacks);
9595
@include button-base.mat-private-button-touch-target(false,
96-
button-text-touch-target-display, $fallbacks);
96+
button-text-touch-target-size, button-text-touch-target-display, $fallbacks);
9797
}
9898

9999
.mat-mdc-unelevated-button {
@@ -114,7 +114,7 @@ $fallbacks: m3-button.get-tokens();
114114
button-filled-hover-state-layer-opacity, button-filled-focus-state-layer-opacity,
115115
button-filled-pressed-state-layer-opacity, $fallbacks);
116116
@include button-base.mat-private-button-touch-target(false,
117-
button-filled-touch-target-display, $fallbacks);
117+
button-filled-touch-target-size, button-filled-touch-target-display, $fallbacks);
118118

119119
&:not(:disabled) {
120120
color: token-utils.slot(button-filled-label-text-color, $fallbacks);
@@ -152,7 +152,7 @@ $fallbacks: m3-button.get-tokens();
152152
button-protected-hover-state-layer-opacity, button-protected-focus-state-layer-opacity,
153153
button-protected-pressed-state-layer-opacity, $fallbacks);
154154
@include button-base.mat-private-button-touch-target(false,
155-
button-protected-touch-target-display, $fallbacks);
155+
button-protected-touch-target-size, button-protected-touch-target-display, $fallbacks);
156156

157157
&:not(:disabled) {
158158
color: token-utils.slot(button-protected-label-text-color, $fallbacks);
@@ -209,7 +209,7 @@ $fallbacks: m3-button.get-tokens();
209209
button-outlined-hover-state-layer-opacity, button-outlined-focus-state-layer-opacity,
210210
button-outlined-pressed-state-layer-opacity, $fallbacks);
211211
@include button-base.mat-private-button-touch-target(false,
212-
button-outlined-touch-target-display, $fallbacks);
212+
button-outlined-touch-target-size, button-outlined-touch-target-display, $fallbacks);
213213

214214
&:not(:disabled) {
215215
color: token-utils.slot(button-outlined-label-text-color, $fallbacks);
@@ -258,7 +258,7 @@ $fallbacks: m3-button.get-tokens();
258258
button-tonal-hover-state-layer-opacity, button-tonal-focus-state-layer-opacity,
259259
button-tonal-pressed-state-layer-opacity, $fallbacks);
260260
@include button-base.mat-private-button-touch-target(false,
261-
button-tonal-touch-target-display, $fallbacks);
261+
button-tonal-touch-target-size, button-tonal-touch-target-display, $fallbacks);
262262
}
263263

264264
.mat-mdc-button,

src/material/button/fab.scss

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,8 @@ $fallbacks: m3-fab.get-tokens();
118118
background-color: token-utils.slot(fab-disabled-state-container-color, $fallbacks);
119119
}
120120

121-
@include button-base.mat-private-button-touch-target(true, fab-touch-target-display, $fallbacks);
121+
@include button-base.mat-private-button-touch-target(true, fab-touch-target-size,
122+
fab-touch-target-display, $fallbacks);
122123
@include button-base.mat-private-button-ripple(fab-ripple-color, fab-state-layer-color,
123124
fab-disabled-state-layer-color, fab-hover-state-layer-opacity, fab-focus-state-layer-opacity,
124125
fab-pressed-state-layer-opacity, $fallbacks);
@@ -150,7 +151,7 @@ $fallbacks: m3-fab.get-tokens();
150151
}
151152

152153
@include button-base.mat-private-button-touch-target(true,
153-
fab-small-touch-target-display, $fallbacks);
154+
fab-small-touch-target-size, fab-small-touch-target-display, $fallbacks);
154155
@include button-base.mat-private-button-ripple(fab-small-ripple-color,
155156
fab-small-state-layer-color,
156157
fab-small-disabled-state-layer-color, fab-small-hover-state-layer-opacity,

src/material/button/icon-button.scss

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ $fallbacks: m3-icon-button.get-tokens();
5353
icon-button-hover-state-layer-opacity, icon-button-focus-state-layer-opacity,
5454
icon-button-pressed-state-layer-opacity, $fallbacks);
5555
@include button-base.mat-private-button-touch-target(true,
56-
icon-button-touch-target-display, $fallbacks);
56+
icon-button-touch-target-size, icon-button-touch-target-display, $fallbacks);
5757
@include private.private-animation-noop();
5858

5959
@include button-base.mat-private-button-disabled {

0 commit comments

Comments
 (0)