画像の縦横比率が異なる画像を正方形でサムネイル表示し、クリックすると画像を表示する例。
サムネイル画像は別途用意せず、縮小して表示する。
PCでは3列表示、スマホでは1列表示にする。
※サンプル表示では下記コード以外に表示用のCSSを追加しています
HTMLは共通。
HTML
<div class="image-wrap">
<ul class="image-list">
<li><a href="画像1パス" target="_blank"><figure><img src="画像1パス" alt=""></figure></a></li>
<li><a href="画像2パス" target="_blank"><figure><img src="画像2パス" alt=""></figure></a></li>
<li><a href="画像3パス" target="_blank"><figure><img src="画像3パス" alt=""></figure></a></li>
</ul>
</div>疑似要素(::before)を使ったサンプルコード
CSS
.image-wrap{
width: 50%;
max-width: 800px;
margin: 0 auto;
}
.image-list{
display: grid;
grid-template-columns: repeat(3, 1fr);
column-gap: 10px;
row-gap: 10px;
}
.image-list li figure{
position: relative;
width: 100%;
overflow: hidden;
}
.image-list li figure::before{
content: "";
display: block;
padding-top: 100%; /*アスペクト比 1:1*/
}
.image-list li figure img{
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
margin: auto;
width: 100%;
height: 100%;
object-fit: cover;
}
@media screen and (max-width:599px){
.image-wrap{
width: 100%;
}
.image-list{
display: block;
padding: 10px;
}
.image-list li + li{
margin-top: 10px;
}
}aspect-ratioを使ったサンプルコード
CSS
.image-wrap{
width: 50%;
max-width: 800px;
margin: 0 auto;
}
.image-list{
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 10px;
}
.image-list li figure{
width: 100%;
display: flex;
align-items: center;
justify-content: center;
aspect-ratio: 1/1; /*アスペクト比 1:1*/
overflow: hidden;
}
.image-list li figure img{
width: 100%;
height: 100%;
object-fit: cover;
}
@media screen and (max-width:599px){
.sample_container{
padding: 10px 0;
}
.image-wrap{
width: 100%;
}
.image-list{
display: block;
padding: 0 10px;
}
.image-list li + li{
margin-top: 10px;
}
}

