display:inline-flexで奇麗な見出しが書けた話

はじめに

コーディング作業をしていて、たまに見出しの頭に「1」「2」「3」・・のように数字を入れるパターンの要望があります。

(実際に表現すると下のような感じです)

1天は人の上に人をつくらず。

2天は人の下に人をつくらず。

の中に数字を縦横中央で配置させ、その右にテキストを配置させるというものですが、
なんとなくdisplay:inline-flexを使ってみたら、簡単に縦横中央配置の見出しができたので紹介してみます。

目次

これの何が良いのか?

これの何が良いのかについては、ソースをお見せした方が話が早いかもしれません。

HTML

  1. <p class="test01"><span class="number">1</span>天は人の上に人をつくらず。<p>

CSS

  1. .test01 {
  2.  font-size:20px;
  3.  color: #333;
  4.  margin-bottom:10px;
  5. }
  6. .test01 .number {
  7.  width:30px;
  8.  height:30px;
  9.  background: #338DC9;
  10.  color:#999;
  11.  margin-right:10px;
  12.  color:#fff;
  13.  display : inline-flex;
  14.  justify-content: center;
  15.  align-items: center;
  16. }

できあがったもの

1天は人の上に人をつくらず。

CSS2つの宣言だけで上のようにできるのでシンプルで良いと感じています。

これがdisplay:flexだとこのように横に並んでくれません。実際にCSSを修正してみると次のようになります。

HTMLに変更は無いため割愛します。

CSS

  1. .test01 {
  2.  font-size:20px;
  3.  color: #333;
  4.  margin-bottom:10px;
  5. }
  6. .test01 .number02 {
  7.  width:30px;
  8.  height:30px;
  9.  background: #338DC9;
  10.  color:#999;
  11.  margin-right:10px;
  12.  color:#fff;
  13.  display : flex; // inline-flex から flex に修正
  14.  justify-content: center;
  15.  align-items: center;
  16. }

できあがったもの

1天は人の上に人をつくらず。

このように、冒頭の見出し部分で改行されてしまいます。

当然といえば当然なのですが、display:flexの場合、その子要素は横並びにできるのですが自分自身は横並びになりません。

その点display:inline-flexは自分自身を横並びにできるからテキストがズレない。という違いです。

枠の形状を変えてみる

border-radius:50%を使えば、枠を丸くできます。

  1. .test01 {
  2.  font-size:20px;
  3.  color: #333;
  4.  margin-bottom:10px;
  5. }
  6. .test01 .number03 {
  7.  width:30px;
  8.  height:30px;
  9.  background: #338DC9;
  10.  color:#999;
  11.  margin-right:10px;
  12.  color:#fff;
  13.  display : flex;
  14.  justify-content: center;
  15.  align-items: center;
  16.  border-radius: 50%;
  17. }

1天は人の上に人をつくらず。

という訳でinline-flexを使った配置の紹介でした。

縦横中央配置ってposition:absolute使ったりいくつか方法がありますが、個人的にはflexboxを使った方法が好きで、私がコーディングするとCSSの至る所にdisplay:flexが存在しがちです。