Accesible componente de menú desplegable en Vanilla JavaScript-a11y-DropDown-componente

Tiempo de ejecución: 30 minutos. Empezar

Autor: jonathanlevaillant
Views Total: 783
Sitio oficial: Ir a la web
Actualizado: December 2, 2018
Licencia: MIT

Vista prévia

Accesible componente de menú desplegable en Vanilla JavaScript-a11y-DropDown-componente

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

Te puede interesar: