Нужны ли нам концевые косые черты в HTML5?


122

В HTML5 нам по-прежнему нужен конец косой черты, как в XHTML?

<img src="some_image.png" />

validator.w3.org не жаловался, если я его уронил, даже предупреждение. Но в некоторых онлайн-документах указывается, что конечная косая черта все еще требуется для таких тегов, как img, link, meta, br и т. Д.


6
Тем не менее ? Требовала ли какая-либо версия HTML закрыть все теги?
Гейб,

9
@Gabe XHTML 1.0 Strict это нужно. Я имею в виду, что веб-страницы обычно загружаются нормально, но это считается недействительным.
CaptSaltyJack

3
Да, но X существует не только потому, что X - это круто, между HTML и XHTML есть большой разрыв.

1
@Capt: Вы правы, но это должно быть проблемой только в том случае, если ваш тип документа указывает на XHTML.
Гейб,

Ответы:


80

img теги являются пустотными элементами, поэтому им не нужен конечный тег.

Область пустых элементов, база, br, col, команда, вставка, hr, img, input, keygen, link, meta, param, source, track, wbr

...

У пустых элементов есть только начальный тег; закрывающие теги не должны указываться для пустых элементов.

W3C | WHATWG

При этом в HTML5 нет строгого синтаксического анализа, поэтому он не причинит большого вреда.


Просто любопытно, потому что мой редактор (Komodo) делает отступ, если я набираю '<img src = "x">' и нажимаю Enter. Он ожидает завершающей косой черты в режиме HTML5, и я хотел убедиться, что это правильное поведение.
CaptSaltyJack

5
Это HTML, а не XHTML, поэтому он не требуется. К счастью, синтаксические анализаторы по-прежнему прекрасно понимают концевые косые черты в стиле XHTML, поэтому нет ничего плохого в том, чтобы оставить их там. Означает более легкое обратное преобразование в XHTML, если это необходимо по какой-либо причине.
Nightfirecat,

4
@FreeRadical: завершающая косая черта не является обязательной для элемента void, но конечный тег будет недопустимым.
Ry-

26
Хотя вопрос касается конечных косых черт (например <br/), этот ответ относится только к конечным тегам (например <br></br>).
Free Radical

12
@FreeRadical верен. Этот ответ технически неверен, потому что он сбивает an ending slashс толку an end tagи, следовательно, неправильно понимает параграфы спецификации, которые он цитирует. Это приводит к замешательству @YannisDran. @minitech правильно утверждает, что правда.
ToolmakerSteve

94

В HTML 5 закрывающая косая черта является необязательной для элементов типа void img(я добавляю это, потому что в принятом на данный момент ответе говорится только: «закрывающие теги не должны указываться для элементов void» и не касается закрывающих косых черт в элементах void).

Цитата из http://www.w3.org/TR/html5/syntax.html#start-tags (номер 6):

Затем, если элемент является одним из пустых элементов или если элемент является чужим элементом, тогда может быть единственный символ «/» (U + 002F). Этот символ не влияет на пустые элементы, но на сторонние элементы он отмечает начальный тег как самозакрывающийся.


Это не HTML5. Собственно, в более ранних версиях HTML <br/>или <img ... />были ошибки.
jj

@jj Я цитирую документы HTML5, поэтому не понимаю, почему я не думаю, что это не HTML5. И действительно, в других версиях такие косые черты были ошибками.
Free Radical

Конечно, я хотел сказать «мы тоже еще нужно закончить слеши в HTML5» это неправильный вопрос. Может быть, я когда-нибудь напишу полный ответ с историческими ссылками. IIRC для Яна Хиксона (редактора HTML) было нелегким решением разрешить завершающие слэши в HTML5.
jj

2

Нет. HTML никогда не требовал этого, даже до HTML5. Если вы планируете использовать XHTML с функциями HTML, тогда да, это необходимо.


1
XHTML - это не то же самое, что HTML5, верно? Если мой DOCTYPE - это просто "html", мне не нужны завершающие косые черты, правильно?
CaptSaltyJack

@CaptSaltyJack: Верно.
Ry-

1
@CaptSaltyJack - HTML5 охватывает как обычный HTML, так и XHTML. XHTML требует, чтобы все элементы были закрыты, но для браузеров тип документа не влияет на ситуацию. Для более полного объяснения см. Stackoverflow.com/questions/2662508/…
Alohci


1

Конечный слэш для пустых элементов необязателен.

Оба действительны HTML5:

<img src="some_image.png" />

и

<img src="some_image.png">

Элементами пустоты являются:

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

Кроме интересного:

Элементы Void не могут иметь никакого содержимого (поскольку нет конечного тега, содержимое не может быть помещено между начальным тегом и конечным тегом).

Более подробная информация на: https://html.spec.whatwg.org/multipage/syntax.html#elements-2.


См. Также SO-вопрос здесь:
Самозакрывающиеся теги (пустые элементы) в HTML5

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.