Accesible componente de menú desplegable en Vanilla JavaScript-a11y-DropDown-componente
| Autor: | jonathanlevaillant |
|---|---|
| Views Total: | 783 |
| Sitio oficial: | Ir a la web |
| Actualizado: | December 2, 2018 |
| Licencia: | MIT |
Vista prévia
Descripción
Un componente de menú desplegable ligero, accesible y fácil de usar escrito en JavaScript Vanilla (ES6).
Totalmente accesible para WAI-ARIA Especificación:
- Introduzca o espacio clave para cerrar/desplegar el menú desplegable.
- escape tecla para cerrar el menú desplegable y mover el foco.
- up y Down teclas de flecha para navegar entre los elementos del menú.
- Home clave para mover el foco al primer elemento del menú desplegable.
- End/kbd > tecla para desplazar el foco al último elemento del menú desplegable.
Funcionamiento
Cree el menú desplegable a partir de un botón de desencadenador y una lista no ordenada HTML normal.
<div class="c-dropdown"> <button type="button" id="dropdown-trigger-demo" class="c-btn u-p" data-component="dropdown" data-target="dropdown-demo"> Open dropdown demo </button> <ul id="dropdown-demo" class="c-dropdown__menu"> <li data-item><a href="#" class="c-dropdown__link" data-focus><span>Option 1</span></a></li> <li data-item><a href="#" class="c-dropdown__link" data-focus>Option 2</a></li> <li data-item><a href="#" class="c-dropdown__link" data-focus>Option 3</a></li> </ul> </div>
Importe el a11y-DropDown-Component en el documento e inicialice el menú desplegable.
document.addEventListener('DOMContentLoaded', () => {
Dropdowns.init();
}); El CSS de ejemplo para el menú desplegable.
/* buttons */
.c-btn {
position: relative;
z-index: 0;
display: inline-block;
-webkit-transform: translate3d(0, -0.25em, 0);
transform: translate3d(0, -0.25em, 0);
padding: 0.75em 1.5em;
font-size: 1.6rem;
line-height: 1.5;
border: 0;
border-radius: 0.25em;
background-color: #f0f0f0;
vertical-align: top;
text-decoration: none;
font-weight: 700;
color: #e91e63;
cursor: pointer;
-webkit-transition: .2s;
transition: .2s;
}
.c-btn::before,
.c-btn::after {
content: "";
position: absolute;
z-index: -1;
top: 0;
right: 0;
bottom: 0;
left: 0;
border-radius: inherit;
-webkit-box-shadow: 0 0.25em 0 0 #ccc;
box-shadow: 0 0.25em 0 0 #ccc;
-webkit-transition: .2s;
transition: .2s;
}
.c-btn::after {
-webkit-box-shadow: 0 0.25em 0 0 #aa1145;
box-shadow: 0 0.25em 0 0 #aa1145;
background-color: #e91e63;
visibility: hidden;
opacity: 0;
}
.c-btn[aria-expanded="true"],
.c-btn:focus,
.c-btn:hover,
.c-btn:active {
color: #fff;
}
.c-btn[aria-expanded="true"]::after,
.c-btn:focus::after,
.c-btn:hover::after,
.c-btn:active::after {
visibility: visible;
opacity: 1;
}
.c-btn--unstyled {
position: static;
-webkit-transform: none;
transform: none;
padding: 0;
border-radius: 0;
background: none;
font: inherit;
line-height: inherit;
color: inherit;
}
.c-btn--unstyled::before,
.c-btn--unstyled::after {
content: none;
}
/* dropdowns */
.c-dropdown {
display: inline-block;
vertical-align: top;
}
.c-dropdown__menu {
max-height: 20rem;
margin: 0;
padding-left: 0;
border-radius: 0.25em;
visibility: visible;
opacity: 1;
overflow: hidden;
list-style: none;
transition: max-height .2s, visibility 0s, opacity 0s;
}
.c-dropdown__menu[aria-hidden="true"] {
max-height: 0;
visibility: hidden;
opacity: 0;
transition: max-height .2s, visibility .2s .2s, opacity .2s .2s;
}
.c-dropdown__link {
display: block;
margin: .25em;
padding: 0.5em 1.5em;
text-decoration: none;
font-size: 1.4rem;
font-weight: 700;
color: #e91e63;
background-color: #f0f0f0;
}
/* utilities */
.u-p {
margin-top: 2.4rem;
} Decida si desea mostrar el menú desplegable en init.
Dropdowns.render('dropdown-trigger-demo', {
isOpen: true
}); Decida si desea cerrar automáticamente el menú desplegable.
Dropdowns.render('dropdown-trigger-demo', {
autoClose: true
}); A veces es posible que necesite destruir el menú desplegable.
Dropdowns.destroy('dropdown-trigger-demo'); Registro de cambios
12/02/2018
- v1.2.0: add auto close parameter
10/27/2018
- v1.1.1





