2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

「text-align: center;」はどんな要素に効くのか?主要なdisplayタイプで徹底検証

Posted at

text-align: center;を使用した場合に、思い通りに中央寄せされないことがあるので、どのタイプの要素であれば中央寄せされるのか実験してみた。

まずはtext-align: center;の説明から

値 : start | end | left | right | center | justify | match-parent | justify-all
初期値 : start
適用対象 : ブロック要素
継承 : あり

text-align は CSS のプロパティで、ブロック要素または表のセルボックス内におけるインラインレベルコンテンツの水平方向の配置を設定します。つまり、 vertical-align と同じように機能しますが、水平方向に機能します。

(引用 : https://developer.mozilla.org/ja/docs/Web/CSS/text-align)

と書かれています。

「ブロック要素または表のセルボックス内におけるインラインレベルコンテンツの水平方向の配置を設定します。」

ここがポイント。

ブロック要素内のインラインレベルコンテンツに作用する。

では、実験していきます。

<div class="parent">
  <p class="child1">おはよう1</p>
  <!-- <br /> -->
  <p class="child2">おはよう2</p>
  <!-- <br /> -->
  <p class="child3">おはよう3</p>
  <!-- <br /> -->
  <p class="child4">おはよう4</p>
  <br />
  <p class="child5">おはよう5</p>
  <br />
  <p class="child6">おはよう6</p>
  <br />
  <p class="child7">おはよう7</p>
</div>
.parent {
  font-size: 50px;
  background: pink;
}

.child1 {
  display: block;
  background: skyblue;
}

.child2 {
  display: flex;
  background: skyblue;
}

.child3 {
  display: grid;
  background: skyblue;
}

.child4 {
  display: inline;
  background: skyblue;
}

.child5 {
  display: inline-block;
  background: skyblue;
}

.child6 {
  display: inline-flex;
  background: skyblue;
}

.child7 {
  display: inline-grid;
  background: skyblue;
}

スクリーンショット 2025-09-28 16.59.11-1.png

display: block;

.parent {
  font-size: 50px;
  background: pink;
  text-align: center;
}

.child1 {
  display: block;
  background: skyblue;
}

スクリーンショット 2025-09-28 17.04.03-1.png

  • ブロック要素は、親要素のtext-align: center;の影響を受けない。
  • 文字が中央寄せになっているのは、.parentに当てたtext-align: center;.child1に継承されているため。
    HTMLで書いたテキストノードの値である文字列はインラインレベルコンテンツと扱われる。そのため、text-align: center;はインラインレベルコンテンツに作用し、文字が中央寄せになる。

display: flex;

.parent {
  font-size: 50px;
  background: pink;
  text-align: center;
}

.child2 {
  display: flex;
  background: skyblue;
}

スクリーンショット 2025-09-29 21.07.05-1.png

  • flexコンテナはブロックレベルボックスとして振る舞うため、親要素の text-align: center;の影響を受けない。
  • text-align: center;は、.parentから.child2に継承されているが、テキストは中央寄せにはなっていない。
    その理由は、
    • flexコンテナ内のテキストノードは匿名ブロックボックスにラップされ、flexアイテムになる。
    • flexの規定値ではアイテムはコンテンツ幅のまま(flex: 0 1 auto
    • 幅が広がらずコンテンツ幅になっているため、text-align: center;で中央寄せにはならない。
      (※中央寄せしたい場合はjustify-content: center;など flexの整列プロパティを使う。)

display: grid;

.parent {
  font-size: 50px;
  background: pink;
  text-align: center;
}

.child3 {
  display: grid;
  background: skyblue;
}

スクリーンショット 2025-10-04 15.53.12-1.png

  • gridコンテナはブロックレベルボックスとして振る舞うため、親要素の text-align: center;の影響を受けない。
  • text-align: center;は、.parentから.child3に継承されている。flexのときとは違い中央寄せになる。
    その理由は、
    • gridコンテナ内のテキストノードは匿名ブロックボックスにラップされ、gridアイテムになる。
    • gridの規定値はjustify-items: stretch;align-items: stretch;なので、アイテムはセル幅いっぱいに広がる。
    • テキストノードが保持している文字列はインラインレベルコンテンツなので、text-align: center;が効き、テキストが中央寄せされる。

display: inline;

.parent {
  font-size: 50px;
  background: pink;
  text-align: center;
}

.child4 {
  display: inline;
  background: skyblue;
}

スクリーンショット 2025-10-04 16.45.41-1.png

  • display: inline;はインラインレベルコンテンツとして扱われるため中央寄せになる。

display: inline-block

.parent {
  font-size: 50px;
  background: pink;
  text-align: center;
}

.child5 {
  display: inline-block;
  background: skyblue;
}

スクリーンショット 2025-10-04 17.09.08-1.png

  • display: inline-block;は、親要素の中ではインラインレベルコンテンツとして扱われるため中央寄せになる。

display: inline-flex

.parent {
  font-size: 50px;
  background: pink;
  text-align: center;
}

.child6 {
  display: inline-flex;
  background: skyblue;
}

スクリーンショット 2025-10-04 17.23.25-1.png

  • display: inline-flex;は、親要素の中ではインラインレベルコンテンツとして扱われるため中央寄せになる。
    inline-flexは外側がinline、内側がflexのため、親要素の text-alignの影響を受ける)

display: inline-grid

.parent {
  font-size: 50px;
  background: pink;
  text-align: center;
}

.child7 {
  display: inline-grid;
  background: skyblue;
}

スクリーンショット 2025-10-04 17.46.47-1.png

  • display: inline-grid;は、親要素の中ではインラインレベルコンテンツとして扱われるため中央寄せになる。
    inline-gridは外側がinline、内側がgridのため、親要素の text-alignの影響を受ける)
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?