Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Slider] Increase interaction area #18429

Merged

Conversation

oliviertassinari
Copy link
Member

@oliviertassinari oliviertassinari commented Nov 18, 2019

... and keep the thumb in parent boundaries

Reverted from #18395 and continued in a standalone effort.

Looking more closely at design systems like Elastic UI, Garden, Blueprint, BaseUI, you can notice that the slider height is larget than us. This change gets us closer to what the Material Design specification recommends: https://material.io/design/usability/accessibility.html#layout-typography: 44px when the main modality is a pointer device. We go from 24px to 28px (still /4).

I have reduced the touch area of the thumb so it almost doesn't "leak" outside its container. This is subjective, but I don't think that the slider should prevent the interaction on the element above it. We have 42px vs the recommended 44px minimum.

Before
Capture d’écran 2019-11-18 à 13 28 13

After
Capture d’écran 2019-11-18 à 14 57 13

@oliviertassinari oliviertassinari added accessibility a11y component: slider This is the name of the generic UI component, not the React module! labels Nov 18, 2019
@oliviertassinari oliviertassinari changed the title [Slider] Increase interaction area and keep thumb in parent boundaries [Slider] Increase interaction area Nov 18, 2019
@oliviertassinari oliviertassinari force-pushed the slider-increase-interaction-area branch 2 times, most recently from 6a82086 to cee5e04 Compare November 18, 2019 12:28
@mui-pr-bot
Copy link

mui-pr-bot commented Nov 18, 2019

Details of bundle changes.

Comparing: fa764b9...68d5c5e

bundle Size Change Size Gzip Change Gzip
@material-ui/core[umd] ▲ +19 B (+0.01% ) 310 kB ▲ +4 B (0.00% ) 89.3 kB
Slider ▲ +19 B (+0.03% ) 74.2 kB ▲ +3 B (+0.01% ) 23.4 kB
@material-ui/core ▲ +19 B (+0.01% ) 351 kB ▲ +2 B (0.00% ) 96 kB
@material-ui/lab -- 172 kB -- 51.8 kB
@material-ui/styles -- 50.8 kB -- 15.4 kB
@material-ui/system -- 14.8 kB -- 4.06 kB
AppBar -- 62.4 kB -- 19.5 kB
Autocomplete -- 126 kB -- 40 kB
Avatar -- 61.4 kB -- 19.3 kB
Backdrop -- 66.4 kB -- 20.5 kB
Badge -- 64 kB -- 19.8 kB
BottomNavigation -- 61 kB -- 19.1 kB
BottomNavigationAction -- 74 kB -- 23.4 kB
Box -- 69.4 kB -- 21 kB
Breadcrumbs -- 66.6 kB -- 20.9 kB
Button -- 78 kB -- 23.8 kB
ButtonBase -- 72.5 kB -- 22.7 kB
ButtonGroup -- 80.6 kB -- 24.7 kB
Card -- 61.3 kB -- 19.2 kB
CardActionArea -- 73.6 kB -- 23.2 kB
CardActions -- 60.7 kB -- 19 kB
CardContent -- 60.6 kB -- 18.9 kB
CardHeader -- 63.7 kB -- 20 kB
CardMedia -- 61 kB -- 19.1 kB
Checkbox -- 80.4 kB -- 25.2 kB
Chip -- 81.1 kB -- 24.8 kB
CircularProgress -- 62.7 kB -- 19.7 kB
ClickAwayListener -- 3.87 kB -- 1.56 kB
Collapse -- 66.5 kB -- 20.5 kB
colorManipulator -- 3.83 kB -- 1.52 kB
Container -- 61.8 kB -- 19.3 kB
CssBaseline -- 56.2 kB -- 17.6 kB
Dialog -- 81.1 kB -- 25.2 kB
DialogActions -- 60.7 kB -- 19 kB
DialogContent -- 60.8 kB -- 19.1 kB
DialogContentText -- 62.7 kB -- 19.7 kB
DialogTitle -- 62.9 kB -- 19.8 kB
Divider -- 61.2 kB -- 19.2 kB
docs.landing -- 55.8 kB -- 14.3 kB
docs.main -- 608 kB -- 194 kB
Drawer -- 82.9 kB -- 25.6 kB
ExpansionPanel -- 69.8 kB -- 21.8 kB
ExpansionPanelActions -- 60.7 kB -- 19 kB
ExpansionPanelDetails -- 60.6 kB -- 18.9 kB
ExpansionPanelSummary -- 76.7 kB -- 24.1 kB
Fab -- 75.4 kB -- 23.4 kB
Fade -- 22.2 kB -- 7.66 kB
FilledInput -- 72.2 kB -- 22.3 kB
FormControl -- 63 kB -- 19.5 kB
FormControlLabel -- 64.1 kB -- 20.1 kB
FormGroup -- 60.6 kB -- 19 kB
FormHelperText -- 61.9 kB -- 19.4 kB
FormLabel -- 62.1 kB -- 19.2 kB
Grid -- 63.7 kB -- 20 kB
GridList -- 61.1 kB -- 19.2 kB
GridListTile -- 62.3 kB -- 19.5 kB
GridListTileBar -- 61.8 kB -- 19.4 kB
Grow -- 22.8 kB -- 7.79 kB
Hidden -- 64.5 kB -- 20.2 kB
Icon -- 61.4 kB -- 19.2 kB
IconButton -- 74.7 kB -- 23.2 kB
Input -- 71.1 kB -- 22.1 kB
InputAdornment -- 63.7 kB -- 20.1 kB
InputBase -- 69.2 kB -- 21.7 kB
InputLabel -- 63.9 kB -- 19.9 kB
LinearProgress -- 64 kB -- 19.9 kB
Link -- 65.2 kB -- 20.7 kB
List -- 61 kB -- 18.9 kB
ListItem -- 75.7 kB -- 23.6 kB
ListItemAvatar -- 60.7 kB -- 19 kB
ListItemIcon -- 60.8 kB -- 19 kB
ListItemSecondaryAction -- 60.6 kB -- 19 kB
ListItemText -- 63.6 kB -- 20 kB
ListSubheader -- 61.4 kB -- 19.3 kB
Menu -- 86.8 kB -- 27.2 kB
MenuItem -- 76.7 kB -- 23.9 kB
MenuList -- 64.6 kB -- 20.1 kB
MobileStepper -- 66.3 kB -- 20.7 kB
Modal -- 14.2 kB -- 4.96 kB
NativeSelect -- 75.4 kB -- 23.7 kB
NoSsr -- 2.19 kB -- 1.03 kB
OutlinedInput -- 72.6 kB -- 22.5 kB
Paper -- 60.9 kB -- 18.9 kB
Popover -- 81.2 kB -- 25 kB
Popper -- 28.6 kB -- 10.2 kB
Portal -- 2.87 kB -- 1.29 kB
Radio -- 81.2 kB -- 25.5 kB
RadioGroup -- 61.8 kB -- 19.3 kB
Rating -- 68.6 kB -- 22 kB
RootRef -- 4.43 kB -- 1.67 kB
Select -- 113 kB -- 33.5 kB
Skeleton -- 61.1 kB -- 19.2 kB
Slide -- 24.3 kB -- 8.27 kB
Snackbar -- 75.8 kB -- 23.6 kB
SnackbarContent -- 64.3 kB -- 20.2 kB
SpeedDial -- 84.6 kB -- 26.6 kB
SpeedDialAction -- 115 kB -- 36.4 kB
SpeedDialIcon -- 63.2 kB -- 19.8 kB
Step -- 61.2 kB -- 19.2 kB
StepButton -- 80.9 kB -- 25.4 kB
StepConnector -- 61.3 kB -- 19.3 kB
StepContent -- 67.6 kB -- 21.1 kB
StepIcon -- 63.3 kB -- 19.7 kB
StepLabel -- 67.2 kB -- 21.1 kB
Stepper -- 63.4 kB -- 19.9 kB
styles/createMuiTheme -- 15.4 kB -- 5.43 kB
SvgIcon -- 61.7 kB -- 19.2 kB
SwipeableDrawer -- 90.3 kB -- 28 kB
Switch -- 79.7 kB -- 24.8 kB
Tab -- 74.9 kB -- 23.7 kB
Table -- 61.2 kB -- 19.2 kB
TableBody -- 60.7 kB -- 19 kB
TableCell -- 62.7 kB -- 19.7 kB
TableFooter -- 60.7 kB -- 19 kB
TableHead -- 60.7 kB -- 19 kB
TablePagination -- 139 kB -- 40.7 kB
TableRow -- 61.1 kB -- 19.1 kB
TableSortLabel -- 75.9 kB -- 24 kB
Tabs -- 84 kB -- 26.8 kB
TextareaAutosize -- 5.06 kB -- 2.11 kB
TextField -- 121 kB -- 35.5 kB
ToggleButton -- 74.7 kB -- 23.6 kB
ToggleButtonGroup -- 61.8 kB -- 19.4 kB
Toolbar -- 60.9 kB -- 19.1 kB
Tooltip -- 99.1 kB -- 31.3 kB
TreeItem -- 72.2 kB -- 22.7 kB
TreeView -- 65 kB -- 20.3 kB
Typography -- 62.3 kB -- 19.4 kB
useAutocomplete -- 12.2 kB -- 4.5 kB
useMediaQuery -- 2.49 kB -- 1.05 kB
Zoom -- 22.3 kB -- 7.67 kB

Generated by 🚫 dangerJS against 68d5c5e

right: -18,
bottom: -18,
borderRadius: '50%',
// reach 42px hit target (2 * 15 + thumb diameter)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Where is the 42px coming from?

Copy link
Member Author

@oliviertassinari oliviertassinari Nov 18, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's a tradeoff to be closer to 44px without leaking too much from the dimension of the parent. 28px is a tradeoff to increase the interaction zone without changing too much the layout for existing users and still enabling dense layout.

I don't think that we should always follow the specification to the letter.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But if you don't you have to explain how you arrive at these values. And not just some ephemeral "it's a tradeoff". Given the 8px grid this is now 3/4 of a unit instead of the 1/2 which is probably why the recommendation uses 44. Just go with the default to stay in the design system. Not following the default system is actually more likely to cause layout breakage.

Copy link
Member Author

@oliviertassinari oliviertassinari Nov 18, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think that we can ignore the 4px grid for the thumb extension because it's not visible. By tradeoff, I mean, increase the slider height by the minimal grid unit: 4px, make the thumb "leak" by the minimum amount: 7px visually look almost too much.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is this "minimum amount" you talk about? How did you construct this number?

Copy link
Member Author

@oliviertassinari oliviertassinari Nov 19, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

4px is the grid unit, so we get 28/4 = 7.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
accessibility a11y component: slider This is the name of the generic UI component, not the React module!
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants