Na wielu stronach widzę linki, które mają href="#"
. Co to znaczy? Do czego jest to używane?
Główne zastosowanie tagów zakotwiczenia - <a></a>
- to hiperłącza . To w zasadzie oznacza, że cię gdzieś zabierają. Hiperłącza wymagają tej href
właściwości, ponieważ określa ona lokalizację.
Hash - #
w hiperłączu określa identyfikator elementu HTML, do którego należy przewinąć okno.
href="#some-id"
przewinąłby do elementu na bieżącej stronie, takiego jak <div id="some-id">
.
href="https://site.com/#some-id"
przejdzie do site.com
i przewinie do identyfikatora na tej stronie.
href="#"
nie określa nazwy identyfikatora, ale ma odpowiednią lokalizację - górę strony. Kliknięcie kotwicy za pomocą href="#"
spowoduje przesunięcie pozycji przewijania na górę.
Jest to oczekiwane zachowanie zgodnie z dokumentacją w3.
Przykład, w którym symbol zastępczy hiperłącza ma sens, znajduje się w podglądzie szablonu. Na pojedynczych stronach demonstracyjnych szablonów często widziałem <a href="#">
, że tag kotwicy jest hiperłączem, ale nigdzie nie idzie. Dlaczego nie zostawić href
nieruchomości pustej? Pusta href
właściwość jest w rzeczywistości hiperłączem do bieżącej strony. Innymi słowy, spowoduje to odświeżenie strony. Jak już wspomniałem, href="#"
jest również hiperłączem i powoduje przewijanie. Dlatego najlepszym rozwiązaniem dla symboli zastępczych hiperłączy jest href="#!"
tutaj. Pomysł polega na tym, że mam nadzieję, że na stronie nie ma elementu id="!"
(kto to robi !?), a zatem hiperlink nie odnosi się do niczego - więc nic się nie dzieje.
Innym pytaniem, które możesz się zastanawiać, jest: „Dlaczego po prostu nie pozostawić własności href?”. Często słyszałem, że href
właściwość jest wymagana, więc „powinna” być obecna na kotwicach. To nieprawda! Ta href
właściwość jest wymagana tylko, aby kotwica faktycznie była hiperłączem! Przeczytaj to z w3. Dlaczego więc nie zostawić tego dla symboli zastępczych? Przeglądarki renderują domyślne style elementów i zmienią domyślny styl znacznika kotwicy, który nie ma właściwości href. Zamiast tego będzie traktowany jak zwykły tekst. Zmienia nawet zachowanie przeglądarki w odniesieniu do elementu. Pasek stanu (dolna część ekranu) nie będzie wyświetlany, gdy zatrzymasz się na kotwicy bez właściwości href. Najlepiej jest użyć zastępczej wartości href na kotwicy, aby upewnić się, że jest traktowana jako hiperłącze.
Zobacz to demo pokazujące różnice w stylu i zachowaniu.
.click()
metody jQuery na<div></div>
, to nie zadziała. Albo musi być na kotwicy, albo musisz użyćtouch
zdarzeń.Umieszczenie symbolu „#” jako href dla czegoś oznacza, że wskazuje on nie na inny adres URL, ale na inny identyfikator lub tag na tej samej stronie. Na przykład:
Jeśli jednak nie ma identyfikatora ani nazwy, oznacza to „nie gdzie”.
Oto kolejne podobne pytanie zadane Kotwice HTML z „nazwa” lub „id”?
źródło
<a href="#">...</a>
nie „nigdzie” nie opuszczałem strony i nie ładowałem sięsite.com/#
. Jak to możliwe?onclick
obsługi zdarzeń został powiązany z tym elementem, powodując wywołanie funkcji javascript, która przekierowała cię na tę stronę.Jest to link, który prowadzi do nikąd (dodaje tylko „#” do adresu URL). Jest używany z wielu różnych powodów. Na przykład, jeśli używasz jakiegoś JavaScript / jQuery i nie chcesz, aby rzeczywisty HTML łączył się gdziekolwiek.
Służy również do zakotwiczeń strony, które służą do przekierowywania do innej części strony.
źródło
Niestety, najczęstszym zastosowaniem
<a href="#">
są leniwi programiści, którzy chcą klikalnych elementów, które nie są hiperłączami, kodowanych w javascript, które zachowują się jak kotwice, ale nie można ich dodawaćcursor: pointer;
ani dodawać:hover
stylów do klasy dla ich elementów niebędących hiperłączami, i są dodatkowo zbyt leniwy, aby ustawićhref
sięjavascript:void(0);
.Problem polega na tym, że jeden
<a href="#" onclick="some_function();">
lub drugi nieuchronnie kończy się błędem javascript, a kotwica z błędem javascript onclick zawsze kończy się jego błędemhref
. Zazwyczaj kończy się przykry skok na górze strony, ale w przypadku stron korzystających<base>
,<a href="#">
jest traktowane jako<a href="[base href]/#">
, powodując nieoczekiwane nawigacji. Jeśli generowane są jakiekolwiek błędy logowalne, nie zobaczysz ich w drugim przypadku, chyba że włączysz trwałe dzienniki.Jeśli element kotwicy zostanie użyty jako element inny niż kotwica, powinien zostać
href
ustawionyjavascript:void(0);
na ze względu na wdzięczną degradację.Właśnie zmarnowałem dwa dni na debugowanie przypadkowego nieoczekiwanego przekierowania strony, które powinno po prostu odświeżyć stronę, i w końcu wyśledziłem ją do funkcji zwiększającej zdarzenie kliknięcia
<a href="#">
. Wymiana#
zjavascript:void(0);
naprawił.Pierwszą rzeczą, którą robię w poniedziałek, jest oczyszczenie projektu ze wszystkich przypadków
<a href="#">
.źródło
<base>
naprawdę robi dużą różnicę dla#
. Dzięki za wskazanie!Listy nieuporządkowane są często tworzone z zamiarem wykorzystania ich jako menu, ale element
li
listy to tekst. Ponieważli
elementem listy jest tekst, kursor myszy nie będzie strzałką, ale „kursorem I”. Użytkownicy są przyzwyczajeni do wyświetlania palca wskazującego kursor myszy, gdy coś można kliknąć. Użycie znacznika kotwicya
wewnątrzli
znacznika powoduje, że wskaźnik myszy zmienia się w palec wskazujący. Palec wskazujący jest znacznie lepszy do korzystania z listy jako menu.Jeśli lista jest używana w menu i nie potrzebuje linku, nie trzeba określać adresu URL. Problem polega jednak na tym, że jeśli pominiesz
href
atrybut, tekst w<a>
znaczniku jest postrzegany jako tekst, a zatem wskaźnik myszy wraca do kursora I. Kursor I może sprawić, że użytkownik uzna, że elementu menu nie można kliknąć. Dlatego nadal potrzebujeszhref
, ale nigdzie nie potrzebujesz linku.Możesz użyć wielu tagów
div
lubp
do listy menu, ale wskaźnik myszy byłby również dla nich kursorem I.Możesz użyć wielu przycisków ustawionych jeden na drugim do listy menu, ale ta lista wydaje się być lepsza. I prawdopodobnie dlatego to oznaczenie
href="#"
nigdzie nie jest używane w tagach zakotwiczenia wewnątrz tagów list.Możesz ustawić styl wskaźnika w CSS, więc jest to kolejna opcja.
href="#"
Donikąd może być po prostu leniwy sposób ustawić kilka stylizacji.źródło
Problem z użyciem href = "#" dla pustego linku polega na tym, że przeniesie Cię na górę strony, co może nie być pożądanym działaniem. Aby tego uniknąć, w przypadku starszych przeglądarek lub typów dokumentów innych niż HTML5 należy użyć
źródło
O ile wiem, zwykle jest to symbol zastępczy dla linków, do których dołączony jest JavaScript. Główny punkt linku jest obsługiwany przez wykonanie kodu JavaScript; przeglądarki z obsługą JS następnie ignorują prawdziwy cel linku. Jeśli przeglądarka nie obsługuje JS, znak skrótu zasadniczo zamienia łącze w brak działania. Zobacz także dyskretny JavaScript .
źródło
Jak wskazały niektóre inne odpowiedzi,
a
element wymagahref
atrybutu i#
jest używany jako symbol zastępczy, ale jest to również artefakt historyczny.Z sieci deweloperów Mozilla :
Ponadto, zgodnie ze specyfikacją HTML5 :
źródło
Atrybut href określa adres URL zasobu łącza. Jeśli tag kotwicy nie ma tagu href, nie stanie się hiperłączem. Atrybut href ma następujące wartości:
źródło