Как CSS применяется браузером и влияет ли это на перерисовку?

Допустим, у нас есть HTML-страница с единственной таблицей стилей . Как браузер принимает правила из этой таблицы стилей и применяет их к HTML? Я не спрашиваю, как сделать это быстрее, я хочу знать, как обрабатывается сам рендеринг.

Применяет ли он каждое правило одно за другим, когда он анализирует таблицу стилей и постепенно отображает результат? Или содержимое файла CSS полностью загружено, затем полностью оценено, и , затем применяются к HTML сразу? Или что-то еще?

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

Я попробовал демонстрацию на своем сервере, которая выглядела так:




   Test
   



test.css content:

html { background:green }
/* thousands of lines of irrelevant CSS to make the download slow */
html { background:red }

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

Затронуты ли перерисовки в какие-либо с помощью CSS, или окончательный результат применяется сразу после того, как вся таблица стилей загружена и правила вычислены для того, каким должен быть окончательный результат? Файлы CSS загружаются параллельно с самим HTML или блокируют его (как это делают теги скрипта)? Как это на самом деле работает?

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

  • Все ли содержимое CSS загружено до , применяется ли какой-либо из него? (пожалуйста)
  • Как на это влияют такие вещи, как @import , несколько s, встроенные атрибуты стиля, блоки в голова и различные механизмы рендеринга?
  • Блокирует ли загрузка содержимого CSS загрузку самого HTML-документа?

32
задан Community 23 May 2017 в 12:17
поделиться