「ブロック要素・インライン要素」ってどうする?

授業

Web制作の授業中、実習をしている学生からこんな質問が飛んできます。

「先生、span タグに width を入れても幅が変わらないんですけど……なんでですか?」

昔の私なら、あるいは一般的な解説記事なら、こう答えているでしょう。

「それは span がインライン要素だからだよ。幅を持たせたいならブロック要素に変えないとね」と。

でも今の私は、その言葉をぐっと飲み込みます。

喉まで出かかった「インライン要素だから」というフレーズを封印し、少し回りくどくても別の説明を試みます。

なぜなら、「ブロック要素」「インライン要素」という言葉を、授業ではなるべく使わないようにしているからです。

ご存知の通り、現在のHTML仕様(HTML Living Standard)において、この分類は廃止されています。

しかし、私がこの言葉を使わない理由は「仕様にないから」だけではありません。「わかりやすいから」と安易に古い用語を使うことが、学生たちの長期的な成長を妨げると感じているからです。

今回は、教える立場として「あえて便利な用語を捨てる」理由と、その代わりにどうやって「Webの仕組み」を伝えるかについて、私の現在の試行錯誤をまとめてみます。

なぜ「ブロック/インライン要素」という言葉を使いたくないのか

最大の理由は、「HTML(構造)」と「CSS(見た目)」を混同させたくないからです。

初心者に「div はブロック要素です」と教えてしまうと、彼らはそれを「div タグが生まれつき持っている性質」だと誤解してしまいます。

  • div は箱のようなもの」
  • span は文字のようなもの」
  • div は縦に積まれるもの」

こう覚え込ませてしまうと、学習が進んだときに必ず混乱が生じます。

例えば、FlexboxやGridが登場したときです。

「先生、div はブロック要素(縦積み)のはずなのに、なんで display: flex をつけると横並びになるんですか?」

この質問が出るのは、「縦積み」が div の本質(HTML)ではなく、単なる初期状態(CSS)であることを理解できていない証拠です。

HTMLの役割はあくまで「文書の意味(セマンティクス)」を定義すること。

「見た目」や「挙動」を決定するのは、100% CSSの役割です。

この境界線を曖昧にしたまま、「ブロック要素」という「見た目の挙動を含んだ名前」でHTMLタグを分類することは、Webの本質的な理解を遠ざけてしまうと考えています。

【余談】「HTMLだけ」を学ぶ意義

この「構造と見た目を混ぜない」というテーマについて考えるとき、ある一冊の本を思い出します。

2022年に出版された『武器になるHTML』(柴田 宏仙 著)です。

武器になるHTML
せっかく学ぶのなら、プロ志向のHTMLを! ウェブデザイン制作の現場で役立つHTMLを奥深くまで徹底解説。ウェブサイトの基本的なしくみから、要素を使いこなすための知識まで、じっくりと学習することができます。ただHTMLを書くだけではなく、ア...

一般的なWeb制作の入門書は、学習者のモチベーションを維持するために「HTMLを書いてすぐCSSで装飾する」という構成をとることがほとんどです。しかしこの本は、徹底して「HTML(マークアップ)」だけに特化しています。

「HTMLとCSSを切り分けて学習するほうが、結果として言語への深い理解につながる」

この書籍のスタンスには、私自身も非常に感銘を受けました。「HTMLはあくまで文書構造である」という原則を腹落ちさせるためには、学習初期こそ意識的にCSS(見た目)の概念を排除する時間が必要なのかもしれません。

じゃあどう教えよう

用語を使わずに説明するのは、正直に言えば骨が折れます。

しかし、私は最初から「ブラウザの初期スタイル(User Agent Stylesheet)」という概念を正面から教えるようにしています。

1. 「要素」と「スタイル」を完全に切り離す

冒頭の span に幅が効かない質問に対して、私はこう答えます。

「それは、ブラウザが span というタグに対して、最初から display: inline というCSSを勝手にかけているからですね」

学生は驚きます。

「えっ、私が書いたCSSにはそんなこと書いてないですよ?」

「そうだけれども、ブラウザが良かれと思って用意した(ときにはありがた迷惑な)『デフォルトのCSS』があるんですよ」

ここで、実際のブラウザ(Chromeなど)のデベロッパーツールを開き、Computed タブや User agent stylesheet の項目を見せます。そこには確かに display: inline の記述があります。

これが「種明かし」です。

「幅が効かないのは、span というタグのせいではなく、そこにかかっているCSSのせい」であることを視覚的に納得してもらいます。

2. 「displayプロパティ」の状態として教える

私は授業中、名詞としての「ブロック要素」は使わず、状態としての「ブロックレベル」や「インラインレベル」、あるいは直接的に「display: block の状態」という言葉を使います。

  • div はブロック要素です。
  • div は、初期状態では display: block で表示されます。
  • ⭕ これを display: flex に変えれば、Flexコンテナになります。

言葉遊びのように見えるかもしれませんが、このニュアンスの違いが重要です。

「あくまで初期値がそうなっているだけ」という前提があれば、「CSSで上書きすれば自由に変えられる」という発想が自然に生まれるからです。

3. ネスト(入れ子)のルールは「コンテンツモデル」で

かつて「ブロック要素」という言葉は、「どのタグの中にどのタグを入れていいか」というルール(入れ子のルール)を説明するためにも使われていました。

  • 昔:インライン要素の中にブロック要素を入れてはいけない。
  • 今:そんなルールはない。

例えば、リンクの a タグの中に、見出しの h1 や div を入れること。

昔の「インライン要素」という定義ならNGですが、現在のHTML仕様(コンテンツモデル)ではOKです。

「ブロック要素/インライン要素」という言葉を使うと、この「a の中に div を入れてもいい」という現代の仕様を論理的に説明できなくなります。

だからこそ、HTMLの入れ子ルールについては、「フローコンテンツ」「フレージングコンテンツ」といった正しいカテゴリを(噛み砕きつつ)教える必要があります。

古い用語との付き合い方

とはいえ、完全にこの言葉を無視するのは現実的ではありません。

ネット上の技術記事や、先輩たちが書いたレガシーコードには、まだ「ブロック要素」「インライン要素」という言葉が溢れているからです。

なので、学生がある程度理解したタイミングで、必ずこう補足します。

「Webで検索すると『ブロック要素』って言葉がたくさん出てくると思います。

これは昔のHTMLの分類なんだけど、『display: block が効いている状態』を指す言葉として、便宜的に使われていることが多いです。

でも皆さんは、『それはHTMLの性質じゃなくて、CSSの初期値の話だな』と脳内で変換してください」

「嘘は教えない」けれど、「世の中の実情(方言のようなもの)」は伝える。

このバランスを取るのが、教える側の責任だと思っています。

まとめ

「ブロック要素」と言ってしまったほうが、その場は楽かもしれません。

説明も1分で終わります。

けれど、Web制作の本質である「構造(HTML)と表現(CSS)の分離」を正しく理解してもらうためには、最初の段階での言葉選びがとても重要です。

  • HTMLタグは「意味」を持つもの。
  • 「動き」や「見た目」を決めるのは、すべてCSS。

この境界線を曖昧にしないために、私はこれからも「ブロック要素」という便利な言葉をなるべく使わずに、「それはデフォルトのCSSのせいだよ」と、少し手間をかけて教え続けていきたいと思います。

遠回りに見えるかもしれませんが、それが結果として、どんな新しいCSSプロパティが出てきても動じない「強いエンジニア/デザイナー」を育てる近道だと信じているからです。

コメント

タイトルとURLをコピーしました