l--grid(Grid で並べる)
l--grid は、中の要素を Grid(縦と横のマス目)で並べるクラスです。列や行の形は -gtc・-gtr・-gta で決めます。
l--grid は、中の要素を Grid(グリッド。縦と横のマス目)で並べるためのクラスです。列の幅や、どの要素をどのマスに置くかを自由に決められます。
どんなときに使う?#
- 「左右は中身に合わせた幅、真ん中は残り全部」のように、列ごとに幅を変えたいとき
- 幅によって、要素の置き場所を入れかえたいとき
- 要素どうしを同じマスに重ねたいとき
同じ幅の列に分けるだけなら l--columns、列の数を自動で決めたいなら l--autoColumns のほうが短く書けます。
使い方#
l--grid を付けた箱の中に要素を入れ、列の形を -gtc で指定します。-gtc は grid-template-columns(列の並び方)の略です。値は style="--gtc: …" で渡します。
表示例
<div class="l--grid -gtc -g:15" style="--gtc: auto 1fr auto">
<div class="l--center -p:20 -bgc:base-2">左</div>
<div class="l--center -p:20 -bd">まんなか</div>
<div class="l--center -p:20 -bgc:base-2">右</div>
</div>
auto は「中身に合わせた幅」、1fr は「残った幅を分けたぶん」という意味です。この例では、左右が文字の幅だけになり、まんなかが残りを全部使います。
一緒に使うクラス#
l--grid 自身が決めるのは「Grid で並べる」ことだけです。列や行の形は、次のクラスで足します。
| クラス | 元の CSS | 決めること |
|---|---|---|
-gtc |
grid-template-columns | 列の数と幅 |
-gtr |
grid-template-rows | 行の数と高さ |
-gta |
grid-template-areas | マスに名前を付けた配置図 |
-ga |
grid-area | 子要素をどの名前のマスに置くか |
-gc |
grid-column | 子要素が横に何マス使うか |
-gr |
grid-row | 子要素が縦に何マス使うか |
-g |
gap | マスとマスのすきま |
-gtc:subgrid・-gtr:subgrid・-ga:1/1・-gc:1/-1・-gr:1/-1 のように、よく使う値はクラス名だけで書けます。そのほかの値は style で変数に入れます。くわしくは 並べ方(Flex・Grid・配置) にあります。
幅で配置を入れかえる#
-gta と -gtc に _sm を付けると、幅が広いときだけ別の値に切り替えられます。下の例は、せまいときは「まんなか」が上の段いっぱいに広がり、広いときは3列に並びます。
表示例
<div class="l--grid -gta -gta_sm -gtc -gtc_sm -g:15" style="--gta: 'main main' 'left right'; --gta_sm: 'left main right'; --gtc: 1fr 1fr; --gtc_sm: 6em 1fr 6em">
<div class="l--box -p:15 -bgc:base-2 -ga" style="--ga: left">左</div>
<div class="l--box -p:15 -bd -ga" style="--ga: main">まんなか</div>
<div class="l--box -p:15 -bgc:base-2 -ga" style="--ga: right">右</div>
</div>
-gta には、マスの名前を行ごとに '…' で囲んで並べます。子要素には -ga で、自分が入るマスの名前を渡します。切り替えのしくみは 画面の幅で切り替える(レスポンシブ) で説明しています。
_sm・_md などは、画面の幅ではなく、先祖(外側)にある is--container(コンテナ)の幅で切り替わります。先祖に is--container が無いと切り替わりません。くわしくは is--container(幅の基準になる箱) と 画面の幅で切り替える(レスポンシブ) にあります。
要素を重ねる#
2つの子要素に同じ -ga:1/1(1行目・1列目のマス)を付けると、同じ場所に重なります。position: absolute を使わずに重ねられるのが利点です。上に出したいほうには -z:1 を付けます。
表示例
<div class="l--grid -ar:16/9">
<div class="l--frame -ga:1/1 -w:100% -h:100%">
<img src="/img/sample-landscape.svg" alt="">
</div>
<div class="l--center -ga:1/1 -fz:2xl -z:1">重ねた文字</div>
</div>
subgrid で列をそろえる#
subgrid(サブグリッド)は、子の Grid が親の Grid の列の線をそのまま使うしくみです。ニュースの一覧のように、行ごとに分かれた箱の中でも、日付や題の位置を縦にそろえられます。
子の箱に -gtc:subgrid と -gc:1/-1(最初の列から最後の列まで使う)を付けます。
表示例
<div class="l--grid -gtc -bd-b" style="--gtc: auto 1fr">
<div class="l--grid -gtc:subgrid -gc:1/-1 -g:20 -ai:center -bd-t -py:20 -px:10">
<div class="-fz:s">2024.05.31</div>
<div>短い題</div>
</div>
<div class="l--grid -gtc:subgrid -gc:1/-1 -g:20 -ai:center -bd-t -py:20 -px:10">
<div class="-fz:s">2024.05.29</div>
<div>少し長めの題が入っても、左の日付の列はそろいます</div>
</div>
</div>
l--grid のしくみ#
l--grid が付ける CSS は次のとおりです。子要素に min-width: 0 を付けて、長い中身でマスが押し広げられないようにしています。
.l--grid {
display: grid;
> * {
min-width: 0;
}
}
React・Astro で書く場合#
コンポーネントでは <Grid> を使います。gtc・gta・ga などはそのまま Props で渡せます。配列にすると、幅ごとの値になります。
import { Grid, Box } from 'lism-css/react';
<Grid g="15" gtc={['1fr 1fr', '8em 1fr 8em']} gta={[`'main main' 'left right'`, `'left main right'`]}>
<Box ga="left">Left</Box>
<Box ga="main">Center</Box>
<Box ga="right">Right</Box>
</Grid>
Astro では lism-css/astro から読み込みます。書き方は Lism コンポーネント(React・Astro) にまとめています。
関連するページ#
- l--columns(同じ幅の列に分ける):列の数だけ決めて並べる
- l--tileGrid(タイル状に並べる):列と行の数を決めてマス目にする
- 並べ方(Flex・Grid・配置):
-gtcなどのクラスの一覧
公式ドキュメント
2026年10月5日時点の内容(lism-css 1.0.1・@lism-css/ui 0.40.1)をもとに、やさしい日本語でまとめています。