Lism Tips

画面の幅で切り替える(レスポンシブ)

Lism CSS で、箱の幅に合わせて余白や表示を切り替える書き方です。ブレイクポイントの値、-{prop}_{bp} クラス、コンテナクエリの注意点をまとめます。

レスポンシブとは、見る画面の幅に合わせてレイアウトを変えることです。Lism では、-p_sm のような幅用のクラスと、--p_sm のような幅用の変数を組み合わせて書きます。

どんなときに使う?#

  • スマートフォンでは余白を小さく、広い画面では大きくしたいとき
  • 狭いときは隠して、広いときだけ表示したいとき
  • 列の数や並ぶ向きを、幅によって変えたいとき

使い方#

ふつうの値のクラス(-p:10)に、幅用のクラス(-p_sm)を足します。広いときの値は style 属性の --p_sm に入れます。

表示例

スマートフォンでは余白が小さく、広い画面では余白が大きくなります。
html
<div class="is--container">
  <div class="-p:10 -p_sm -bd -bgc:base-2" style="--p_sm: var(--s40)">
    スマートフォンでは余白が小さく、広い画面では余白が大きくなります。
  </div>
</div>

-p_sm は、広いときに --p を --p_sm の値で置きかえます。--p_sm を書かないと値が入らず、広いときに余白が無くなってしまいます。_sm のクラスには、必ず同じ名前の変数を一緒に書きます。

幅を2段階以上で変えるときは、クラスと変数をそれぞれ足します。

html
<div class="-p:20 -p_sm -p_md -bd" style="--p_sm: var(--s40); --p_md: var(--s50)">
  <p>Example</p>
</div>

ブレイクポイント#

幅の区切り(ブレイクポイント)として、Lism は次の3つを持っています。

名前 効き始める幅 クラスの例
sm 480px 以上 -p_sm
md 800px 以上 -p_md
lg 1120px 以上 -p_lg
  • モバイルファースト(狭い画面の形を先に書き、広くなったら上書きする考え方)です。何も付けない値が、いちばん狭いときの値です
  • sm は「スマートフォン用」ではありません。「480px 以上なら効く」という意味です
  • 数字は、特定の機種の画面の大きさに合わせたものではありません

たとえば、ふだんは隠して、sm 以上で表示するときは次のように書きます。

表示例

広い表示例でだけ見えます

この行はいつも見えます

html
<div class="is--container">
  <p class="-d:none -d_sm -p:10 -bd" style="--d_sm: block">広い表示例でだけ見えます</p>
  <p class="-p:10 -bgc:base-2">この行はいつも見えます</p>
</div>

xs と xl#

xs と xl という名前も用意されていますが、最初は幅が 0(使わない)になっていて、CSS が出力されません。使うには lism.config.js で設定する で幅を決めます。

コンテナクエリを使う#

Lism の幅の切り替えは、最初はコンテナクエリで動きます。コンテナクエリは、画面の幅ではなく、外側の箱(コンテナ)の幅で切り替える CSS のしくみです。

注意

コンテナクエリで切り替えるには、外側のどこかにコンテナになる要素が要ります。コンテナが無いと、_sm などのクラスは働きません。

コンテナを作るには、外側の要素に is--container(幅の基準になる箱) を付けるのが手軽です。is--container は container-type: inline-size を付けるクラスです。

html
<div class="is--container">
  <div class="-p:10 -p_sm -bd" style="--p_sm: var(--s30)">中身</div>
</div>

画面の幅で切り替えるメディアクエリにしたいときは、SCSS で設定を変えます(SCSS で設定する)。

補足

このサイトの表示例は、枠そのものが is--container です。そのため表示例の _sm は、ページの幅ではなく表示例の枠の幅(PC で約 650px、スマートフォンで約 300px)で切り替わります。

切り替えられるプロパティ#

すべてのプロパティを幅で切り替えられるわけではありません。

注意

最初から幅で切り替えられるのは、一部のプロパティだけです。各ページの表の BP の列が ✔ のものだけが、sm・md・lg のクラスを持ちます。

CSS の作りの違い#

幅用のクラスの CSS には、2つの作りがあります。

css
/* ふつう:幅ごとに値を直接上書き */
.-d { display: var(--d) }
@container (min-width: 480px) {
  .-d_sm { display: var(--d_sm) }
}

/* alwaysVar:--p 変数を書きかえる */
.-p { padding: var(--p) }
@container (min-width: 480px) {
  .-p_sm { padding: var(--p); --p: var(--p_sm) !important }
}

2つめの形では、いまの値がいつも --p で読めます。最初からこの形なのは c・bgc・lh・p・m・bdrs の6つです。

React・Astro で書く場合#

コンポーネントでは、幅ごとの値を配列かオブジェクトで渡します。

jsx
<Lism p={[20, 40, 50]} />                  // 配列
<Lism p={{ base: 20, sm: 40, md: 50 }} />  // オブジェクト

配列の何番めがどの幅かは、決まっています。

位置 0 1 2 3 4
幅 base sm md lg xl

途中の幅を飛ばすときは null を入れます。

jsx
<Lism p={[20, null, 50]} />  // base と md だけ
注意

xs は配列では書けません。配列の位置が決まっているので、先頭に xs を足すと、ほかの値がずれても気づけないためです。xs を使うときはオブジェクトで書きます。

jsx
<Lism m={{ base: 10, xs: 20, sm: 40 }} />

TypeScript の入力補完#

TypeScript の型と入力補完が最初に出すのは、base・sm・md・lg の4つです(配列も4つまで)。xl・xs は CSS が出ないので、型にも出ません。

  • @lism-css/plugin/vite・@lism-css/plugin/astro の lismCss() や、@lism-css/plugin/next の withLism() を使っている場合:lism.config.js の breakpoints に幅を書けば、lism-env.d.ts が自動で作られ、補完にも出ます
  • プラグインを使わない場合:自分の型定義ファイルで BreakpointRegistry を広げます
ts
import 'lism-css';

declare module 'lism-css' {
  interface BreakpointRegistry {
    xl: true; // 配列の5つめと { xl: ... } を使えるようにする
    xs: true; // { xs: ... } を使えるようにする
  }
}
補足

型を広げても、補完に出るようになるだけです。CSS を出すには、別に lism.config.js の breakpoints で幅を決めます。

自分の SCSS で同じ幅を使う#

自分で書く .scss でも、Lism のブレイクポイントを使えます。

scss
@use '../path/to/node_modules/lism-css/src/scss/query' as query;

@include query.bp-up('sm') {
  // 480px 以上のときのスタイル
}
@include query.bp-up('md') {
  // 800px 以上のときのスタイル
}

関連するページ#

公式ドキュメント

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

ページの一覧