html - que - ¿Cómo se hace un div "tabbable"?
xhtml vs html5 (3)
Tengo botones que son elementos div y quiero hacerlos para que el usuario pueda presionar la tecla de tabulación en su teclado y moverse entre ellos He intentado envolver su texto en etiquetas de anclaje pero no parece funcionar.
¿Alguien tiene una solución?
Agregue atributos de tabindex
a sus elementos div
.
Ejemplo:
<div tabindex="1">First</div>
<div tabindex="2">Second</div>
Según el comentario de steveax, si no desea que el orden de las pestañas se desvíe de donde está el elemento en la página, establezca el tabindex
de tabindex
en 0
:
<div tabindex="0">First</div>
<div tabindex="0">Second</div>
Agregue el tabindex="0"
a cada div que desee tabbable. Luego use pseudoclases de CSS: desplazarse y: enfocar, por ejemplo, para indicar al usuario de la aplicación que la división está enfocada y puede hacer clic, por ejemplo. Usa JavaScript para manejar el clic.
var doc = document;
var providers = doc.getElementsByClassName("provider");
for (var i = 0; i < providers.length; i++) {
providers[i].onclick = function() {
console.log(this.innerHTML);
};
}
.provider {
flex: 0 1 auto;
align-self: auto;
width: 256px;
height: 48px;
margin-top: 12px;
margin-right: 12px;
text-align: center;
line-height: 48px;
text-transform: uppercase;
background-size: contain;
background-repeat: no-repeat;
background-position: 10%;
background-color: gray;
}
.provider:hover{
cursor: pointer;
}
.provider:focus{
-webkit-box-shadow: 0px 2px 8px 2px rgba(0,0,0,0.4);
-moz-box-shadow: 0px 2px 8px 2px rgba(0,0,0,0.4);
box-shadow: 0px 2px 8px 2px rgba(0,0,0,0.4);
}
<h4>Click in this area first then press tab</h4>
<div id="email" class="provider" tabindex="0">email</div>
<div id="facebook" class="provider" tabindex="0">facebook</div>
<div id="github" class="provider" tabindex="0">github</div>
<div id="google" class="provider" tabindex="0">google</div>
<div id="twitter" class="provider" tabindex="0">twitter</div>
para aquellos interesados, además de la respuesta aceptada, puede agregar el siguiente jQuery para cambiar el estilo de div cuando lo tabule, y también manejar Intro y Espacio para activar un clic (entonces su controlador de clic hará el resto)
$(document).on(''focus'', ''.button'',function(){
$(this).css(''border'',''1px dotted black'')
});
$(document).on(''keyup'', ''.button'',function(e){
if(e.which==13 || e.which==32)
$(this).click()
});
Estoy seguro de que alguien ha hecho esto en un complemento jq $ (). MakeTabStop