単一のスタイルシートを持つHTMLページがあるとしましょう<link>
。ブラウザはこのスタイルシートのルールをどのように取得してHTMLに適用しますか?私はそれをより速くする方法について尋ねていません、私はレンダリング自体がどのように扱われるか知りたいです。
スタイルシートを解析して結果を段階的にレンダリングするときに、各ルールを1つずつ適用しますか?または、CSSファイルのコンテンツが完全にダウンロードされ、完全に評価されてから、HTMLに一度に適用されますか?または、他の何か?
レンダリング速度に影響するCSSルールの順序に関する質問に先に回答を投稿した後、スタイルシートがロードされたときにスタイルがレンダリングされることを前提として、これを尋ねます。したがって、最初のルールは最後のルールの前に適用され、一度にすべてではありません。どこでアイデアを思いついたのかわかりませんが、それは私がいつも考えていたものです。
サーバーで次のようなデモを試しました。
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
<link rel="stylesheet" href="test.css" />
</head>
<body></body>
</html>
test.css
コンテンツ:
html { background:green }
/* thousands of lines of irrelevant CSS to make the download slow */
html { background:red }
Firefox 5でテストすると、最初は緑になり、次に赤に変わると思っていました。それは起こりませんでした。ルールが競合する2つの別々のスタイルシートを試してみたところ、同じ結果が得られました。多くの組み合わせの後、私がそれを機能させる唯一の方法は、のインライン<style>
ブロックであり<head>
、競合するルールはから来ています<link>
(<body>
リンクタグを除いて本体自体は完全に空でした)。タグにインラインstyle
属性を使用し、<html>
このスタイルシートをロードしても、期待したちらつきは発生しませんでした。
再描画はCSSの影響を受けますか、それともスタイルシート全体がダウンロードされ、最終出力がどうあるべきかについてルールが計算された後、最終出力が一度に適用されますか?CSSファイルはHTML自体と並行してダウンロードしますか、それとも(スクリプトタグのように)ブロックしますか?これは実際にどのように機能しますか?
私は最適化のヒントを探していません。将来それらを引用できるように、この主題に関する信頼できる参考文献を探しています。関係のない大量の資料を見つけずにこの情報を検索することは非常に困難でした。概要:
- すべてのCSSコンテンツは、適用される前にダウンロードされますか?(参考にしてください)
@import
これは、複数<link>
のs、インラインスタイル属性、<style>
ヘッド内のブロック、さまざまなレンダリングエンジンなどの影響を受けますか?- CSSコンテンツのダウンロードは、HTMLドキュメント自体のダウンロードをブロックしますか?