CSS・大きさとボックス

ブロックとインライン

縦に積まれる部品と、文中に流れる部品。この"性格"の違いがdisplay。ここがわかると、レイアウトの霧が晴れる。

width を指定したのに、なぜか効かない部品がある」——CSSを触っていると、そんな不思議に出会います。じつはHTMLの部品には2つの性格があり、それによってふるまいが変わるのです。その性格をあらわすのが display です。

ブロック:縦に積み重なる

<div> <p> <h1> などはブロックという性格。横幅いっぱいに広がり、上から下へ縦に積まれますwidthheight も、素直に効きます。段落が1つずつ改行されて並ぶのは、この性格のおかげです。

インライン:文中に流れる

いっぽう <a> <span> <strong> などはインライン文章の中を左から右へ流れ、横に並びます。文の途中でリンクだけ色が変わっても改行されないのは、この性格だからです。ただしインラインには、widthheight効きません

displayで性格を変える

この性格は display で切り替えられます。

span {
  display: block;
}

インラインの <span>ブロックに変えると、縦に積まれ、width も効くようになります。逆に display: none; にすると、その部品はまるごと消えて見えなくなります(あとでJavaScriptで出したり消したりするときに活躍します)。

display には、flex にも「インラインでもある版」の inline-flex があります。ふつうのflexはブロックとして縦に積まれますが、inline-flex文中に並びながら、中身は横一列に並べられる——アイコンと文字をセットにしたリンク部品などで重宝します。

このレッスンのまとめ

  1. 部品にはブロック(縦に積む)とインライン(文中に流れる)の性格がある
  2. インラインには width / height が効かない
  3. display で性格を変えられる(block / inline-block / none
  4. inline-flex は「文中に並びつつ、中は横一列」といういいとこ取り

:::

やってみよう:SNSリンクをボタンっぽく

れんらくのSNSリンクにclass="social"をつけて、アイコンと文字がセットになったボタンっぽい見た目にしましょう。

<a class="social" href="https://www.youtube.com/">▶ YouTube</a>
<a class="social" href="mailto:[email protected]">✉ メール</a>
.social {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  text-decoration: none;
  color: inherit;
  font-weight: bold;
  font-size: 14px;
  padding: 11px 20px;
  border-radius: 999px;
  border: 1px solid #e9e3d9;
  background-color: #ffffff;
}

inline-flexにしたことで、YouTubeとメールの2つのリンクが横に並びながら、それぞれの中でアイコンと文字も横一列にそろいます。あわせてtext-decoration: none;color: inherit;で、リンクらしい下線と青色も消しました。

ブラウザ表示。「れんらく」の下にYouTubeとメールのリンクが、白い背景の丸みのあるボタンのように横に並んでいる
下線も青色も消えて、ただのリンク文字だったものが、押せそうなボタンの見た目に変わりました。