Таблицы стилей CSS сверху или снизу? или Как решить проблему с пустой страницей?
Я помещал таблицы стилей сверху (между <head></head>
) html. Насколько я понимаю, это лучшая практика. (например, http://stevesouders.com/hpws/css-bottom.php)
Во всяком случае, недавно я испытал разные результаты.
Вместо этого коды ниже возвращают пустую страницу, когда test.css работает медленно, что означает, что я не испытываю прогрессивного рендеринга.
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="test.css" />
</head>
<body>
Blah..
</body>
</html>
Затем, когда я устанавливаю test.css, я получаю прогрессивный рендеринг.
<!DOCTYPE html>
<html>
<head>
</head>
<body>
Blah..
<link rel="stylesheet" href="test.css" />
</body>
</html>
Насколько я понял и до сих пор понял, это должно быть наоборот.
Возможно, есть и другие факторы, которые я забыл?
Ответы
Ответ 1
Google быстро разрушает традицию "принадлежности" стилей в голове. Они действительно рекомендуют, чтобы критический стиль принадлежал либо тегу <head>
, либо даже встроенному, но к этому нужно добавить другие несущественные стили после закрывающего тега </html>
. Это работает на большинстве, если не во всех современных браузерах (я не тестировал все).
Причина этого заключается в том, чтобы загрузить большую часть стилей в качестве неблокирующей ссылки, позволяя браузеру начать писать на страницу, прежде чем получать все (потенциально) громоздкие стили. В зависимости от того, что в "критических" стилях, это может привести к первоначальной компоновке отвратительных пропорций до визуализации визуализации (FOUC). Вероятно, это то, что вы испытываете с проблемой "пустой страницы".
Помните, что CSS был выпущен почти 20 лет назад (1996), поэтому неудивительно, что Google (и другие) манипулируют и вытесняют традиционные параметры концепции.
Смешно простой пример:
<!DOCTYPE html>
<html>
<head>
<title>It a Brave New World</title>
<link rel="stylesheet" type="text/css" href="css/critical_styles.css" />
</head>
<body>
<!-- best page ever -->
</body>
</html>
<link rel="stylesheet" type="text/css" href="css/bulky_nonessential_styles.css" />
Ответ 2
CSS должен быть определен в вашем <head>
.
Таким образом, по мере того, как элементы загружаются в DOM, они будут отображать с соответствующими стилями, применяемыми немедленно.
Ответ 3
Следует помнить, что когда ваш браузер сначала загружает файл CSS, он обычно кэширует его, хотя Internet Explorer не кэширует файлы CSS, загруженные другими файлами с помощью @import.
Итак, в следующий раз, когда страница загружается, кешированная версия используется без проблем с производительностью. Так что, действительно, единственная проблема может возникнуть, когда пользователь сначала загружает страницу.
Я помещаю все мои CSS в <head>
, где он принадлежит.
Ответ 4
Противоречивая информация может быть найдена по всему Интернету.
Я настоятельно рекомендую, чтобы на сегодняшний день вы устанавливали только критический CSS как блокирующий CSS, а затем все остальное как блокировку без рендеринга, используя следующий метод:
<link rel="stylesheet" href="/path/to/css.css" media="none" onload="if(media!='all')media='all'">
Это будет использовать параметр media
в качестве none
, что означает, что он вообще не будет загружаться, а затем однажды загруженная страница onload
поменяется на all
, что заставит его загрузиться.
Также читайте больше об атрибуте media здесь:https://www.w3schools.com/tags/att_link_media.asp