Czy powinienem tworzyć Anchory HTML z 'name' lub 'id'?

Jeśli ktoś chce odnieść się do jakiejś części strony za pomocą metody "http://example.com/#foo", powinien użyć

<h1><a name="foo"/>Foo Title</h1>

Lub

<h1 id="foo">Foo Title</h1>
Oba działają, ale czy są równe, czy też mają różnice semantyczne?
Author: mikemaccana, 2009-01-27

14 answers

Zgodnie ze specyfikacją HTML 5, 5.9.8 przejście do identyfikatora fragmentu :

Dla dokumentów HTML (i typu MIME text/html), należy zastosować następujący model przetwarzania, aby określić, jaka jest wskazana część dokumentu.

  1. przeanalizuj adres URL i niech fragid będzie składnikiem adresu URL.
  2. Jeśli fragid jest pustym łańcuchem, to wskazana część dokumentu jest górną częścią dokumentu.
  3. Jeśli w DOM istnieje element, który ma ID dokładnie równe fragid, to pierwszy taki element w kolejności drzewa jest wskazaną częścią dokumentu; zatrzymaj algorytm tutaj.
  4. Jeśli istnieje a element w DOM, który ma atrybut name, którego wartość jest dokładnie równa fragid, to pierwszym takim elementem w kolejności drzewa jest wskazana część dokumentu; zatrzymaj algorytm tutaj.
  5. W Przeciwnym Razie nie ma wskazanej części dokumentu.

Będzie więc szukać id="foo", a następnie podążać do name="foo"

Edit: jak zauważył @hsivonen, w HTML5 element a nie ma atrybutu name. Jednak powyższe zasady nadal mają zastosowanie do innych nazwanych elementów.

 630
Author: Greg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-04 20:38:14

Nie powinieneś używać <h1><a name="foo"/>Foo Title</h1> w żadnym wypadku HTML jako text/html, ponieważ składnia pustego elementu XML nie jest obsługiwana w text/html. Jednak <h1><a name="foo">Foo Title</a></h1> jest OK w HTML4. To nie jest ważne w HTML5, jak obecnie opracowywane.

<h1 id="foo">Foo Title</h1> jest OK zarówno w HTML4 jak i HTML5. To nie zadziała w Netscape 4, ale prawdopodobnie użyjesz kilkunastu innych funkcji, które nie działają w Netscape 4.

 186
Author: hsivonen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-27 19:37:39

Muszę powiedzieć, czy będziesz linkował do tego obszaru na stronie... takich jak page.html # foo i Foo Title nie jest linkiem, którego powinieneś używać:

<h1 id="foo">Foo Title</h1>

Jeśli zamiast tego umieścisz <a> odniesienie wokół niego, twój nagłówek będzie miał wpływ na <a> specyficzny CSS w Twojej witrynie. To tylko dodatkowy znacznik i nie powinieneś go potrzebować. Bardzo polecam umieszczenie id na nagłówku, nie tylko jest lepiej uformowany, ale pozwoli Ci to adresować ten obiekt w Javascript lub CSS.

 53
Author: Tim Knight,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-12-05 08:54:09

Wikipedia intensywnie wykorzystuje tę funkcję w następujący sposób:

<a href="#History">[...]</a>
<span class="mw-headline" id="History">History</span>

A Wikipedia działa dla wszystkich, więc czułbym się bezpiecznie trzymając się tej formy.

Nie zapominaj również, że możesz użyć tego nie tylko z zakresami, ale z divami lub nawet komórkami tabeli, a następnie masz dostęp do pseudo-klasy: target na elemencie. Po prostu uważaj, aby nie zmieniać szerokości, jak z pogrubionym tekstem, powoduje, że przenosi zawartość, co jest niepokojące.

Anchors-my głosowanie polega na unikaniu:

  • " nazwy i identyfikatory znajdują się w tej samej przestrzeni nazw..."- Dwa atrybuty o tej samej przestrzeni nazw są po prostu szalone. Powiedzmy, że już przestarzały.
  • "Anchors elements without href atribute" - po raz kolejny, natura elementu (hiperłącza lub nie) jest zdefiniowana przez posiadanie atribute?! Podwójne szaleństwo. Zdrowy rozsądek mówi, żeby tego uniknąć.
  • Jeśli kiedykolwiek stylizujesz anchor bez pseudo-klasy, stylizacja dotyczy każdej z nich. W CSS3 można obejść to z selektorami atrybutów (lub taką samą stylistyką dla każdego pseudoklasa), ale nadal jest obejściem. Zwykle nie pojawia się, ponieważ wybierasz kolory dla pseudo-klasy, A podkreślenie jest obecne domyślnie tylko ma sens, aby usunąć, co sprawia, że jest taki sam jak inny tekst. Ale jeśli kiedykolwiek zdecydujesz się na pogrubienie linków, spowoduje to kłopoty.
  • Netscape 4 może nie obsługiwać funkcji id, ale nadal nieznany atrybut nie spowoduje żadnych problemów. To się nazywa kompatybilność dla mnie.
 28
Author: Zoltán Morvai,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-25 14:46:17
<h1 id="foo">Foo Title</h1>

Jest tym, co należy stosować. Nie używaj kotwicy, chyba że chcesz link.

 15
Author: Andrew Marsh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-25 19:49:25

Uwaga dla użytkowników JavaScript: wszystkie identyfikatory stają się zmiennymi globalnymi w Oknie .

<h1 id="foo">Foo Title</h1>

Właśnie stworzyłem js global:

window.foo

Wartość {[3] } będzie HTMLElement dla h1.

Jeśli nie możesz zagwarantować, że wszystkie wartości używane w atrybutach id są bezpieczne, możesz wolisz trzymać się name:

<h1 name="foo">Foo Title</h1>
 14
Author: mikemaccana,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-17 19:24:35

Nie ma żadnej różnicy semantycznej; tendencja w standardach jest ukierunkowana na użycie id zamiast name. Istnieją jednak różnice, które mogą prowadzić do preferowania name w niektórych przypadkach. Specyfikacja HTML 4.01 oferuje następujące wskazówki :

Użyć id Czy name? Przy podejmowaniu decyzji, czy użyć id lub name dla nazwy kotwicy, autorzy powinni rozważyć następujące kwestie:

  • atrybut id może działać więcej niż tylko jako nazwa kotwicy (np. arkusz stylów selektor, identyfikator przetwarzania itp.).
  • niektóre starsze agencje użytkowników nie obsługują kotwic utworzonych z atrybutem id.
  • atrybut name umożliwia bogatsze nazwy zakotwiczeń (z encjami).
 9
Author: erickson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-27 19:26:58

Metoda

ID nie będzie działać w starszych przeglądarkach, metoda Anchor name będzie przestarzała w nowszych wersjach HTML... Wybrałbym dowód.

 9
Author: Spikolynn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-27 08:36:18

Mam stronę internetową składającą się z kilku pionowo ułożonych kontenerów div, identycznych w formacie i różniących się tylko numerem seryjnym. Chciałem ukryć nazwę anchor na górze każdego div, więc najbardziej ekonomicznym rozwiązaniem okazało się włączenie anchor jako id w otwierającym znaczniku div, tj.

<div id="[serial number]" class="topic_wrapper">
 3
Author: maximus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-13 02:10:20

W html 5 atrybut id="" definiuje unikalny identyfikator elementu, który jest również kotwicą dla łącza fragmentu. W poprzednich standardach html atrybut name="" elementu <a> definiuje kotwicę dla łącza fragmentu. Polecam coś takiego:
<a name="foo" id="foo"></a><h1>Foo Title</h1>
Ponieważ wsparcie dla atrybutu id="" jest nieco spotty (nawet jeśli najnowsze wydania wszystkich głównych przeglądarek go obsługują, Wydania, które nie mają więcej niż kilka lat[i najlepiej nie łamać czegoś, jeśli nie ma dobrego powodu]). Jest kompatybilny i nie styluje tego, co jest w elemencie linkowanym, ponieważ zamknięcie jest nadal poza elementem, ale nadal jest ważne we wszystkich obecnych standardach.

Upewnij się, że atrybuty name="" i id="" elementu <a> są takie same.

 3
Author: JustinCB,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-27 00:18:06

Druga próbka przypisuje unikalny identyfikator do danego elementu. Ten element może być następnie manipulowany lub dostępny za pomocą DHTML.

Pierwszy z nich, z drugiej strony, ustawia nazwaną lokalizację w dokumencie, podobną do zakładki. Przywiązany do" kotwicy", to ma sens.

 2
Author: Cerebrus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-27 19:04:36

Tylko obserwacja o znacznikach formularz znaczników w poprzednich wersjach HTML zawierał punkt kontrolny. Formularze znaczników w HTML5 wykorzystujące atrybut id, choć w większości równoważne, wymagają elementu do identyfikacji, z których prawie wszystkie powinny zawierać zawartość.

Na przykład można użyć pustego span lub div, ale to użycie wygląda i pachnie degeneracją.

Jedną z myśli jest użycie do tego celu elementu wbr. Wbr ma pusty model treści i po prostu deklaruje, że podział linii jest możliwy; nadal jest to nieco nieodpłatne użycie znacznika znaczników, ale znacznie mniej niż nieodpłatne podziały dokumentów lub puste zakresy tekstu.

 2
Author: jerseyboy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-31 04:23:07

Jak o użyciu atrybutu name dla starych przeglądarek i atrybutu id do nowych przeglądarek. Obie opcje zostaną wykorzystane, a metoda awaryjna zostanie zaimplementowana domyślnie!!!

 1
Author: Umesh Bagalur,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-20 07:36:49

Cała koncepcja "named anchor" używa atrybutu name, z definicji. Powinieneś trzymać się nazwy, ale atrybut ID może być przydatny w niektórych sytuacjach javascript.

Jak w komentarzach, zawsze możesz użyć obu do zabezpieczenia zakładów.

 -3
Author: Alex Fort,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-27 20:42:04