Почему конечные теги иногда требуются, а иногда нет?
Почему некоторые 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
Что касается тегов сценариев, существует хорошее обсуждение переполнения стека: почему не работают самозакрывающиеся теги сценариев?