当サイトは、アフィリエイト広告を利用しています
cssのgridを使う時に基本となるプロパティをメモ。 react + emotionでサンプル実装していく
/** @jsxImportSource @emotion/react */import { css } from "@emotion/react";export default function App() {const array = Array.of(1, 2, 3, 4, 5, 6, 7);return (<div className="App"><h1>Hello CodeSandbox</h1><div css={[grid]}>{array.map((val) => (<div css={[gridItem]}>{val}</div>))}</div></div>);}const grid = () => [css`display: grid;// ここにプロパティを追加実装していく`];const gridItem = () => [css`border:1px solid black;text-align:center;`];
displayプロパティの一つで 設定した要素の子要素を
gridで表示する。
display:gridを設定するだけでは何も変化はないので
下記のプロパティで「何列」にするなどを合わせて設定する必要がある
gridの列を何列で、どれくらいの幅にするかを設定するプロパティ
カラムの数だけ値を設定する。
1行に3列で、1列目が20px,2列名が200pxの例
const grid = () => [css`display: grid;grid-template-columns: 20px 200px 200px;`];
frは比のこと。列幅を全て同じにしたい場合は1fr:1fr:1frで設定する。
const grid = () => [css`display: grid;grid-template-columns: 1fr 1fr 1fr;`];
grid-template-columnsの設定時に使用できる関数で
列数と幅を同時に設定できる。
repeat関数はgrid-template-columnsで設定し、
引数は
を指定する。
const grid = () => [css`display: grid;grid-template-columns: repeat( 4 , 1fr);gap:1px 20px;`];
列数を定数ではなく自動で折り返したい場合は、repeat関数の第一引数に auto-fillを設定する。
const grid = () => [css`display: grid;grid-template-columns: repeat( auto-fill, minmax(300px,1fr) ) ;;gap:1px 20px;`];
auto-fillを設定した場合、グリッドアイテムが1つ以上入るスペースができたら、新しく空のアイテムで埋める
ようになるため、上記の例でいうと、
ということになる
そのため、最大幅を1frに設定しているが、実際は余白が300pxを上回った場合は
折り返していた要素が上に戻ってくるため引き伸ばしはされない。
列折り返したい場合は、repeat関数の第一引数に
auto-fitを設定しても実現することができる。
auto-fillとの違いとしては余白ができても新しい要素で埋めることはせず、
minmaxで指定している最大幅まで伸びるようになる
const grid = () => [css`display: grid;grid-template-columns: repeat( auto-fit, minmax(100px,1fr) ) ;;gap:1px 20px;`];
auto-fitの場合は最小幅が100pxを下回る場合のみ折り返すようになる。
100pxを超える余白ができた場合は、折り返さずにその分を要素に
割り振るので要素が引き伸ばされる
※前提として最大幅に1frが設定されていること。
最大幅と最小幅を設定することができる。
repeat関数はgrid-template-columnsで設定し、
引数は
を指定する。
grid-template-columnsにminmax関数を設定することで
grid全体の最小最大幅を設定できる
const grid = () => [css`display: grid;grid-template-columns:minmax(800px,1fr);gap:1px 20px;`];
grid全体の幅が800px以上の場合は各要素が均等に大きくなり、
grid全体の幅が800pxを下回る場合は画面が切れる
repeat関数の第二引数にminmax関数を渡すことで
grid要素の最小最大幅を設定することができる
const grid = () => [css`display: grid;grid-template-columns: repeat( 3, minmax(500px,1fr) );gap:1px 20px;`];
grid要素の幅が500px以上の場合は各要素が均等に大きくなり、
grid要素の幅が500pxを下回る場合は画面が切れる
grid要素の間を設定することができる
gird要素間の横の間隔を設定
const grid = () => [css`display: grid;grid-template-columns: 1fr 1fr 1fr;column-gap:5px;`];
gird要素間の縦の間隔を設定
const grid = () => [css`display: grid;grid-template-columns: 1fr 1fr 1fr;row-gap:10px;`];
gird要素間の縦横の間隔を一括で設定
一つ目の方が縦の間隔、二つ目が横の間隔になる
※一つしか書かなかった場合は同じ値が両方に適用される
const grid = () => [css`display: grid;grid-template-columns: 1fr 1fr 1fr;gap:1px 20px;`];
flexBoxのプロパティと同様に横方向の配置の調整ができる
const grid = () => [css`display: grid;grid-template-columns: repeat( 3, 100px ) ;gap:1px 20px;justify-content:center;`];
flexBoxのプロパティと同様に縦方向の配置の調整ができる。
※align-itemsを設定する場合は高さの設定も同時にする必要がある
const grid = () => [css`display: grid;grid-template-columns: repeat( 3, 100px ) ;;gap:1px 20px;justify-content:center;align-items:center;height:50vh;`];
gridの要素を結合することができる
const grid = () => [css`display: grid;grid-template-columns: repeat( 3, minmax(100px,200px) ) ;`];const gridItem = (i) => {if(i === 0){return [css`border:1px solid black;text-align:center;grid-row-start:2;grid-row-end:4;grid-column-start:1;grid-column-end:3;`];}else{return [css`border:1px solid black;text-align:center;`];}}
grid-row,grid-columnで一括指定することも可能
const gridItem = (i) => {if(i === 0){return [css`border:1px solid black;text-align:center;grid-row:2/4;grid-column:1/3;`];}else{return [css`border:1px solid black;text-align:center;`];}}
gridの基礎
グリッドアイテムの自動折り返し(auto-fill,auto-fit)
CSS Gridで要素を中央に表示する方法
サクッとグリッドCSSを理解して、クライアントワークに使う
【CSS】grid-auto-rows -columnsの使い方、暗黙のトラックのサイズを指定!
【CSS Grid Layout】列数とアイテムの大きさを指定する「grid-template-columns」の使い方