Em muitos sites, vejo links que possuem href="#"
. O que isso significa? Para que isso é usado?
Em muitos sites, vejo links que possuem href="#"
. O que isso significa? Para que isso é usado?
Respostas:
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://stackoverflow.com//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 usar touch
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:
<a href="#bottomOfPage">Click to go to the bottom of the page</a>
blah blah
blah blah
...
<a id="bottomOfPage"></a>
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'?
<a href="#">...</a>
não estava "indo a lugar nenhum", estava saindo da página e carregando site.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.
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 estilos cursor: pointer;
ou :hover
estilos a uma classe para seus elementos sem hiperlink e são adicionalmente preguiçoso demais para definir href
a javascript: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 seu href
. 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 para javascript: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 #
com javascript:void(0);
fixo.
A primeira coisa que estou fazendo segunda-feira é limpar o projeto de todas as instâncias de <a href="#">
.
<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 o li
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 âncora a
dentro da li
marca faz com que o ponteiro do mouse mude para um dedo apontador. O dedo indicador é muito melhor para usar a lista como menu.
<ul id="menu">
<li><a href="#">Menu Item 1</a></li>
<li><a href="#">Menu Item 2</a></li>
<li><a href="#">Menu Item 3</a></li>
<li><a href="#">Menu Item 4</a></li>
</ul>
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 um href
, mas não precisa de um link para qualquer lugar.
Você pode usar muitas tags div
ou p
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.
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
<a href="javascript:void(0)">Goes Nowhere</a>
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 .
Como algumas das outras respostas apontaram, o a
elemento requer um href
atributo e #
é usado como um espaço reservado, mas também é um artefato histórico.
Da Rede de Desenvolvedores Mozilla :
href
Esse era o único atributo necessário para âncoras que definem um link de origem de hipertexto, mas não é mais necessário no HTML5. Omitir esse atributo cria um link de espaço reservado. O atributo href indica o destino do link, um URL ou um fragmento de URL. Um fragmento de URL é um nome precedido por uma marca de hash (#), que especifica um local de destino interno (um ID) no documento atual.
Além disso, de acordo com a especificação HTML5 :
Se o elemento a não tiver atributo href, o elemento representará um espaço reservado para onde um link poderia ter sido colocado, se fosse relevante, consistindo apenas no conteúdo do elemento.
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:
1. Absolute path: move to another site like href="http://www.google.com"
2. Relative path: move to another page within the site like herf ="defaultpage.aspx"
3. Move to an element with a specified id within the page like href="#bottom"
4. href="javascript:void(0)", it does not move anywhere.
5. href="#" , it does not move anywhere but scroll on the top of the current page.
6. href= "" , it will load the current page but some browsers causes forbidden errors.
Note: When we do not need to specified any url inside a anchor tag then use
<a href="javascript:void(0)">Test1</a>