Menús
Los menús despliegan una lista de opciones en superficies temporales.
A Menu displays a list of choices on a temporary surface. It appears when the user interacts with a button, or other control.
Menú Simple
Los menús simples se abren sobre el elemento ancla por defecto (esta opción puede ser cambiada en las propiedades). Cuando están cercanos a un borde de la pantalla, los menús simples se re alinean verticalmente para asegurarse de que todos los ítems del menú están completamente visibles.
Elegir una opción debiera inmediatamente confirmar la opción y cerrar el menú.
Desambiguación: En contraste con los menús simples, los diálogos simples pueden presentar detalles adicionales a las opciones disponibles para un ítem de lista o proveer acciones de navegación u ortogonales relacionadas a la tarea primaria. Aunque pueden desplegar el mismo contenido, los menús simples son preferidos sobre los diálogos simples porque los menú simples son menos perjudiciales para el contexto actual del usuario.
<Button aria-controls="simple-menu" aria-haspopup="true" onClick={handleClick}>
Open Menu
</Button>
<Menu
id="simple-menu"
anchorEl={anchorEl}
keepMounted
open={Boolean(anchorEl)}
onClose={handleClose}
>
<MenuItem onClick={handleClose}>Profile</MenuItem>
<MenuItem onClick={handleClose}>My account</MenuItem>
<MenuItem onClick={handleClose}>Logout</MenuItem>
</Menu>
Menús seleccionados
If used for item selection, when opened, simple menus attempt to vertically align the currently selected menu item with the anchor element, and the initial focus will be placed on the selected menu item. El elemento de menú actualmente seleccionado se establece usando la propiedad selected
(de ListItem). To use a selected menu item without impacting the initial focus or the vertical positioning of the menu, set the variant
property to menu
.
Composición de MenuList
El componente Menu
usa el componente Popover
internamente. Sin embargo, es posible usar una estrategia de posicionamiento diferente, o no bloquear el desplazamiento. Para responder esas necesidades, exponemos un componente MenuList
que puede componer, con Popper
en este ejemplo.
La responsabilidad principal del componente MenuList
es manejar el foco.
Customized menus
He aquí un ejemplo de personalización del componente. You can learn more about this in the overrides documentation page.
The MenuItem
is a wrapper around ListItem
with some additional styles. You can use the same list composition features with the MenuItem
component:
🎨 Si estás buscando inspiración, puedes mirar los ejemplos de MUI Treasury.
Menús de altura máxima
Si el alto de un menú previene que todos los elementos sean mostrados, puede hacer desplazamiento internamente.
Limitaciones
Existe un bug de flexbox que previene el funcionamiento de text-overflow: ellipsis
en un diseño de flexbox. Puede usar el componente Typography
con noWrap
para solucionar este problema:
<Button aria-controls="fade-menu" aria-haspopup="true" onClick={handleClick}>
Open with fade transition
</Button>
<Menu
id="fade-menu"
anchorEl={anchorEl}
keepMounted
open={open}
onClose={handleClose}
TransitionComponent={Fade}
>
<MenuItem onClick={handleClose}>Profile</MenuItem>
<MenuItem onClick={handleClose}>My account</MenuItem>
<MenuItem onClick={handleClose}>Logout</MenuItem>
</Menu>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam ipsum purus, bibendum sit amet vulputate eget, porta semper ligula. Donec bibendum vulputate erat, ac fringilla mi finibus nec. Donec ac dolor sed dolor porttitor blandit vel vel purus. Fusce vel malesuada ligula. Nam quis vehicula ante, eu finibus est. Proin ullamcorper fermentum orci, quis finibus massa. Nunc lobortis, massa ut rutrum ultrices, metus metus finibus ex, sit amet facilisis neque enim sed neque. Quisque accumsan metus vel maximus consequat. Suspendisse lacinia tellus a libero volutpat maximus.
Proyectos relacionados
Para usos más avanzados tal vez puedas aprovercharte de:
Ayudante PopupState
Existe un paquete de terceros material-ui-popup-state
que se encarga del estado del menú en la mayoría de los casos.
<PopupState variant="popover" popupId="demo-popup-menu">
{(popupState) => (
<React.Fragment>
<Button variant="contained" color="primary" {...bindTrigger(popupState)}>
Open Menu
</Button>
<Menu {...bindMenu(popupState)}>
<MenuItem onClick={popupState.close}>Cake</MenuItem>
<MenuItem onClick={popupState.close}>Death</MenuItem>
</Menu>
</React.Fragment>
)}
</PopupState>