Em muitos sites, vejo links que possuem href="#"
. O que isso significa? Para que isso é usado?
O principal uso de tags âncora - <a></a>
- é como hiperlinks . Isso basicamente significa que eles te levam a algum lugar. Os hiperlinks requerem a href
propriedade, porque especifica um local.
Um hash - #
em um hiperlink especifica um ID do elemento html no qual a janela deve ser rolada.
href="#some-id"
rolaria para um elemento na página atual, como <div id="some-id">
.
href="https://site.com/#some-id"
iria site.com
e rolaria para o ID nessa página.
href="#"
não especifica um nome de ID, mas possui um local correspondente - a parte superior da página. Clicar em uma âncora com href="#"
moverá a posição de rolagem para o topo.
Esse é o comportamento esperado de acordo com a documentação w3.
Um exemplo em que um espaço reservado para hiperlink faz sentido está nas visualizações de modelo. Em demonstrações de uma página para modelos, eu já vi muitas vezes <a href="#">
para que a tag anchor seja um hiperlink, mas não vá a lugar algum. Por que não deixar a href
propriedade em branco? Uma href
propriedade em branco é na verdade um hiperlink para a página atual. Em outras palavras, isso causará uma atualização da página. Como discuti, href="#"
também é um hiperlink e causa rolagem. Portanto, a melhor solução para espaços reservados para hiperlinks é realmente. href="#!"
A idéia aqui é que, esperançosamente, não exista um elemento na página com id="!"
(quem faz isso !?) e, portanto, o hiperlink não se refere a nada - para que nada aconteça.
Outra pergunta que você pode estar se perguntando é: "Por que não deixar a propriedade href desativada?". Uma resposta comum que ouvi é que a href
propriedade é necessária, portanto "deve" estar presente nas âncoras. Isto é falso! A href
propriedade é necessária apenas para que uma âncora seja realmente um hiperlink! Leia isso no w3. Então, por que não deixar para os espaços reservados? Os navegadores renderizam estilos padrão para elementos e alteram o estilo padrão de uma marca de âncora que não possui a propriedade href. Em vez disso, será considerado como texto normal. Ele até altera o comportamento do navegador em relação ao elemento. A barra de status (parte inferior da tela) não será exibida ao passar o mouse sobre uma âncora sem a propriedade href. É melhor usar um valor de href do espaço reservado em uma âncora para garantir que ele seja tratado como um hiperlink.
Veja esta demonstração demonstrando diferenças de estilo e comportamento.
.click()
método jQuery em a<div></div>
, ele não funcionará. Ou precisa estar ancorado ou você precisa usartouch
eventos.Colocar o símbolo "#" como href para algo significa que ele aponta não para um URL diferente, mas para outro ID ou tag de nome na mesma página. Por exemplo:
No entanto, se não houver identificação ou nome, será "não onde".
Aqui está outra pergunta semelhante feita ao HTML Anchors com 'name' ou 'id'?
fonte
<a href="#">...</a>
não estava "indo a lugar nenhum", estava saindo da página e carregandosite.com/#
. Como isso é possível?onclick
manipulador de eventos foi vinculado a esse elemento, fazendo com que uma função javascript fosse chamada que o redirecionasse para essa página.É um link que vincula essencialmente a lugar nenhum (apenas adiciona "#" ao URL). É usado por vários motivos diferentes. Por exemplo, se você estiver usando algum tipo de JavaScript / jQuery e não quiser que o HTML real seja vinculado a qualquer lugar.
Também é usado para âncoras de página, usadas para redirecionar para uma parte diferente da página.
fonte
Infelizmente, o uso mais comum
<a href="#">
é de programadores preguiçosos que desejam elementos codificados por javascript sem hiperlink clicáveis que se comportam como âncoras, mas não podem ser usados para adicionar estiloscursor: pointer;
ou:hover
estilos a uma classe para seus elementos sem hiperlink e são adicionalmente preguiçoso demais para definirhref
ajavascript:void(0);
.O problema é que um
<a href="#" onclick="some_function();">
ou outro acaba inevitavelmente com um erro javascript, e uma âncora com um erro javascript onclick sempre acaba seguindo o seuhref
. Normalmente, isso acaba sendo um salto irritante para o topo da página, mas, no caso de sites que usam<base>
,<a href="#">
é tratado como<a href="[base href]/#">
, resultando em uma navegação inesperada. Se algum erro registrável estiver sendo gerado, você não os verá no último caso, a menos que ative os logs persistentes.Se um elemento âncora é usado como um não-âncora que deve ter o seu
href
conjunto parajavascript:void(0);
por causa da graciosa degradação.Acabei de perder dois dias depurando um redirecionamento aleatório de página inesperado que deveria simplesmente atualizar a página e finalmente a localizei para uma função que aumenta o evento click de um
<a href="#">
. Substituindo o#
comjavascript:void(0);
fixo.A primeira coisa que estou fazendo segunda-feira é limpar o projeto de todas as instâncias de
<a href="#">
.fonte
<base>
realmente faz uma grande diferença para o#
. Obrigado por apontar!Listas não ordenadas são frequentemente criadas com a intenção de usá-las como menu, mas um
li
item da lista é texto. Como oli
item da lista é texto, o ponteiro do mouse não será uma seta, mas um "I cursor". Os usuários estão acostumados a ver um dedo apontando para um ponteiro do mouse quando algo é clicável. O uso de uma marca de âncoraa
dentro dali
marca faz com que o ponteiro do mouse mude para um dedo apontador. O dedo indicador é muito melhor para usar a lista como menu.Se a lista estiver sendo usada para um menu e não precisar de um link, um URL não precisará ser designado. Mas o problema é que, se você deixar de fora o
href
atributo, o texto na<a>
tag será visto como texto e, portanto, o ponteiro do mouse retornará ao cursor I. O cursor em I pode fazer o usuário pensar que o item de menu não é clicável. Portanto, você ainda precisa de umhref
, mas não precisa de um link para qualquer lugar.Você pode usar muitas tags
div
oup
para uma lista de menus, mas o ponteiro do mouse também seria um cursor I para eles.Você pode usar muitos botões empilhados uns sobre os outros para obter uma lista de menus, mas a lista parece ser preferível. E é provavelmente por isso
href="#"
que o que aponta para lugar nenhum é usado nas tags âncora dentro das tags da lista.Você pode definir o estilo do ponteiro em CSS, de modo que essa é outra opção. O
href="#"
lugar nenhum pode ser apenas a maneira preguiçosa de definir algum estilo.fonte
O problema com o uso de href = "#" para um link vazio é que ele o levará ao topo da página, que pode não ser a ação desejada. Para evitar isso, para navegadores mais antigos ou doctypes não HTML5, use
fonte
Até onde eu sei, geralmente é um espaço reservado para links com algum JavaScript anexado a eles. O ponto principal do link é servido executando o código JavaScript; navegadores com suporte a JS ignoram o destino do link real. Se o navegador não suportar JS, a marca de hash basicamente transforma o link em um não operacional. Veja também JavaScript discreto .
fonte
Como algumas das outras respostas apontaram, o
a
elemento requer umhref
atributo e#
é usado como um espaço reservado, mas também é um artefato histórico.Da Rede de Desenvolvedores Mozilla :
Além disso, de acordo com a especificação HTML5 :
fonte
O atributo href define a URL do recurso de um link. Se a marca âncora não tiver a marca href, ela não se tornará um hiperlink. O atributo href tem os seguintes valores:
fonte