` `要素の「聖域」を守る:なぜ私たちは「段落」の中にブロックを置いてはいけないのか
フロントエンドの現場でコードレビューをしていると、今でも時折見かける光景があります。`
`タグの中に、悪気なく`
- `を入れ子にしてしまうケースです。
- 配置可能なもの(フレージングコンテンツ): ``, ``, ``, ``, `
`, `
` など。 - 配置してはいけないもの(フローコンテンツの一部): `
`, `
- `, `
- ポイント1
- ポイント2
- ポイント1
- ポイント2
`, `
`, そして他の ` ` 要素など。
なぜこれらがダメなのか。それは、`
`は「段落」という最小の文脈単位を表すための要素だからです。段落の中に別の意味の塊(ブロック)が入り込むことは、論理構造として破綻を意味します。
ブラウザが裏側でやっている「残酷な修正」
「でも、`
`を入れてもブラウザで見たら普通に表示されるよ?」そう、その通りです。しかし、それこそが現代のブラウザの「優しさ」であり、同時に我々フロントエンドエンジニアを悩ませる「落とし穴」なのです。
あなたが`
テキスト`のような間違ったマークアップを書くと、ブラウザのHTMLパーサーは「おっと、この開発者は構造を間違えているな。よし、俺が直してやる」と判断し、強制的にDOMツリーを書き換えます。
具体的には、`
`が出現した瞬間に「あ、ここで段落は終わりだな」と解釈され、``は自動的に閉じられます。結果として、ブラウザは以下のように認識を強制変換します。
ここはダメな例ここはダメな例この自動修正の結果、CSSのセレクタが効かなかったり、予期せぬ余白が生まれたりします。ブラウザの「気を利かせた修正」に依存したコードを書くのは、砂の上に城を建てるようなものです。
実務で使えるベストプラクティス:正しいマークアップ
では、段落の中にリストやブロック要素を配置したい場合はどうすればいいのでしょうか。答えは簡単です。`
`の使用を諦め、適切なコンテナで囲むか、CSSでレイアウトを制御することです。
以下に、現場でそのまま使える、セマンティックで堅牢なコード例を提示します。
以下のリストが重要なポイントです。
以下のリストが重要なポイントです。
まとめ:HTMLは「設計図」である
プロフェッショナルなフロントエンドエンジニアは、動くコードではなく「壊れないコード」を書きます。
HTMLの構造を正しく保つことは、ブラウザのパース負荷を減らすだけでなく、スクリーンリーダーなどのアクセシビリティツールに対しても正しい情報を伝達するための最低限の礼儀です。
「`
`の中に何かを入れたくなったら、一度立ち止まる」。
この小さな習慣が、あなたのコードを、そしてあなたのエンジニアとしての信頼を確実に底上げします。明日からのコーディングで、ぜひ意識してみてください。現場からは以上です!
タイトルとURLをコピーしました
「見た目はCSSで調整できているし、ブラウザも動いているからいいんじゃない?」
もしあなたがそう思っているなら、今日でその認識はアップデートしましょう。HTMLは単なる「見た目の指示書」ではありません。ブラウザという名の優秀なレンダリングエンジンに対する「構造の設計図」なのです。
` `要素のコンテンツモデル:絶対的なルール
HTML5以降、仕様書であるHTML Living Standardは非常に合理的になりました。`
`要素のコンテンツモデルは「フレージングコンテンツ(Phrasing Content)」のみです。
これは平たく言えば、「テキストや、テキストの一部として扱われるインライン要素しか入れてはいけない」という極めてシンプルな制約です。

コメント