Почему конечные теги иногда требуются, а иногда нет?

Почему некоторые HTML-теги открытия / начала требуют закрывающий / конец тега?

например, <script> требует </script>, в то время как <img> может (на самом деле, должен) быть самозакрывающимся (<img src="path.jpg" />)?

Я бы предположил, что это связано с требованием содержимого между начальным и конечным тегами, но с примером <script>, <script src="file.js"></script> ничего не нужно между...

Я спрашиваю, потому что я потратил время, пытаясь выяснить, почему мой включенный скрипт работал в Safari, а не в FF или Chrome. это потому, что я неправильно закрыл тег сценария. BLEH.

2 ответа

Решение

Причина существования самозакрывающихся тегов заключается в том, что некоторые элементы, естественно, никогда не будут иметь контент, который идет между тегами. Например, подумайте о <br / тег. Когда бы что-то вроде <br></br> быть полезным? Это просто пустая трата пространства и времени для персонажей. Этот синтаксис происходит от синтаксиса XML и стал частью XHTML.

Определение того, какие теги могут / должны быть самозакрывающимися, находится в HTML-парсере в браузере. Спецификация HTML для версии, которую вы используете, должна определять способ обработки вещей, но, конечно, мы все знаем, что это не всегда так.

Вот отличная статья о самозакрывающихся тегах в HTML5 (и прошлых версиях) для вашей справки.

http://tiffanybbrown.com/2011/03/23/html5-does-not-allow-self-closing-tags/

Это действительно допустимые HTML4 и HTML5, в которых опущено большое количество конечных тегов (но не XHTML). Вот полный список: http://www.w3.org/TR/html5/syntax.html

Кроме того, есть несколько пустых элементов, которые просто не могут иметь никакого содержимого (например, img). Вот список из них: http://www.w3.org/TR/html5/syntax.html

Что касается тегов сценариев, существует хорошее обсуждение переполнения стека: почему не работают самозакрывающиеся теги сценариев?

Другие вопросы по тегам