lism.config.js で設定する
lism.config.js で Lism CSS の Props・トークン・Trait・ブレイクポイントを足したり変えたりする方法と、セットアップの手順をまとめます。
lism.config.js は、Lism CSS の設定を書いておくファイルです。新しいクラスの値を足したり、トークン(決まった値)を増やしたり、xs・xl のブレイクポイントを使えるようにしたりできます。ほかの方法との選び方は カスタマイズの選び方 にまとめています。
使う前に知っておくこと#
lism.config.jsを読むのは@lism-css/pluginというパッケージです。これが無いと、ファイルを置いても何も起きません- ファイルは、プロジェクトのいちばん上のフォルダ(ルート)に置きます。
lism.config.ts・lism.config.mjsという名前でもかまいません - 統合プラグイン
lismCss()は Vite・Astro 用です。Next.js 用にはwithLism()があります。どちらも使わない構成なら、CLI(コマンドで動かす道具)で CSS だけを作ります
セットアップ#
1. パッケージを入れる#
pnpm add -D @lism-css/plugin
2. 統合プラグインを足す#
Astro なら astro.config.mjs、Vite なら vite.config.js に、lismCss() を足します。
import { defineConfig } from 'astro/config';
import { lismCss } from '@lism-css/plugin/astro';
export default defineConfig({
integrations: [lismCss()],
});
import { defineConfig } from 'vite';
import { lismCss } from '@lism-css/plugin/vite';
export default defineConfig({
plugins: [lismCss()],
});
これだけで、次の3つがまとめて動きます。
lism.config.jsを読み込む- 設定を CSS に自動で反映する
- 型定義のファイル
lism-env.d.tsを自動で作る
lism.config.js を読み込むのは、このプラグインです。設定ファイルにプラグインを足していないと、lism.config.js を置いても無視されます。
Next.js の場合は、統合プラグインの代わりに @lism-css/plugin/next の withLism() を使います。手順は 読み込み方(インストール) を見てください。
3. 設定ファイルの場所#
プラグインは、ルートから lism.config.ts → lism.config.mjs → lism.config.js の順に探します。別の場所に置くときは、configPath で場所を教えます。
integrations: [lismCss({ configPath: './config/lism.config.js' })],
設定ファイルの書き方#
書ける項目#
| 項目 | 何を決めるか |
|---|---|
props |
Property Class(-p:20 のようなクラス)と、コンポーネントの Props |
tokens |
トークン(色・余白・文字の大きさなどの決まった値) |
traits |
Trait Class(is--*・has--*)と、その Props |
breakpoints |
ブレイクポイントの幅(xs・xl を使えるようにする) |
isFullMode |
コンポーネントの出力を full.css に合わせるか |
export default {
props: {
// Property Class の設定
},
tokens: {
// トークンの値
},
traits: {
isHoge: 'is--hoge',
},
// breakpoints と isFullMode もここに書く
};
props に書ける設定#
props には、1つの Property Class ごとに、次のような設定を書きます。今の設定は lism-css/default-config から読み込めます。最初から入っているトークンの値は デザイントークン・文字のトークン・色のトークン に、Trait の一覧(isContainer → is--container など11個)は Trait Class ってなに? にあります。
| 設定 | 意味 |
|---|---|
prop |
出力する CSS のプロパティ(例:'filter'・'fontSize') |
presets |
そのまま値になるクラスの一覧(-ta:center の center など) |
utils |
短い名前と実際の値の組({ box: '2em' } なら -p:box が 2em) |
token |
使うトークンの種類(space・color など) |
tokenClass: 1 |
トークンの値を、全部クラスにする |
bp: 1 |
ブレイクポイントのクラス(-p_sm など)も作る。省くと 0 |
isVar: 1 |
クラスは作らず、CSS 変数だけを出す(--bdw・--keycolor など) |
alwaysVar: 1 |
値をいつも CSS 変数(--p など)を通して入れる |
shorthands |
コンポーネントで短く書くための別名 |
exUtility |
特別な書き方をするクラス |
important: 1 |
最後に !important を付ける |
例:値やクラスを足す#
import DEFAULT_CONFIG from 'lism-css/default-config';
const { props } = DEFAULT_CONFIG;
export default {
props: {
// 今ある ta に justify を足す
ta: { presets: [...(props.ta.presets || []), 'justify'] },
// 今ある p に box(2em)を足す
p: { utils: { box: '2em' } },
// 新しく filter を作る(最初からは入っていない)
filter: { prop: 'filter', utils: { blur: 'blur(3px)' } },
},
tokens: {
// 今のトークンに足される(--lts--2xl と -lts:2xl ができる)
lts: { '2xl': '.5em' },
},
traits: {
isHoge: 'is--hoge',
},
};
この設定で、コンポーネントは次のクラスを出すようになります。
| Props | 出るクラス |
|---|---|
ta="justify" |
-ta:justify |
p="box" |
-p:box |
filter="blur" |
-filter:blur |
lts="2xl" |
-lts:2xl |
isHoge |
is--hoge |
<Box p="box" ta="justify" filter="blur" lts="2xl" isHoge>Box</Box>
// → <div class="l--box is--hoge -p:box -ta:justify -filter:blur -lts:2xl">Box</div>
クラスの CSS と型は、統合プラグインがあれば自動で用意されます。
トークンを足す#
tokens は { 名前: 値 } の形で書きます。今のトークンに足し合わされます。トークンに値を書くと、そのクラスと、:root の CSS 変数の両方ができます。
- 値に
'-'を書くと、名前だけを登録して、値は出しません(palette.keycolorやbdrs.innerのように、値をほかで決めているもの) varsの中の--L・--C・--fz-mol・--hl-unit・--s-unitは、ほかのトークンの計算に使う値です。今ある値を書きかえるために使います
export default {
tokens: {
color: {
// --success ができて、c="success" などで使える
success: 'oklch(0.6 0.15 150)',
},
},
};
ブレイクポイント(xs・xl)を使えるようにする#
main.css のブレイクポイントは、最初は次のとおりです。0 は「使わない(CSS を出さない)」という意味です。
| 名前 | 幅 |
|---|---|
xs |
0(使わない) |
sm |
480px |
md |
800px |
lg |
1120px |
xl |
0(使わない) |
xs・xl を使うには、breakpoints に、使いたいものの幅だけを書きます。
export default {
breakpoints: {
xs: '360px',
xl: '1400px',
},
};
これで、ブレイクポイントに対応する(bp: 1 の)すべての Property Class に、-p_xs・-p_xl のようなクラスが増えます。コンポーネントでも xs・xl を書けるようになります。
<Box p={{ base: 20, xs: 10, sm: 30 }} />
full.css では、xs が 360px で使える状態、xl は使わない状態です。isFullMode: true で作る main.css も同じです。breakpoints を書けば、そちらが優先されます。コンポーネントで xs を使うなら、breakpoints を書くか、isFullMode: true にして統合プラグインに型を作らせます。
ブレイクポイントを増やすと、その分だけ CSS が大きくなります。CSS Purge と一緒に使う前提のしくみです。CSS Purge を使わないなら、bp: ['sm', 'md'] のように、Props ごとにブレイクポイントを絞ることを考えてください。
SCSS で組み立てる構成では、$breakpoints でも同じことができます(SCSS で設定する)。
isFullMode#
full.css(全部入りの CSS)を読み込んでも、それだけではコンポーネントが出すクラスは変わりません。たとえば t="20" は、style 属性で出たままです。コンポーネントの出力も full.css に合わせたいときに、isFullMode を true にします。
export default {
isFullMode: true,
};
true にすると、次のように変わります。
t="20"のような値が、-tクラスと--t変数で出るようになりますta={['start', 'center']}のようなブレイクポイントの指定が、full.cssに対応するクラスがあれば警告なしで使えます- 変数だけを出す Props(
isVarのもの)は、bds・bdcを除いて、ブレイクポイントに対応しません。contentSizeなどのisVarのもの、lh、border をまとめて書く Props は、trueにしてもブレイクポイントを書くと警告が出ます - 設定は「最初の設定 → full 用の設定 →
lism.config.jsのprops」の順に重ねられ、後ろのものが勝ちます
isFullMode が使えるのは、読み込んでいる CSS が full.css か、isFullMode を true にして CLI で作り直した main.css のときだけです。ふつうの main.css のまま true にすると、出たクラスの CSS がありません。また、ビルドのときの設定なので、ブラウザで動かす window._LISM_CSS_CONFIG_ では切り替えられません。
型(TypeScript)#
型には2種類あります。
| 型 | 使う場面 |
|---|---|
LismConfig |
設定ファイルを書くとき |
lism-env.d.ts |
コンポーネントを使うとき |
設定ファイルの型(LismConfig)#
lism-css/config-types から LismConfig を読み込むと、エディタが項目の名前や形を補ってくれたり、まちがいを教えてくれたりします。props を porps と打ちまちがえても、すぐ分かります。
lism.config.ts では、satisfies LismConfig を付けるのがおすすめです。
import type { LismConfig } from 'lism-css/config-types';
export default {
props: {
filter: { prop: 'filter', utils: { blur: 'blur(3px)' } },
},
breakpoints: {
xs: '360px',
},
} satisfies LismConfig;
JavaScript の lism.config.js では、JSDoc の @type を付けます。
/** @type {import('lism-css/config-types').LismConfig} */
export default {
props: {
filter: { prop: 'filter', utils: { blur: 'blur(3px)' } },
},
};
コンポーネントの型(lism-env.d.ts)#
設定の中身から、統合プラグインが lism-env.d.ts を自動で作ります。自分で型を書く必要はありません。このファイルは git にコミットします。
- 足した Props や Trait は、
CustomPropRegistry・CustomTraitRegistryを広げる形で型に入ります。<Box filter="blur" isHoge>も型のエラーになりません breakpointsで使えるようにしたxs・xlも、型と補完に入りますisFullMode: trueのときは、taなどのブレイクポイントの書き方も型のエラーになりません- 今ある Props に足した値(
ta="justify"など)は、CustomPropValueRegistryに入り、補完の候補に増えます。もともと今ある Props はどんな文字でも受け取るので、値を足さなくても型のエラーにはなりません
統合プラグインを使わない構成で、isFullMode の型だけを切り替えるときは、型定義のファイルに次のように書きます。キーの名前は何でもよく、1つあれば full 用の型になります。
// src/lism-env.d.ts
import 'lism-css';
declare module 'lism-css' {
interface FullModeRegistry {
enabled: true;
}
}
統合プラグインを使わないとき#
統合プラグインが無いと、lism.config.js は自動では使われません。CSS は CLI で作ります。
コンポーネントも lism.config.js を読まないので、p="box" と書いてもクラスになりません。コンポーネントからは : を付けて p=":box" と書きます(Lism Props(コンポーネントの指定))。ブラウザで描くコンポーネントなら、window._LISM_CSS_CONFIG_ に同じ設定を入れて使うこともできます(isFullMode はできません)。
CLI で CSS を作る#
npx lism-css build
lism.config.js を読み込んで、設定を入れた CSS を作ります。上の「例:値やクラスを足す」の設定なら、lism-css/main.css に次の CSS が足されます。
.-ta\:justify {
text-align: justify;
}
.-p\:box {
--p: 2em;
}
.-filter\:blur {
filter: blur(3px);
}
.-lts\:2xl {
letter-spacing: var(--lts--2xl);
}
-p:box が padding ではなく --p になっているのは、p が alwaysVar の Props だからです。padding: var(--p) のほうは、main.css に最初から入っています。
is-- のクラスの見た目は自動では作られません。自分で CSS を書いて読み込みます。
@layer lism-trait {
.is--hoge {
/* ... */
}
}
このコマンドはパッケージの CSS を作り直すので、パッケージを更新するたびに実行が必要です。また、full.css・full_no_layer.css は、そのままでは作り直されません。full.css を使っているなら --full を付けます。isFullMode が true なら、main.css にも full 用の設定が入ります。
npx lism-css build --full
関連するページ#
公式ドキュメント
2026年10月5日時点の内容(lism-css 1.0.1・@lism-css/ui 0.40.1)をもとに、やさしい日本語でまとめています。