【CSS】:beforeや:afterで追加した線(要素)を中央寄せにする方法|親要素の真ん中に配置する

css3-prograshi(プロぐらし)-kv CSS・SCSS
記事内に広告が含まれていることがあります。
[PR]

CSSを使っていると、画像やテキストの上や下に線を追加したいというときがあります。そんなときは:beforeや:afterなどの疑似要素を作成するのが一般的です。

追加した線(疑似要素)の位置を指定するときに、右から10pxや左から5pxと指定するのはとても簡単ですが、中央寄せをするにはコツが必要です。

ここでは、:beforeや:afterで追加した線(要素)を中央寄せにする方法を実例で解説しています。


左右中央寄せにする方法(leftとtranslateX)

左右中央寄せにするにはleftプロパティとtranslateプロパティのtranslateX関数を使います。

afterやbeforeで追加した線に以下のCSSを追加すれば完了です。

position: absolute;
left:50%;
transform: translateX(-50%);

※translateXの値はマイナス50%です。


もしくrightを使っても指定できます。

position: absolute;
right:50%;
transform: translateX(50%);

この場合はプラス50%になります。



実例(左右中央寄せ)

divタグで作った親要素のボックスに対して、:afterを使ってグレーの下線を中央に配置した例は下記になります。

親要素のボックス

:afterを追加

    .demo-container{
      display: flex;
    }

    /* 親要素 */
    .image-box{
      background: ivory;
      text-align: center;
      padding: 20px;
      margin: 20px;
      width: 200px;
      position: relative;
    }

     /* 疑似要素 */
    .image-box:after{
      content: "";
      width: 100px;
      height: 3px;
      background: gray;
      position: absolute;
      left:50%;
      transform: translateX(-50%);
    }
  <div class="demo-container">
    <div class="image-box box1">
      <h2>親要素のボックス</h2>
      <p>:afterを追加</p>
    </div>
  </div>



親要素からはみ出すときの対処法

left: 50%;を指定したことで、:beforeや:afterの疑似要素が親要素からはみ出してしまうという場合は、親要素にposition: relative;を設定してください。詳細は下記をご参考ください。



上下中央に配置する方法(topとtranslateYとtranlateX)

もし上下中央(ど真ん中)を中心として配置したい場合は、translateXだけでなくtranslateYも使います。

      position: absolute;
      top: 50%;
      transform: translateY(-50%);
      transform: translateX(-50%);


グレーの線が親要素のボックスの中心にきていることがわかります。

親要素のボックス

:afterを追加

    .demo-container{
      display: flex;
    }

    /* 親要素 */
    .image-box{
      background: ivory;
      text-align: center;
      padding: 20px;
      margin: 20px;
      width: 200px;
      position: relative;
    }

     /* 疑似要素 */
    .image-box:after{
      content: "";
      width: 100px;
      height: 3px;
      background: gray;
      position: absolute;
      top: 50%;
      transform: translateY(-50%);
      transform: translateX(-50%);
    }
  <div class="demo-container">
    <div class="image-box box1">
      <h2>親要素のボックス</h2>
      <p>:afterを追加</p>
    </div>
  </div>


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