Lism Tips

l--switchColumns(横並びと縦並びを切り替える)

l--switchColumns は、箱の幅が足りるときは横1列に並べ、足りないときは全部を縦に積むクラスです。

l--switchColumns は、箱の幅が十分なら横に並べ、足りなくなったら全部を縦に積みかえるクラスです。メディアクエリやコンテナクエリ(画面や箱の幅で CSS を切り替えるしくみ)を書かずに、この切り替えができます。

どんなときに使う?#

  • 2〜3個の箱を、広いところでは横並び、せまいところでは縦並びにしたいとき
  • 「一部だけ折り返す」のではなく、「全部横」か「全部縦」のどちらかにしたいとき

列の数を自動で増やしたり減らしたりしたいなら l--autoColumns が向いています。

使い方#

並べたい要素を l--switchColumns の箱で囲みます。初期値では、箱の幅が 400px(--sz--xs)以上なら横並びになります。表示例は、PC では横、スマートフォンでは縦に並びます。

表示例

1
2
3
html
<div class="l--switchColumns -g:15">
  <div class="l--box -bgc:base-2 -p:20">1</div>
  <div class="l--box -bgc:base-2 -p:20">2</div>
  <div class="l--box -bgc:base-2 -p:20">3</div>
</div>

専用の変数#

変数 決めること 初期値
--breakSize 横並びにするのに要る箱の幅 var(--sz--xs)(400px)

基準は画面の幅ではなく、l--switchColumns を付けた箱そのものの幅です。値には、幅のトークン(--sz--xs・--sz--s など。デザイントークン)が使えます。

切り替わる幅を変える#

--breakSize に var(--sz--s)(640px)を入れると、箱が 640px 以上のときだけ横並びになります。表示例の枠は PC でも約 650px なので、ぎりぎり横に並びます。

表示例

1
2
3
html
<div class="l--switchColumns -g:15" style="--breakSize: var(--sz--s)">
  <div class="l--box -bgc:base-2 -p:20">1</div>
  <div class="l--box -bgc:base-2 -p:20">2</div>
  <div class="l--box -bgc:base-2 -p:20">3</div>
</div>

幅の比率を変える#

横並びのときの幅は、子要素の flex-grow(余った幅をどれだけもらうか)で変えられます。下のように片方を 2 にすると、およそ 1:2 になります。

html
<div class="l--switchColumns -g:20" style="--breakSize: var(--sz--s)">
  <div class="l--box -bgc:base-2 -p:20">Box</div>
  <div class="l--box -bgc:base-2 -p:20" style="flex-grow: 2">Box</div>
</div>

l--switchColumns のしくみ#

l--switchColumns が付ける CSS は次のとおりです。

scss
.l--switchColumns {
  --breakSize: var(--sz--xs); /* 横並びを維持する幅(親のサイズで指定する) */
  display: flex;
  flex-wrap: wrap;
}

.l--switchColumns > * {
  flex-grow: 1;
  flex-basis: calc((var(--breakSize) - 100%) * 9999);
}

子要素の flex-basis(もとの幅)は、「--breakSize − 箱の幅」に大きな数をかけた値です。箱が --breakSize より広いと、この値はマイナスになり、幅 0 から均等に広がって横に並びます。箱がせまいと、とても大きな値になり、1つずつ1行を使うので縦に積まれます。

React・Astro で書く場合#

コンポーネントでは <SwitchColumns> を使い、切り替わる幅は breakSize で渡します。"s" のように幅のトークンの名前で書けます。

jsx
import { SwitchColumns, Box } from 'lism-css/react';

<SwitchColumns breakSize="s" g="20">
  <Box>Box</Box>
  <Box>Box</Box>
</SwitchColumns>

Astro では lism-css/astro から読み込みます。書き方は Lism コンポーネント(React・Astro) にまとめています。

関連するページ#

公式ドキュメント

2026年10月5日時点の内容(lism-css 1.0.1・@lism-css/ui 0.40.1)をもとに、やさしい日本語でまとめています。

ページの一覧