CSSだけでレスポンシブに正方形を維持する方法
div要素のアスペクト比を固定したい(例えば正方形)
デザイン上、div要素のアスペクト比を1:1(正方形)などに固定したい、ということがある。 当たり前だが、以下のコードは動作しない。
<div style="width:100%; height:100%">hoge</div>
親要素が正方形でない限り当然、高さと幅はバラバラに評価されるため。
どうするの?
padding-topや-bottomの評価は、widthを基準に行われることを使う。ちょっとトリッキーだが…
<div class="parent">
<div class="child">hoge</div>
</div>
.parent {
position: relative;
overflow: hidden;
width: 100%;
}
.parent:before {
content: "";
display: block;
padding-top: 100%;
}
.child {
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
}
なお、親がposition:relative;なのも重要で、これがついてないと、子の posotion: absolute; の挙動が変わる。 (知らなかった。こちらで学ばせていただきました: CSSのposition: absoluteとrelativeとは)
comments powered by Disqus