Top

メモ書き

アニメーションでtransformを使っていて詰まることがあったので、使えそうなものをここでまとめておきます。

デモはまとめてこちらにdemo

左右中心揃えにする方法

まず、HTMLは共通でこちら。

<div class="box">
    <div class="box__item">Lorem ipsum dolor sit amet consectetur adipisicing elit.</div>
</div>

幅方向に中央揃えする方法はもはや紹介不要な2つですが、
初心者にも向けた備忘録なので一応。

text-align:center

.box {
    text-align: center;
}

margin: 0 auto;

.box {
    .box__item {
        width: 80%;
        margin: 0 auto;
    }
}

上下左右中央揃えにする方法

さて、ここからがこの記事のメインです。
各方法重要なところだけピックアップしています。

transform: translate(-50%, -50%);

.box {
    position: relative;
    
    .box__item {
        position: absolute;
        transform: translate(-50%, -50%);
        top: 50%;
        left: 50%;
    }
}

個人的には一番使っているのがこの方法。
position: absolute;を指定した要素の基準点は初期値では要素の左上にあります。
その基準点をtransform: translate(-50%, -50%);で.box__itemの中心に指定したのち、top: 50%; left: 50%;で.boxの中心に指定している感じですね。

フレックスボックのjustify-content、align-itemsを利用する方法

.box {
    display: flex;
    justify-content: center;
    align-items: center;
    
    .box__item {}
}

これはpositionじゃないなーって感じた時に使っています。
フレックスボックスのjustify-content,align-itemsで.boxの子要素を幅方向、高さ方向共に中心に配置した結果、上下左右中央揃えとなっています。

フレックスボックスの使い方はこちらでも紹介しています。

transform: translate();を使わずにposition: absolute;で中心に持ってくる方法

.box {
    position: relative;
    
    .box__item {
        position: absolute;
        top: 0;
        bottom: 0;
        left: 0;
        right: 0;
        margin: auto;
    }
}

最後にこちら。
先ほど紹介した、transform: translate();を使わない方法でもうひとつ。
正直これの理屈はあんまりわかってないんですけど、笑
上下左右全部の距離を0としておいて、margin: auto;で中心に持ってくる感じですね。
margin: 0 auto;で真ん中寄せにする感覚で使ってもらえれば◎