【css】grid-templateでtwitter風に画像を表示させる方法

共通のCSS
.img { /* 一番外の枠 */
display: flex;
justify-content: center;
align-items: center;
width: 100%;
border-radius: 20px; /* 角の丸み */
overflow: hidden; /* はみ出した部分を見えなく */
gap: 2px; /* 画像と画像の隙間 */
}
.img img {
margin: 0;
width: 100%;
}
.img .wrapper { /* 画像を包む要素 */
display: flex;
justify-content: center;
align-items: center;
overflow: hidden; /* はみ出した部分を見えなく */
}
画像が1枚の時

<div class="img">
<img src="https://gxy-life.com/images/blog/202112/3.jpg" alt="ネコ" />
</div>
CSSは共通のコードで表現できます。
画像が2枚の時


<div class="img two">
<div class="wrapper">
<img src="https://gxy-life.com/images/blog/202112/3.jpg" alt="ネコ" />
</div>
<div class="wrapper">
<img src="https://gxy-life.com/images/blog/202112/3.jpg" alt="ネコ" />
</div>
</div>
.two {
display: grid;
grid-template-columns: repeat(2, 1fr);
}
.two img {
width: 200%; /* ここがポイント */
}
widthが100%だと高さが半分になってしまいます。縦長の画像が2枚ならwidthは100%にします。
画像が3枚の時



<div class="img three">
<div class="wrapper">
<img src="https://gxy-life.com/images/blog/202112/3.jpg" alt="ネコ" />
</div>
<div class="wrapper">
<img src="https://gxy-life.com/images/blog/202112/3.jpg" alt="ネコ" />
</div>
<div class="wrapper third">
<img src="https://gxy-life.com/images/blog/202112/3.jpg" alt="ネコ" />
</div>
</div>
.three {
display: grid;
grid-template:
"wrapper1 wrapper3"
"wrapper2 wrapper3";
}
.third { /* 三枚目の画像を包む要素 */
grid-area: wrapper3;
}
.third img { /* 三枚目だけ縦長に */
width: 200%; /* 2枚の画像の時と同じで高さを2倍に */
}
画像が2枚の時と同じで、3枚目が縦長の画像ならwidthは100%にします。
参考

画像が4枚の時




<div class="img four">
<div class="wrapper">
<img src="https://gxy-life.com/images/blog/202112/3.jpg" alt="ネコ" />
</div>
<div class="wrapper">
<img src="https://gxy-life.com/images/blog/202112/3.jpg" alt="ネコ" />
</div>
<div class="wrapper">
<img src="https://gxy-life.com/images/blog/202112/3.jpg" alt="ネコ" />
</div>
<div class="wrapper">
<img src="https://gxy-life.com/images/blog/202112/3.jpg" alt="ネコ" />
</div>
</div>
.four {
display: grid;
grid-template-columns: repeat(2, 1fr);
}
- grid-templateを使えば、画像を思い通りに配置できる。
- 今回は横長画像のみの場合。もし、縦長画像が混じるのであれば、javascriptで分岐し配置し、スタイルを変える必要がある。
こんな記事も読まれています。
-
【HTML】【CSS】【javascript】電卓の作り方
電卓のソースコードを2つ紹介します。javascriptはわずか数行で書けます。
-
【JacvaScript】【CSS】たった4行のJavaScriptでできるハンバーガーメニューの作り方
たった4行のJavaScriptで作るハンバーガーメニューの作り方について紹介します。✖をつくるには、transform-originがポイントです。
- リンク
-
波紋エフェクトを表現するjqueryのripples-min.jsの使い方
jqueryのripples-min.jsを使うと簡単に水面の波紋を表現できます。波紋の広がりの速度、波紋の大きさ、波紋のブレの値を変えていろいろ表現させると面白いです。
-
【Javascript】querySelectorAllで要素を取得し、クリックしたら、クラスを追加したり、削除したりする方法。
JavascriptのquerySelectorAllで要素を取得し、クリックしたら、クラスを追加したり、削除したりする方法について解説します。querySelectorと同じように書いてしまうとエラーがでます。forEachを使うとすべてに適用できます。
- リンク
-
要素の高さを取得する方法。getBoundingClientRectとは?window.innerHeightとは?window.pageYOffsetとは?
要素の高さを取得する方法について解説します。getBoundingClientRect、window.innerHeight、window.pageYOffsetについて理解し、要素がいつ画面に現れるかを把握できるようにしましょう。
-
Javascriptを使ったページネーションの実装
トップページの記事が増えてきたので、何とかページネーションで最新の記事だけを表示できないかと思っていたら、いい記事を発見しました。カスタマイズして実装することができました。
- リンク
-
【Javascript】マウスの指す(X, Y)座標とドラッグ & ドロップを理解する
マウスの指す(X, Y)座標とドラッグ & ドロップについて解説します。mousedown, mouseover, mousemove, mouseupを使います。
-
【javascript】連想配列をテーブルできれいに表示する方法
javascript(Object.entries)を使って、連想配列の中身をテーブルできれいに表示する方法について紹介します。
- リンク