Eu tenho usado o Twitter Bootstrap para criar um site, e muitas de suas funcionalidades dependem de envolver as coisas <a>
, mesmo que elas apenas executem Javascript. Eu tive problemas com a href="#"
tática recomendada pela documentação do Bootstrap, então estava tentando encontrar uma solução diferente.
Mas tentei apenas remover o href
atributo completamente. Eu tenho usado <a class='bunch of classes' data-whatever='data'>
e o Javascript lida com o resto. E isso funciona.
No entanto, algo está me dizendo que eu não deveria estar fazendo isso. Certo? Quero dizer, tecnicamente <a>
é suposto ser um link para alguma coisa, mas não tenho muita certeza por que isso é um problema. Ou é?
html
anchor
semantic-markup
htmlbutton
Zacqary
fonte
fonte
Respostas:
O
<a>
elemento nchor é simplesmente uma âncora para ou de algum conteúdo. Originalmente, a especificação HTML permitia âncoras nomeadas (<a name="foo">
) e âncoras vinculadas (<a href="#foo">
).O formato âncora nomeado é menos usado, pois o identificador de fragmento agora é usado para especificar um
[id]
atributo (embora para compatibilidade com versões anteriores você ainda possa especificar[name]
atributos). Um<a>
elemento sem um[href]
atributo ainda é válido .No que diz respeito à semântica e estilo, o
<a>
elemento não é um link (:link
), a menos que tenha um[href]
atributo. Um efeito colateral disso é que um<a>
elemento sem[href]
não estará na ordem de tabulação por padrão.A verdadeira questão é se o
<a>
elemento sozinho é uma representação apropriada de a<button>
. Em um nível semântico, há uma diferença distinta entre alink
e abutton
.Um botão é algo que quando clicado faz com que uma ação ocorra.
Um link é um botão que causa uma alteração na navegação no documento atual. A navegação que ocorre pode ser movida dentro do documento no caso de identificadores de fragmento (
#foo
) ou movida para um novo documento no caso de URLs (/bar
).Como os links são um tipo especial de botão, eles geralmente tiveram suas ações substituídas para executar funções alternativas. Continuar usando uma âncora como botão é aceitável do ponto de vista da consistência, embora não seja muito preciso semanticamente.
Se você estiver preocupado com a semântica e acessibilidade do uso de um
<a>
elemento (ou<span>
, ou<div>
) como um botão, adicione os seguintes atributos:A função do botão informa ao usuário que o elemento específico está sendo tratado como um botão como uma substituição para qualquer semântica que o elemento subjacente possa ter.
Para
<span>
e<div>
elementos, convém adicionar ouvintes de chave JavaScript Spaceou Enteracionar oclick
evento.<a href>
e<button>
elementos fazem isso por padrão, mas elementos que não são botões não. Às vezes, faz mais sentido vincular oclick
gatilho a uma chave diferente. Por exemplo, um botão "ajuda" em um aplicativo Web pode estar vinculado F1.fonte
[role="button"]
não faz nada concreto, você ainda precisa ouvir o evento click (mas faria isso de qualquer maneira para criar um botão JS). Ele deve ser usado para navegação assistida (também conhecido como leitores de tela), para que o leitor de tela saiba representar o elemento como um botão, e não seu valor semântico original. Adicionar[tabindex]
adiciona o elemento à ordem de tabulação. Em circunstâncias especiais, talvez você não queira / precise do botão navegável na ordem de tabulação, por isso é um atributo opcional. Os elementos que já são botões não precisam[role="button"]
, pois são redundantes.[href]
, provavelmente deve usar um<span>
para o botão.Acho que você pode encontrar sua resposta aqui: Uma tag de âncora sem o atributo href é segura?
Além disso, se você não deseja operação de link com href, pode usá-lo como:
fonte
javascript:undefined
<a href="javascript:;">text</a>
?javascript:;
usado para quebrar coisas como efeitos de sobreposição e até animações gif no IE6. E para operações sem link, existem elementos HTML dedicados comobutton
. Ao mesmo tempo, coisas como links AJAX podem usar seushref
s para ações de fallback se o JS falhar.Sim, é válido usar a tag anchor sem um
href
atributo.Sim, você pode usar
class
e outros atributos, mas você não pode usartarget
,download
,rel
,hreflang
, etype
.Quanto à parte " Devo? ", Consulte a primeira citação: " onde um link poderia ter sido colocado caso fosse relevante ". Então, perguntava " Se eu não tivesse JavaScript, usaria essa tag como um link? ". Se a resposta for sim, então sim, você deve usar
<a>
semhref
. Se não, ainda o usaria, porque a produtividade é mais importante para mim do que a semântica de casos extremos, mas essa é apenas minha opinião pessoal.Além disso, você deve observar comportamentos e estilos diferentes (por exemplo, nenhum sublinhado, nenhum cursor apontador, não a
:link
).Fonte: Recomendação W3C HTML5
fonte
Isso é válido. Você pode, por exemplo, usá-lo para mostrar modais (ou coisas semelhantes que respondem
data-toggle
edata-target
atributos).Algo como:
Aqui eu uso o ícone de fonte impressionante, que é melhor como uma
a
marca do que como umabutton
, para mostrar um modal. Além disso, a configuraçãorole="button"
faz o ponteiro mudar para um tipo de ação. Sem umhref
ourole="button"
, o ponteiro do cursor não muda.fonte
aria-hidden
? O ícone, talvez, mas os usuários de leitores de tela não devem ter uma experiência reduzida.