Czy znaczniki samozamykające się są ważne w HTML5?
Walidator W3C nie lubi samozamykających się znaczników (tych, które kończą się "/>
") na elementach non-void . (Elementy Void to te, które nigdy nie mogą zawierać żadnej treści.) Czy są one nadal ważne w HTML5?
Kilka przykładów zaakceptowanych elementów void:
<br />
<img src="" />
<input type="text" name="username" />
Niektóre przykłady odrzuconych elementów nie-void:
<div id="myDiv" />
<span id="mySpan" />
<textarea id="someTextMessage" />
Uwaga:
Walidator W3C akceptuje void samozamykające się tagi: the autor początkowo miał problem z powodu prostej literówki (\>
zamiast />
); jednak znaczniki samozamykające się nie są w 100% poprawne w HTML5 w ogóle, a odpowiedzi omawiają problem samozamykających się znaczników w różnych smakach HTML.
7 answers
W HTML 4,
<foo /
(tak, Bez>
w ogóle) oznacza<foo>
(co prowadzi do<br />
znaczenia<br>>
(tj.<br>>
) i<title/hello/
znaczenia<title>hello</title>
). Jest to SGML zasada, że przeglądarki wykonywały bardzo słabą pracę, a spec radzi autorom, aby unikali składni.W XHTML,
<foo />
środki<foo></foo>
. Jest to reguła XML , która ma zastosowanie do wszystkich dokumentów XML. To powiedziawszy, XHTML jest często serwowany jakotext/html
które (przynajmniej historycznie) są przetwarzane przez przeglądarki za pomocą innego parsera niż dokumenty podawane jakoapplication/xhtml+xml
. W3C dostarcza wytyczne kompatybilności do stosowania dla XHTML jakotext/html
. (Zasadniczo: używaj składni znacznika samozamykającego się tylko wtedy, gdy element jest zdefiniowany jako pusty (a znacznik końcowy był zabroniony w specyfikacji HTML)).-
W HTML5 , znaczenie
<foo />
zależy od typu elementu .- na elementach HTML, które są znaczniki końca są po prostu zabronione, ponieważ są oznaczone jako void elements (zasadniczo "element, który istniał przed HTML5 i którego zawartość była zabroniona"). Ukośnik na końcu znacznika start jest dozwolony, ale nie ma znaczenia. Jest to po prostu cukier składniowy dla osób (i zakreślaczy składni) uzależnionych od XML.
- w innych elementach HTML Ukośnik jest błędem, ale odzyskiwanie błędów spowoduje, że przeglądarki zignorują go i potraktują znacznik jako zwykły znacznik startowy. To będzie zazwyczaj kończy się brakiem znacznika końcowego, co powoduje, że kolejne elementy są dziećmi zamiast rodzeństwa.
- elementy obce (importowane z aplikacji XML, takich jak SVG) traktują ją jako składnię samoczynnie zamykającą się.
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
2019-02-20 12:46:19
Jak zauważył Nikita Skvortsov, samozamykający się div nie będzie sprawdzał poprawności. To dlatego, że div jest elementem normalnym , a nie elementem pustym.
Zgodnie z specyfikacją HTML5, znaczniki, które nie mogą mieć żadnej zawartości (znane jako void elements), mogą być samozamykające się*. Obejmuje to następujące tagi:
area, base, br, col, embed, hr, img, input,
keygen, link, meta, param, source, track, wbr
" / " jest całkowicie opcjonalne dla powyższych tagów, więc {[1] } nie różni się od <img>
, ale <img></img>
jest niepoprawne.
*Uwaga: obce elementy mogą być również samozamykające się, ale nie sądzę, aby to było w zasięgu tej odpowiedzi.
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
2019-01-28 23:45:00
W praktyce używanie samozamykających się znaczników w HTML powinno działać tak, jak można się tego spodziewać. Ale jeśli martwisz się o pisanie valid HTML5, powinieneś zrozumieć, jak używanie takich znaczników zachowuje się w dwóch różnych formach składni, których możesz użyć. HTML5 definiuje zarówno składnię HTML, jak i składnię XHTML, które są podobne, ale nie identyczne. To, który z nich zostanie użyty, zależy od typu nośnika przesłanego przez serwer WWW.
Bardziej niż prawdopodobne, Twoje strony są serwowane jako text/html
, które postępuje zgodnie z łagodniejszą składnią HTML. W takich przypadkach HTML5 pozwala niektórym znacznikom startowym na opcjonalne / przed zakończeniem >. W takich przypadkach / jest opcjonalne i ignorowane, więc <hr>
i <hr />
są identyczne. Specyfikacja HTML nazywa te "puste elementy" i podaje listę ważnych elementów. Ściśle mówiąc, opcjonalne / jest ważne tylko w znacznikach startowych tych pustych elementów; na przykład, <br />
i {[2] } są poprawne HTML5, ale <p />
nie jest.
Specyfikacja HTML5 jasno rozróżnienie między tym, co jest poprawne dla autorów HTML i dla twórców przeglądarek internetowych, przy czym druga grupa jest zobowiązana do zaakceptowania wszystkich rodzajów nieprawidłowej "starszej" składni. W tym przypadku oznacza to, że przeglądarki zgodne z HTML5 będą akceptować nielegalne samozamykające się znaczniki, takie jak <p />
, i renderować je zgodnie z oczekiwaniami. Ale dla autora ta strona byłaby , a nie prawidłowym HTML5. (Co ważniejsze, Drzewo DOM, które uzyskasz z używania tego rodzaju nielegalnej składni, może być poważnie spieprzone; samo-zamknięte <span />
tagi, na przykład, mają tendencję do bałagan rzeczy dużo ).
(w nietypowym przypadku, gdy twój serwer wie, jak wysyłać pliki XHTML jako typ MIME XML, strona musi być zgodna ze składnią XHTML DTD i XML. Oznacza to, że znaczniki samozamykające są wymagane dla elementów zdefiniowanych jako takie.)
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-12-24 10:33:53
HTML5 zasadniczo zachowuje się tak, jakby nie było końcowego ukośnika. Nie ma czegoś takiego jak samozamykający się znacznik w składni HTML5.
-
Samozamykające się znaczniki na non-void elementy takie jak
<p/>
,<div/>
nie zadziała. Końcowy ukośnik będzie ignorowany, a te będą traktowane jako znaczniki otwierające. Może to prowadzić do problemów z gniazdowaniem.To prawda, niezależnie od tego, czy przed ukośnikiem znajduje się Spacja:
<p />
i<div />
również nie będą działać dla z tego samego powodu. -
Samozamykające się znaczniki na void elementy takie jak
<br/>
lub<img src="" alt=""/>
będzie działać, ale tylko dlatego, że końcowy Ukośnik jest ignorowany i w tym przypadku powoduje to prawidłowe zachowanie.
Rezultatem jest to, że wszystko, co działało w Twoim starym "XHTML 1.0 served as text / html"będzie nadal działać tak, jak wcześniej: końcowe ukośniki na znacznikach nie-void również nie zostały tam zaakceptowane, podczas gdy końcowy ukośnik na elementach void zadziałało.
Jeszcze jedna uwaga: możliwe jest reprezentowanie dokumentu HTML5 jako XML, a to jest czasami nazywane "XHTML 5.0". W tym przypadku stosuje się reguły XML, a znaczniki samozamykające się zawsze będą obsługiwane. Zawsze musi być obsługiwany z typem mime XML.
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
2020-06-20 09:12:55
Samozamykające się znaczniki są ważne w HTML5, ale nie są wymagane.
<br>
i <br />
są w porządku.
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
2010-08-24 16:16:03
Byłbym bardzo ostrożny z samozamykającymi się tagami, jak pokazuje ten przykład:
var a = '<span/><span/>';
var d = document.createElement('div');
d.innerHTML = a
console.log(d.innerHTML) // "<span><span></span></span>"
Moje przeczucie byłoby <span></span><span></span>
zamiast
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-05-20 19:09:10
Jednak-tak dla przypomnienia - jest to niepoprawne:
<address class="vcard">
<svg viewBox="0 0 800 400">
<rect width="800" height="400" fill="#000">
</svg>
</address>
I Ukośnik tutaj sprawi, że znów będzie ważny:
<rect width="800" height="400" fill="#000"/>
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-12 00:39:55