Почему конечные теги требуют времени, а иногда нет?
очень простой вопрос, но я не нашел для него ответа...
почему для некоторых тегов открытия/запуска html требуется тег закрытия/завершения?
например, <script>
требует a </script>
, а <img>
может (на самом деле, должен) быть самозакрывающимся (<img src="path.jpg" />
)?
Я предполагаю, что он имеет отношение к требованию содержимого между начальным и конечным тегами, но с примером <script>
, <script src="file.js"></script>
ничего не требуется между...
Я спрашиваю, потому что я сжег твердые два часа, пытаясь понять, почему мой включенный script работал в Safari, но не в FF или Chrome. это произошло потому, что я неправильно закрыл тег script. BLEH.
Ответы
Ответ 1
Причиной существования закрывающих тегов является то, что у определенных элементов, естественно, никогда не будет контента, который проходит между тегами. Например, подумайте о теге <br /
. Когда будет полезно что-то вроде <br></br>
? Это просто пустая трата пространства и времени. Этот синтаксис проистекает из синтаксиса XML и стал частью XHTML.
Определение того, какие теги могут/должны быть закрыты, - это парсер HTML в браузере. Спецификация HTML для используемой версии должна определять, как обрабатываются вещи, но, конечно, мы все знаем, что это никогда не обязательно.
Вот отличная статья о самозакрывающихся тегах в HTML5 (и прошлых версиях) для вашей справки.
http://tiffanybbrown.com/2011/03/23/html5-does-not-allow-self-closing-tags/
Ответ 2
Фактически допустимы HTML4 и HTML5, чтобы опустить большое количество конечных тегов (но не XHTML). Вот полный список: http://www.w3.org/TR/html5/syntax.html#optional-tags
Кроме того, существует несколько элементов void, которые просто не могут иметь никакого содержимого (например, img). Вот список таких:
http://www.w3.org/TR/html5/syntax.html#void-elements
Что касается тегов script, есть хорошая дискуссия о переполнении стека об этом:
Почему не работают самозакрывающиеся теги script?