Имея таблицу стилей <link>в <body>? - PullRequest
4 голосов
/ 03 декабря 2009

Это плохая идея связывать CSS-файлы внутри body?

Я читал, что браузер вынужден снова запускать CSS-рендеринг, если он находит другой CSS-файл за пределами head, просто потому, что ему может понадобиться применить стили к элементам, которые он уже визуализировал. Также я не думаю, что HTML будет правильно проверяться (мне нужно это подтвердить).

Есть ли другие причины?

Ответы [ 6 ]

4 голосов
/ 12 марта 2017

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

function loadCss(url) {
    var link = document.createElement("link");
    link.type = "text/css";
    link.rel = "stylesheet";
    link.href = url;
    document.getElementsByTagName("head")[0].appendChild(link);
}

Для сценариев следует использовать загрузчик файлов JavaScript, например require.js.

3 голосов
/ 03 декабря 2009

Единственная причина, по которой я видел, что люди используют это для оправдания, заключается в том, что они используют определенные движки шаблонов и не могут произвольно изменять таблицы стилей, связанные в голове, при загрузке нового содержимого или определенного представления (в случай MVC фреймворков).

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

<?php

  $styles   = array();
  $styles[] = "css/main.css";
  $styles[] = "css/text.css";

?>

<head>
  <?php foreach ($styles as $style) { ?>
    <link href="<?php print $style; ?>" rel="stylesheet" type="text/css" />
  <?php } ?>
</head>
3 голосов
/ 03 декабря 2009

Стандарт HTML (по крайней мере, HTML 4, на который я смотрел) обязывает , что тег <link> должен быть в <head>. Пока неизвестно, что браузеры будут делать с <link> в <body>. Если бы я создавал браузер, я бы его проигнорировал.

А с какой стати ты вообще этого хочешь?

2 голосов
/ 28 июля 2016

Наличие элемента link с типом ссылки stylesheet в body равно в

и не разрешены в

  • W3C HTML5 (Рекомендация от 2014 года), см. link
  • текущая Рекомендация кандидата HTML3 5.1 (2016-06-21), см. link
0 голосов
/ 26 июня 2015

Я использую пользовательский интерфейс JQuery, но только в зоне зоны участника, где происходит много интерактивности. На моих статических страницах пользовательский интерфейс JQuery не используется, поэтому эта ссылка перешла на тело после <?PHP include "header.php" ?>:

<link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.3/themes/south-street/jquery-ui.css" />

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

0 голосов
/ 03 декабря 2009

Вы либо ссылаетесь на внешнюю таблицу стилей, либо пишете ее напрямую, оба в голове, это не сработает, если вы попробуете по-другому.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...