CSSでレスポンシブで可変な正方形を実装する方法
- 投稿日:2021/10/11 |最終更新:2021/10/17
- CSS
CSSでレスポンシブな正方形を実装するには、コンテナーの疑似要素にpadding-topを設定します。
基本的なレスポンシブで可変な正方形
プレビュー
画面の横幅を変更すると上記3つの正方形が可変になると思います。
html例
<div class="box-container"> <div class="box"> </div> <div class="box"> </div> <div class="box"> </div> </div>
css例
.box-container{ display: flex; justify-content: space-between; } .box{ width: 30%; background: #eee; } .box::before{ content: ""; padding-top: 100%; display: block; }
.box
というアイテムの疑似要素を作成し、padding-top: 100%;
にすることでアイテムを正方形にしています。
中に文章が入っている場合のレスポンシブで可変な正方形
プレビュー
サンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルです
サンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルです
サンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルです
画面の横幅を変更すると上記3つの正方形が可変になると思います。
html例
<div class="box-container"> <div class="box"> <p>サンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルです</p> </div> <div class="box"> <p>サンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルです</p> </div> <div class="box"> <p>サンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルですサンプルです</p> </div> </div>
css例
.box-container{ display: flex; justify-content: space-between; } .box{ width: 30%; background: #eee; position: relative; overflow: hidden; } .box::before{ content: ""; padding-top: 100%; display: block; } .box p{ position: absolute; top: 0; left: 0; padding: 10px; margin: 0; }
.box
というアイテムの疑似要素を作成し、padding-top: 100%;
にすることでアイテムを正方形にしています。.box p
をposition: absolute;
にすることで正方形の中に文字列がおさまるようにしています。.box
をoverflow: hidden;
にすることで、正方形からはみ出る部分を非表示にしています。
中に画像が入っている場合のレスポンシブで可変な正方形
プレビュー
画面の横幅を変更すると上記3つの正方形が可変になると思います。
html例
<div class="box-container"> <div class="box"> <img src="./img.jpg"> </div> <div class="box"> <img src="./img.jpg"> </div> <div class="box"> <img src="./img.jpg"> </div> </div>
css例
.box-container{ display: flex; justify-content: space-between; } .box{ width: 30%; background: #eee; position: relative; overflow: hidden; } .box::before{ content: ""; padding-top: 100%; display: block; } .box img{ width: 100%; height: 100%; position: absolute; top: 0; left: 0; object-fit: cover; }
.box
というアイテムの疑似要素を作成し、padding-top: 100%;
にすることでアイテムを正方形にしています。.box img
をposition: absolute;
にすることで正方形の中に画像がおさまるようにしています。.box img
はwidth: 100%; height: 100%;
の範囲でobject-fit: cover;
にすることで正方形のサイズにおさまるように調整しています。
まとめ
レスポンシブで可変な正方形を作成する時、内包する要素の方で調整しなければならない部分(position: absolute;
とか)があるので、注意しながら活用したいと思います。