OSSANS Project since 2020

「もし四十のおっさんがプログラミングを始めたらどう人生変わるのか」
このブログのメインテーマです
肩肘張らずにユルく、ときたま厳しくやっていきます
※プログラミング以外のことも書きます

CSS

【CSS】margin?position?要素の中央寄せで使うプロパティとは?

アイキャッチ画像
CSS

要素が中央寄せにならなくて困ってます…。

今回はこんなお悩みに答えていきます。

本記事の内容

  • 水平方向、垂直方向の中央寄せのやり方

本記事を対象とする方

  • フロントエンドエンジニアを目指す方
  • Webデザイナーを目指す方

この記事を書いている僕はプログラミング歴2年5ヶ月です。webエンジニアとして”社内転職”に成功しました。

水平方向の中央寄せ

まずは水平方向の中央寄せについて考察しましょう。水平なので横(X)方向ですね。

文字を手っ取り早く中央寄せにするのであれば、text-align: center;が有効です。

  • div {
  •   text-align: center;
  • }

ただし、折り返しが発生するとまた中央から始まります。基本的に文章は左から右、上から下に流れて読まれていくので、中央寄せは読みづらくなります。

テキストアライン
※長い文章には不向きなので使い方は限定的です

今度は文字の中央寄せではなく、ブロックの中央寄せを考えてみましょう。親要素と子要素の関係をブロックとして捉えると、子要素の幅が親要素の100%未満の場合、margin-right:auto;margin-left:auto;で子要素を中央寄せにすることができます。

  • #parent {
  •   width: 100vw;
  • }
  • #child {
  •   margin-right: auto;
  •   margin-left: auto;
  •   width: 500px;
  • }
マージン
※子要素の左右にマージンをつけます

ただし、子要素が複数ある場合、一つ一つの子要素にmargin-right:auto; margin-left:auto;を設定するので面倒かつ柔軟性低いです。また、inline要素はblock要素に変換しないといけません。

そこで親要素にdisplay: flex;align-items: center;flex-direction: column;を設定します。そうすると、全ての子要素が中央に配置されます。子要素には何の設定も要りませんし、block要素かinline要素かは関係ありません。

複数の子要素
※子要素が複数ある場合はかなり有効です

子要素の幅が親要素の100%未満の場合、もう一つ有効な設定がleft: 50%; transform: translateX(-50%);です。この設定が有効なのは何らかのpositionプロパティが設定されている時です。

親要素にposition: relative;、子要素にposition: absolute;が設定されているのはよく使われます。主に擬似要素によく使われる印象ですね。当然ながら子要素の幅が親要素をはみ出す場合は適用されません。

  • #parent {
  •   position: relative;
  • }
  • #child {
  •   left: 50%;
  •   position: absolute;
  •   transform: translateX(-50%);
  •   width: 60%;
  • }
子要素にポジションプロパティを設定
※全てのポジションプロパティに有効なわけではありません

left: 50%;で親要素の左端を起点に50%(半分)移動します。その次にtransform: translateX(-50%);で子要素のwidthの50%(半分)をマイナス方向に移動させます。これにより左右の中央寄せを実現できます。

垂直方向の中央寄せ

続いて垂直方向の中央寄せについて考察しましょう。垂直なので縦(Y)方向になります。

文字の高さを手っ取り早く寄せるのであれば、line-heightを要素の高さと合わせるのが有効です。例えば要素が500pxの高さを持っている場合、line-height: 500px;とすると垂直に中央寄せになります。

  • div {
  •   height: 500px;
  •   line-height: 500px;
  • }
ラインハイトの設定
※line-heightは行の高さの設定を行います

しかし、これは要素の高さがauto設定になっていると使えないので、使い道は少ないです。

水平方向の中央寄せで、要素の左右のmarginをautoにする方法を紹介しました。と言うことは、上下のmarginをautoにすると垂直方向の中央寄せになるのかという仮説が立ちます。お察しの通り、margin-top: auto; margin-bottom: auto;は有効となります。

  • #parent {
  •   min-height: 500px;
  • }
  • #child {
  •   margin-top: auto;
  •   margin-bottom: auto;
  • }
上下のマージン設定
※上下のマージンも有効となります

注意事項として、親要素の高さにはheight: auto;、もしくはmin-height: 500px;を設定しなければなりません(min-height: 500px;は任意の数字)。親要素の高さに絶対値を設定すると、子要素がそれ以上大きくなった場合に、子要素が親要素からはみ出てしまうからです。height: auto;かmin-heightにすることで親要素は子要素が大きくなるにつれ、ブラウザが伸張してくれます。

もう一つ、垂直方向の中央寄せで覚えておきたいのは、positionプロパティを使った場合の設定方法です。

  • #parent {
  •   position: relative;
  • }
  • #child {
  •   position: absolute;
  •   top: 50%;
  •   transform: translateY(-50%);
  • }
ポジションプロパティの設定
※全てのポジションプロパティに有効なわけではありません

top: 50%;で親要素の上端を起点に50%(半分)移動します。その次にtransform: translateY(-50%);で子要素の高さの50%(半分)をマイナス方向に移動させます。これにより上下の中央寄せを実現できます。

今回のまとめ

今回は要素を中央寄せにする方法について紹介しました。最後まで読んで頂きありがとうございました。

水平方向にしろ、垂直方向にしろ、marginのautoがかなり有効

positionプロパティを使用せざるを得ない時は、transform: translate;で対処する

関連記事

  • CSS
    ブログアイキャッチ画像
    CSS
    2023.02.01(更新)

    コード量激減!ブレイクポイントなしでレスポンシブ対応してみた【メリットしかない!】

  • CSS
    ブログアイキャッチ画像
    CSS

    【備忘録】CSSセレクター、結合関連の書き方をまとめてみた。

CATEGORY カテゴリー別最新記事

  • CSS
    アイキャッチ画像
    CSS

    【CSS】margin?position?要素の中央寄せで使うプロパティとは?

  • Docker
    アイキャッチ画像
    Docker
    2022.10.03(更新)

    【簡単設定!】DockerでWordPressをローカル開発する方法

  • HTML
    アイキャッチ画像
    HTML
    2023.02.18(更新)

    【図解あり】aタグの入れ子ルールとHTMLの入れ子ルールを覚える方法

  • JavaScript
    アイキャッチ画像
    JavaScript
    2023.03.04(更新)

    【実例コードあり】覚えておきたいパララックスデザインの3つの基本

  • Python
    アイキャッチ画像
    Python
    2023.02.09(更新)

    【やらなきゃ損!】2日でできるPythonのExcelコピペ自動化!

  • Study
    アイキャッチ画像
    Study
    2023.02.16(更新)

    稼ぐために始めたプログラミングのこれまでの振り返り。勉強方法や役立った本も紹介。

  • web site
    アイキャッチ画像
    web site
    2022.11.26(更新)

    ページ表示速度アップ!npmでソースファイルを軽量化する方法【サクッと簡単!】

  • WordPress
    アイキャッチ画像
    WordPress
    2022.10.26(更新)

    【コピペ可】WordPressサイトをPWA化するためにService Workerを実装してみた。