after/before疑似要素を親の相対サイズで表示する。

HTML/CSS

CSSでafter要素を親要素に対して相対サイズで正方形で表示したい、と思う事ってありますよね?

親要素が最初から正方形であれば普通にwidthとheightを%指定すれば問題なく表示されます。

#hoge::after{
    content: 'after';
    position: absolute;
    top: 0;
    right: 0;
    background-color: steelblue;
    width: 40%;
    height: 40%;
}

でも実際には親要素が縦長だったり横長だったりするため、安直に%指定するとこんな感じで綺麗な正方形になりません。

height: 100% width;

こんな感じでwidthの相対サイズを指定出来ればいいのですが、そんな都合のいい書き方はできません。

ではどうするかというと、ちょっと強引なやり方ですが以下のような方法があります。

#hoge::after{
    content: 'after';
    position: absolute;
    top: 0;
    right: 0;
    height: 0;
    padding-bottom: 40%;
    width: 40%;
    background-color: steelblue;
}

重要なのは要素のheightを0にして、
padding-bottomで疑似的に相対widthを実現している点です。

要素の高さは0ですが、padding分でまるで高さがあるかのように見せます。
paddingでの%指定はwidthに対する相対指定になるため、疑似的にhightがwidthと相対で指定できます。

包含ブロックの width に対するパーセント値によるパディングの寸法です。負の数であってはいけません。

https://developer.mozilla.org/ja/docs/Web/CSS/padding-bottom

コメント