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? 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.
- przeanalizuj adres URL i niech fragid będzie składnikiem adresu URL.
- Jeśli fragid jest pustym łańcuchem, to wskazana część dokumentu jest górną częścią dokumentu.
- 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.
- 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.
- 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.
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.
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.
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.
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.
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>
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).
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.
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">
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.
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.
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.
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!!!
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.
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