Какая разница, если я помещу файл CSS внутри <head> или <body>?


155

Обычно CSS-файлы помещаются внутрь <head></head>, что, если я положу их внутрь <body></body>, какая разница?

Ответы:


116

Просто чтобы добавить к тому, что jdelStrother упомянул о спецификациях w3 и ARTstudio о рендеринге браузера.

Рекомендуется, потому что когда у вас есть CSS, объявленный ранее <body> запуска, ваши стили уже загружены. Поэтому очень быстро пользователи видят что-то, появляющееся на их экране (например, цвета фона). Если нет, пользователи некоторое время видят пустой экран, прежде чем CSS достигает пользователя.

Кроме того, если вы оставляете стили где-то в <body>, браузер должен повторно отобразить страницу (новую и старую при загрузке), когда объявленные стили были проанализированы.


10
Да, конечно, в HTML5 все в порядке. Но с точки зрения рендеринга, это может быть медленнее, потому что браузер перерисовывает страницу, как я упоминал.
Mauris

4
Да нет сомнений Я просто добавил это здесь, чтобы люди, которые только что прочитали принятый ответ, не пропустили его. :)
Vilx-

3
@ Vilx это неверная информация! linkи styleне должны появляться в теле, если только они не определены как область (стиль) или не объявлен атрибут itemprop(ссылка).
Кристоф

2
@Christoph это не так, styleэто элемент потока в html5 и html4.1 (даже если он не ограничен) и может быть помещен в тело.
Kpym

1
@Kpym Вы опоздали на вечеринку на 3 года ;-) Но вы правы, стиль теперь является элементом потока, а scopedатрибут устарел.
Кристоф

40

Самые последние версии спецификации HTML теперь разрешают <style>тег внутри элементов тела. https://www.w3.org/TR/html5/dom.html#flow-content Также scopedатрибут, который раньше был обязательным условием для наличия styleтега в, bodyтеперь устарел.

Это означает, что вы можете использовать style тег везде, где хотите, единственное влияние - это снижение производительности страницы из-за возможного перекомпоновки / перерисовки, когда браузер выбирает стили дальше в дереве страниц.

Устаревший ответ:

<style>Тег не допускается в <body>соответствии с w3 спецификации. (Конечно, вы можете применять встроенные стили <div style="color:red">при необходимости, но обычно это считается плохим разделением стиля и содержимого)


3
Это не так, <style>это элемент потока в html 5 и 4.1 и может быть помещен в тело (как и все другие элементы потока).
Kpym

1
Мой +1 за актуальность вашего ответа!
Бенджамин

14

Помещение CSS в тело означает, что он загружается позже. Эту технику используют, чтобы браузер начал быстрее рисовать интерфейс (т. Е. Он удаляет шаг блокировки). Это важно для удобства пользователей на смартфонах.

Я делаю все возможное, чтобы держать один маленький CSS на, <head>а я перемещаю остальные внизу. Например, если страница использует CSS JQuery UI, я всегда перемещаю ее внизу <body>, прямо перед ссылками на JQuery javascript. По крайней мере, все элементы, не относящиеся к Jquery, уже можно нарисовать.


7

Голова предназначена для (цитируя W3C):

«информация о текущем документе, такая как его заголовок, ключевые слова, которые могут быть полезны для поисковых систем, и другие данные, которые не считаются содержимым документа »

Посмотрите Глобальную структуру документа HTML . Поскольку CSS не является содержимым документа, он должен быть в голове.

Также любой другой веб-разработчик будет ожидать увидеть его там, так что не путайте вещи, помещая их в тело, даже если это работает!

Единственный CSS, который вы должны поместить в тело, это встроенный CSS , хотя я обычно избегаю встроенных стилей.


3
Я полностью следую за тем, что вы говорите. Но как бы вы справились с ситуацией, когда у вас есть много страниц, некоторые из которых содержат контент из отдельного файла (в моем случае, частичной страницы .NET Razor), и всякий раз, когда этот файл включается, определенная таблица стилей также должна быть связана? Либо ссылка в заголовке каждой страницы included_ing_, либо ссылка в теле страницы included_ed_. Первый соответствует «css in header», а второй - «написать один раз».
Выдающийся

4

Стандарты ( HTML 4.01: элемент style ) четко указывают, что тег style разрешен только внутри тега head. Если вы добавите теги стиля в тег body, браузеры все равно попытаются извлечь из него максимальную пользу, если это возможно.

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


1
@Pacerier: в HTML5 styleтеги разрешены в теле, если они имеют scopedатрибут.
Гуффа

Гоша, все дают противоречивые ответы: stackoverflow.com/questions/4957446/…
Pacerier

2
@Pacerier: Это потому, что информация в этом комментарии неполная. Вы можете иметь теги стиля в теге body, но только если они имеют атрибут scoped. Вот стандартный документ , определяющий тег стиля: dev.w3.org/html5/spec-preview/the-style-element.html
Guffa

в соответствии с W3 атрибуты области видимости поддерживаются только firefox, в чем смысл?
JSON


1

В дополнение к более ранним ответам, хотя размещение блока кода стиля внутри элемента может работать в современных браузерах (хотя это все еще не делает его правильным), всегда существует опасность, особенно в старых браузерах, что браузер будет отображать код в виде текста если раздел стиля не включен в раздел CDATA.

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

Используете ли вы переходный или строгий тип документа, он все равно будет недействительным согласно (X) спецификациям HTML.


0

Вы бы на самом деле победили цель использования CSS, поместив стили в тело. Смысл в том, чтобы отделить контент от представления (и функции). Таким образом, любые изменения стиля могут быть сделаны в таблице стилей, а не в содержимом. Как только вы используете метод встроенного стиля, каждая страница, которая имеет встроенный стиль, должна быть изменена одна за другой. Утомительно и рискованно, так как вы можете пропустить страницу, или три, или десять.

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

точка зрения Неонбл - еще одна веская причина; если вы испортили HTML, добавив CSS, рендеринг становится проблемой. HTML не создает исключений в вашем коде. Вместо этого он выходит и делает его наилучшим образом, и движется дальше.

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


2
Я не понимаю о чем ты говоришь. « Как только вы используете метод встроенных стилей» - кто здесь говорит об использовании встроенных стилей? На вопрос написано css file .
TJ

0

Два противоречивых ответа:

Со страницы MDN по тегу ссылки:

<link>Элемент может происходить либо в <head>или <body> элементе, в зависимости от того, имеет ли он тип связи, которое тело-ки. Например, тип ссылки таблицы стилей - body-ok, и поэтому <link rel="stylesheet">в теле допускается a . Это, однако, не лучшая практика; имеет больше смысла отделять ваши <link>элементы от содержимого вашего тела, помещая их в вашу голову.

Из CSS Полное руководство (4-е издание / 2017) стр. 10

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


-1

Разница есть. Загрузка страницы асинхронная, поэтому, если у вас есть внешняя таблица стилей, она сразу же загрузит файл css, когда достигнет тега ссылки, поэтому лучше иметь его в начале.


-1

Какая разница это будет иметь?

Плюсы: иногда проще применить определенные атрибуты в определенных местах, особенно если код генерируется на лету (например, сборка через php, и каждому из динамически изменяемого списка нужен свой собственный класс ... например, для синхронизации элементов для преобразований).

Минусы: Немного медленнее, может не сработать когда-нибудь в далеком будущем.

Мое общее мнение по этому поводу: не делайте этого, если не нужно, но если вам нужно, не теряйте сон из-за этого.


-3

Положить <style>в тело хорошо работает со всеми современными браузерами.

Я использовал это на eBay.

Если это работает, не пинайте это.

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