Стиль и script теги в теле HTML... почему бы и нет?

[Это связано с этим вопросом, но не потому, что это не про адрес электронной почты.]

Во многих случаях, особенно при работе с CMS или какой-либо другой структурой, гораздо проще вставлять теги <style> и теги <script> в <body>, чем в <head>. Это похоже на IE6, IE7 (Windows), Firefox 3.x и Safari (OS X).

Строго говоря, это неправильно? И если это так, то какие негативные последствия могут возникнуть... кроме того, что некоторые клиенты не игнорируются?

Примечание: Радует, что все хотят говорить о СУХИХ и централизованных стилях. Представьте себе, что я хочу использовать теги стиля в документе, потому что они НЕ ГЛОБАЛЬНЫЕ и что я НЕ ДОСТУП К ГОЛОВЕ НА СТРАНИЦЕ ПЕРВОЙ СТРАНИЦЫ. По какой-либо причине, будь то сайт отличается поэтапно, или по принципу абзаца или тому подобное. Меня не интересует, как трудно отследить и изменить. Я беспокоюсь о возможных последствиях использования стиля в теле.

Вы централизуете то, что центральное. Все остальное раздувается в центральных таблицах стилей.

Ответ 1

Хотя спецификаторы явно указывают теги стиля стиля в теге body не разрешены, спецификации не так уж важны. Теги стиля поддерживаются в теле всеми основными браузерами и, в конечном счете, как пользователи видят ваш сайт. * Хотя уже давно существует стремление к более качественной поддержке стандартов и стандартов в индустрии браузеров, документы, а также могут быть.

Google, которая возглавляет работу по спецификации HTML5, одновременно поддерживает google.com, который нарушает спецификации для сохранения байтов, оставляя кавычки вне своих значений атрибутов, используя селекторные хаки против спецификации CSS, включая теги script без типа или язык, и теги ссылок без типа. Пурист может утверждать, что один из самых используемых сайтов в Интернете нарушает спецификации и в серьезной опасности быть ужасно запутанным. Или мы можем рассуждать о том, что ни один браузер не будет использовать популярное приложение, которое не сможет отобразить такие широко используемые хаки в спецификации.

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

* На момент написания теги стиля в теле поддерживаются с типом HTML5 в Firefox 3+, IE6 +, Safari 2+, Chrome 12+. Поддержка, вероятно, вернется дальше, но эти браузеры редко встречаются в сетях.

Ответ 2

Контексты, в которых теги <script> и <style> могут использоваться, зависят от используемого типа doctype. Например, я предполагаю, что вы используете doctype HTML5:

<!DOCTYPE html>

script tag имеет три контекста в рамках документа HTML5:

тег стиля имеет немного более сложную контекстную структуру в рамках документа HTML5:

По существу, это означает, что вы можете поместить тег стиля и тег script в тело, так как тело - это место, где мы размещаем содержимое потока и выражаем содержимое.

Как всегда, обратитесь к спецификации для используемого типа doctype.

Ответ 3

Короткий ответ:


Подробный ответ:

STYLE определяется как head.misc:

<!ENTITY % head.misc "SCRIPT|STYLE|META|LINK|OBJECT" -- repeatable head elements -->

И элементам head.misc разрешено быть дочерними элементами элемента HEAD. Таким образом, STYLE разрешено только быть дочерним элементом HEAD.

SCRIPT определяется как head.misc и special:

<!ENTITY % special
   "A | IMG | OBJECT | BR | SCRIPT | MAP | Q | SUB | SUP | SPAN | BDO">

И особенность определяется как inline:

<!ENTITY % inline "#PCDATA | %fontstyle; | %phrase; | %special; | %formctrl;">

Дополнительно SCRIPT также может быть дочерним элементом BODY. Таким образом, SCRIPT разрешен в элементе HEAD nad везде, где разрешен встроенный.

Ответ 4

Два возможных ответа для стиля в теле:

  • Используйте встроенный стиль. Правда, вы потеряете преимущества внутреннего и внешнего стилей, но если у вас нет доступа к заголовку, то у вас нет доступа к заголовку.

  • Используйте атрибут scoped в элементе стиля. Это ново для HTML5, но идея состоит в том, чтобы ограничить область применения CSS частью страницы, например, до одного div. Плохая новость заключается в том, что она еще не поддерживается (по состоянию на июль 2011 года) и не совместима с ней. Но есть (предположительно) плагин JQuery, который может помочь. Для получения дополнительной информации:

Ответ 5

У вас есть проблема прямого встраивания стилей и скриптов в ваш контент. Основная мантра здесь - принцип СУХОЙ (не повторяй себя). Вы можете использовать script или особый стиль в нескольких местах. Когда этот стиль или script требует модификации, теперь вы можете пойти на охоту за мусорщиком для всех мест, где этот код существует. Сохранение стилей и сценариев в общем месте идеально.

С другой стороны, если это незначительная проблема стиля (нажатие на пиксель или что-то связанное только с одним видом), возможно, это нормально.

Ответ 6

Но почему у вас есть style -tags в теле? Стили являются глобальными, так что я не могу найти логических причин для этого.

Чтобы упростить и разделить вещи, вы также должны использовать внешние таблицы стилей.

Сценарии разрешены и есть по какой-то причине: они могут давать результат, они должны запускаться в определенное время и по другим причинам.

Ответ 7

Самая большая проблема, на мой взгляд, - это удобство. Если вы хотите изменить стиль страницы, это гораздо проще сделать, если весь стиль и script информация находится в одной области. Возможно, что информация стиля /script находится в <style> node, в атрибуте style node (т.е. <body style='...'>) или во внешнем файле (т.е. <link rel='stylesheet' type='text/css' href='style.css' />). Гораздо проще использовать согласованное местоположение, чем пытаться выследить все места, в которых может возникнуть стиль.

Также стоит отметить, что высказывание "помимо того, что у некоторых клиентов полностью игнорируется", похоже на высказывание "помимо взрыва, когда вы ударяете его сзади" или "в сторону от вылета за пределы курса и посадку в гражданском районе", Это достаточно серьезная проблема сама по себе, чтобы оправдать использование стандартной практики.