2017-02-01 8 views
1

ちょうどHTML/CSSで遊んで、タグが囲まれていないテキストのチャンクをブラウザーがどのように処理するのか疑問に思った。以下のコードを実行すると、3つすべてのテキストチャンク(<head><head><body><body>の間にある)が赤い「ボディ」スタイルを取得しました。CSSでHTMLテキストノードを選択するルールは何ですか?

<body>以外のテキスト文字列が「ボディ」ルールを選択するのはなぜですか?

HTML

<html> 
    <head> 
    <title>Test web page</title> 
    head text outside a tag 
    </head> 
    Text node between head and body 
    <body> 
    <h1>Header</h1> 
    <p> 
     Some paragraph text 
    </p> 
    some body text outside a tag 
    </body> 
</html> 

CSS

body { 
    color:red; 
} 

h1, p { 
    color:lightblue; 
} 

head { 
    color: yellow; 
} 
+6

あなたのHTMLは無効で、ブラウザはそれを理解しようとしているだけなので、すべての通常のテキストは 'body'になければなりません。 – str

答えて

1

あなたの問題は、実際にはCSS関連ではありません。 CSSは問題をと表示します。です。

ブラウザがHTMLを解析すると、いくつかの規則に従います。

  1. ヘッドにプレーンテキストを含めることはできません。本文はできます
  2. 一部の開始タグと終了タグは任意です
  3. エラーがある場合、それを回避しようとする

したがって、パーサが頭に何らかのプレーンテキストを見つけた場合、テキストはそこに属していないことがわかります。それは最初に目に見えない</head>終了タグを挿入し、続いて目に見えない<body>開始タグを挿入して、うれしく解析を続けます。
これは職場でのエラー処理でもありません。これは、通常の解析ルールの働きです。

エラー処理ルーチンは、本体に許可されていない</head>というタグに遭遇したときにのみ動作します。その後、このタグは無視され続けます。後で<body>タグと同じですが、これも本文では許可されていません。
それはそれがしていることであり、その結果を得る理由は何ですか。

関連する問題