Czy nadal potrzebujemy ukośników końcowych w HTML5?

122

Czy w HTML5 nadal potrzebujemy końcowego ukośnika, jak w XHTML?

<img src="some_image.png" />

validator.w3.org nie narzekał, jeśli go upuściłem, nawet ostrzeżenia. Jednak niektóre dokumenty online wydają się wskazywać, że końcowy ukośnik jest nadal wymagany w przypadku tagów, takich jak img, link, meta, br itp.

CaptSaltyJack
źródło
6
Wciąż ? Czy jakaś wersja HTML wymagała zamknięcia wszystkich tagów?
Gabe,
9
@Gabe XHTML 1.0 Strict tego potrzebuje. To znaczy, strony internetowe zwykle ładują się dobrze, ale są uważane za nieprawidłowe.
CaptSaltyJack,
3
Tak, ale ten X nie istnieje tylko dlatego, że X jest fajny, istnieje spora przepaść między HTML i XHTML.
1
@Capt: Masz rację, ale to powinno tylko być problemem, jeśli wskazuje doctype XHTML.
Gabe,

Odpowiedzi:

80

img Tagi są pustymi elementami, więc nie potrzebują etykiety końcowej.

Void elements area, base, br, col, command, embed, hr, img, input, keygen, link, meta, param, source, track, wbr

...

Puste elementy mają tylko tag początkowy; Nie można określać znaczników końcowych dla pustych elementów.

W3C | WHATWG

Biorąc to pod uwagę, nie jest to ścisłe analizowanie w HTML5, więc nie wyrządzi żadnej większej szkody.

Brian R. Bondy
źródło
Ciekawe, ponieważ mój edytor (Komodo) wcina wcięcia, jeśli wpiszę „<img src =" x ">” i wcisnę Enter. Oczekuje końcowego ukośnika w trybie HTML5 i chciałem się upewnić, że jest to prawidłowe zachowanie.
CaptSaltyJack,
5
To jest HTML, a nie XHTML, więc nie jest to wymagane. Na szczęście parsery nadal dobrze rozumieją końcowe ukośniki w stylu XHTML, więc nie ma nic złego w pozostawieniu ich tam. Oznacza łatwiejszą konwersję wstecz do XHTML, jeśli jest to konieczne z jakiegokolwiek powodu.
Nightfirecat
4
@FreeRadical: końcowy ukośnik jest opcjonalny dla elementu void, ale tag końcowy byłby nieprawidłowy.
Ry-
26
Chociaż pytanie dotyczy końcowych ukośników (np. <br/), Ta odpowiedź odnosi się tylko do znaczników końcowych (np <br></br>.).
Free Radical
12
@FreeRadical jest poprawne. Ta odpowiedź jest technicznie niepoprawna, ponieważ myli się an ending slashz an end tagcytowanymi w niej akapitami specyfikacji, a tym samym źle je rozumie. Prowadzi to do zamieszania @ YannisDran. @minitech poprawnie podaje, co jest prawdą.
ToolmakerSteve
94

W HTML 5 ukośnik zamykający jest opcjonalny w elementach void, takich jak img(dodam to, ponieważ obecnie akceptowana odpowiedź mówi tylko: „tagi końcowe nie mogą być określone dla elementów void” i nie dotyczy zamykających ukośników w elementach void).

Cytując z http://www.w3.org/TR/html5/syntax.html#start-tags (numer 6):

Następnie, jeśli element jest jednym z pustych elementów lub jeśli element jest elementem obcym, może występować pojedynczy znak „/” (U + 002F). Ten znak nie ma wpływu na puste elementy, ale na obcych elementach oznacza tag początkowy jako samozamykający.

Free Radical
źródło
To nie jest kwestia HTML5. Właściwie we wcześniejszych wersjach HTML <br/>lub <img ... />były błędy.
jj
@jj Cytuję dokumenty HTML5, więc nie rozumiem, dlaczego nie sądzę, że to nie jest HTML5. I rzeczywiście, w innych wersjach takie cięcia były błędami.
Free Radical
Jasne, chciałem powiedzieć, że „czy nadal potrzebujemy końcowych ukośników w HTML5” to niewłaściwe pytanie. Być może kiedyś napiszę pełną odpowiedź z paroma powiązaniami historycznymi. IIRC to była trudna decyzja dla Iana Hicksona (edytora HTML), aby zezwolić na końcowe ukośniki w HTML5.
jj
2

Nie. HTML nigdy tego nie wymagał, nawet przed HTML5. Jeśli planujesz używać XHTML z funkcjami HTML, to tak, jest to konieczne.

Ry-
źródło
1
XHTML to nie to samo co HTML5, prawda? Jeśli mój DOCTYPE to tylko „html”, nie potrzebuję końcowych ukośników, prawda?
CaptSaltyJack
@CaptSaltyJack: Dobrze.
Ry-
1
@CaptSaltyJack - HTML5 obejmuje zarówno zwykły HTML, jak i XHTML. XHTML wymaga zamknięcia wszystkich elementów, ale w przypadku przeglądarek typ dokumentu nie ma wpływu na sytuację. Pełniejsze wyjaśnienie można znaleźć na stronie stackoverflow.com/questions/2662508/…
Alohci
1

Ukośnik końcowy dla elementów void jest opcjonalny.

Oba są poprawne HTML5:

<img src="some_image.png" />

i

<img src="some_image.png">

Void Elements to:

  • area
  • base
  • br
  • col
  • embed
  • hr
  • img 👍
  • input
  • link
  • meta
  • param
  • source
  • track
  • wbr

Poza interesującymi:

Puste elementy nie mogą mieć żadnej treści (ponieważ nie ma tagu końcowego, nie można umieścić treści między tagiem początkowym i końcowym).

Więcej szczegółów na: https://html.spec.whatwg.org/multipage/syntax.html#elements-2


Zobacz także pytanie SO tutaj:
tagi samozamykające (elementy puste) w HTML5

Kai Noack
źródło