Lism Tips

Lism Props(コンポーネントの指定)

Lism Props は、<Lism> などのコンポーネントに渡す Lism 専用の値です。as・className・layout・Trait・CSS の Props と、クラスになる決まりをまとめます。

Lism Props は、<Lism> やそれをもとにしたコンポーネント(<Box>・<Stack> など)に渡せる、Lism 専用の Props(コンポーネントに渡す値)です。p="20" と書くと -p:20 のクラスが付く、というように、Props がクラスや CSS 変数に変わります。コンポーネントの使い方そのものは Lism コンポーネント(React・Astro) にあります。

一覧#

Props 何になるか
as 出すタグ・使うコンポーネント
className 自分で書くクラス
set set--* のクラス
util u--* のクラス
layout l--* のクラス
atomic a--* のクラス
isWrapper など is--*・has--* のクラス(Trait Props)
p・fz など -p:20 のような Property Class(CSS Props)
exProps Lism Props として扱わない値

as(出すタグ)#

as で、出す HTML のタグを決めます。何も書かなければ div です。

jsx
<Lism as="p">Lorem ipsum texts...</Lism>
// → <p>Lorem ipsum texts...</p>

as には、ほかのライブラリのコンポーネントも渡せます。先に Lism Props から className と style を作り、それを as のコンポーネントに渡します。Lism でないコンポーネントにも Lism Props を使いたいときに便利です。

jsx
import Image from 'next/image';

<Media as={Image} src="..." p="20" bd />

className(自分のクラス)#

好きなクラスを付ける、ふつうの Props です。b--*(Block Class)や c--*(Custom Class)、ほかの CSS のクラスはここに書きます。

jsx
<Lism p="10" className="c--myComponent">Lorem ipsum texts...</Lism>
// → <div class="c--myComponent -p:10">Lorem ipsum texts...</div>
補足

前は lismClass・variant という専用の Props がありましたが、今は className 1つにまとまりました。BEM の形のクラスは、UI コンポーネントの側で @lism-css/ui の buildModifierClass を使って作ります。

set・util#

set は Set Class(set--*)、util は Utility Class(u--*) を付けます。

jsx
<Lism set="bxsh" util="cbox">...</Lism>
// → <div class="set--bxsh u--cbox">...</div>

空白で区切ると、いくつも付けられます。

jsx
<Lism set="hov" hasTransition util="cbox trim">...</Lism>

値の頭に - を付けると、そのクラスを外せます。コンポーネントに最初から付いているクラスを外したいときに使います。

jsx
{/* 最初から付いている set--plain を外す */}
<MyButton set="-plain">...</MyButton>

{/* u--trim を外して u--cbox を足す */}
<MyCallout util="-trim cbox">...</MyCallout>

layout・atomic#

layout はレイアウトの l--*、atomic は小さな部品の a--* のクラスを付けます。

jsx
<Lism layout="flow">Lorem ipsum texts...</Lism>
<Lism atomic="divider" />
// → <div class="l--flow">Lorem ipsum texts...</div>
// → <div class="a--divider"></div>
補足

layout・atomic の値によって、受け取れる Props が増えることがあります。たとえば layout="withSide" なら sideW・mainW、atomic="spacer" なら w・h に余白のトークンを書けます。

Trait Props#

is--*・has--*(Trait Class)を付ける Props です。isLayer のように名前だけ書けば、そのクラスが付きます。

Props 出るクラス 何をするか
isWrapper is--wrapper 中身の幅をしぼる。's'・'m'・'l'・'xl' を渡すと -contentSize:{値} も付く
isLayer is--layer 上に重ねる層にする(inset:0 の絶対配置)
isBoxLink is--boxLink 箱ごとリンクにする
isCoverLink is--coverLink 親の箱いっぱいにクリックできる範囲を広げるリンク
isContainer is--container コンテナクエリの基準にする
isSide is--side 横に置く要素にする
isSkipFlow is--skipFlow Flow の余白をとばす
hasTransition has--transition transition を CSS 変数で付ける。文字を渡すと --transitionProps で変化させるプロパティを決められる
hasGutter has--gutter 左右に同じ余白(--gutter・--gutter--base)をとる
hasSnap has--snap scroll-snap-* を CSS 変数で付ける
hasMask has--mask mask を CSS 変数で付ける

CSS Props#

-{prop}:{value} の形のクラス(Property Class)を付ける Props です。名前は、クラスと同じ短い名前を使います(font-size なら fz、padding なら p)。

渡す値によって、出てくる形が変わります。

渡す値 出てくるもの 例
トークン・用意された値 -{prop}:{value} のクラス fz='l' → -fz:l
true -{prop} のクラスだけ bd → -bd
: で始まる値 むりやりクラスにする p=':hoge' → -p:hoge
ほかの値(BP 対応) -{prop} と --{prop} 変数 fz='20px' → -fz と --fz:20px
ほかの値(BP 非対応) style 属性にそのまま o='0.7' → opacity:0.7
ほかの値(変数だけのもの) --{prop} 変数だけ bdw='2px' → --bdw:2px
  • BP 対応:ブレイクポイント(画面の幅)で値を切りかえられるプロパティです。対応の有無は、Property Class の書き方 の表の BP の欄で確かめられます
  • 変数だけのもの:bds・bdc・bdw・keycolor のように、クラスを持たず CSS 変数だけで出るものです
  • トークンはあるのにクラスが無い値は、CSS 変数で出ます(c='red' → class="-c" と style="--c:var(--red)")
jsx
<Lism fz="l" p="20">...</Lism>
// → <div class="-fz:l -p:20">...</div>

<Lism c="red">...</Lism>
// → <div class="-c" style="--c:var(--red)">...</div>

<Lism p bdrs>contents</Lism>
// → <div class="-p -bdrs">contents</div>

<Lism bd bdc="#000" bdw="2px">...</Lism>
// → <div class="-bd" style="--bdc:#000;--bdw:2px">...</div>

<Lism fz="20px">contents</Lism>
// → <div class="-fz" style="--fz:20px">contents</div>

<Lism o="0.75">contents</Lism>
// → <div style="opacity:0.75">contents</div>

p のように true を渡してクラスだけ付ける書き方は、変数の中身を CSS で決めたいときや、親と同じ変数をそのまま使いたいときに役立ちます。

c="red" の出力を HTML で書くと、こう見えます。

表示例

赤い文字
html
<div class="-p:20 -bd -c -fz:l -fw:700" style="--c: var(--red)">赤い文字</div>

: でクラスにする#

用意されたクラスが無い値でも、頭に : を付けると、後ろの文字がそのままクラス名になります。

jsx
<Lism p=":hoge">...</Lism>
// → <div class="-p:hoge">...</div>

そのクラスの CSS は、自分で書き足します。

css
.-p\:hoge {
  /* ... your styles ... */
}
ヒント

className='-p:hoge' と書いてもかまいません。ただ、: を使って CSS Props として渡すと、クラスの並ぶ順番がそろいます。

: だけを渡すと、true を渡したときと同じく、-{prop} のクラスだけが付きます。入力欄などから true を渡せないときに便利です。

jsx
<Lism bd=":">...</Lism>
// → <div class="-bd">...</div>

色を透かす・まぜる#

c・bgc・bdc など色の Props では、値を : で区切ると、透明にしたり、2つの色をまぜたりできます。値は color-mix()(色をまぜる CSS の関数)になり、CSS 変数で出ます。

  • {color}:{alpha}%:色を {alpha}% の濃さにする(残りは透明)
  • {color1}:{color2}:{ratio}%:{color1} に {color2} を {ratio}% まぜる
jsx
<Lism bgc="black:50%">...</Lism>
// → <div class="-bgc" style="--bgc:color-mix(in srgb, var(--black) 50%, transparent)">...</div>

<Lism c="text:blue:5%">...</Lism>
// → <div class="-c" style="--c:color-mix(in srgb, var(--text), var(--blue) 5%)">...</div>
  • トークンに無い値は、そのまま color-mix() に入ります(bgc="currentColor:10%" → color-mix(in srgb, currentColor 10%, transparent))
  • この書き方は Lism Props だけのものです。HTML では、style 属性に color-mix() を直接書きます

表示例

黒を 50% にした背景
html
<div class="-p:20 -bgc -c:base -fz:l -fw:700" style="--bgc: color-mix(in srgb, var(--black) 50%, transparent)">黒を 50% にした背景</div>

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

BP 対応の Props は、配列かオブジェクトで、ブレイクポイント(sm・md・lg)ごとの値を書けます。配列は、左から「ふつう・sm・md」の順です。

jsx
<Lism p={['20', '30', '5rem']}>...</Lism>
// → <div class="-p:20 -p_sm -p_md" style="--p_sm:var(--s30);--p_md:5rem">...</div>

<Lism p={[null, null, '40']}>...</Lism>
// → <div class="-p_md" style="--p_md:var(--s40)">...</div>
注意

値が本当に切りかわるのは、そのプロパティがレスポンシブに対応しているときだけです。Property Class の書き方 の表で、BP の欄を見てください。対応していないものは、SCSS で設定する で対応させられます。

くわしくは 画面の幅で切り替える(レスポンシブ) にあります。

exProps#

ほかのライブラリの部品に、値を確実に届けたいときに使います。

as でほかの部品を使うと、その部品の Props と Lism Props が同じ名前になることがあります。そのままだと、Lism が先に受け取ってしまうかもしれません。exProps に入れた値は、Lism が読まずに、そのまま as の部品へ渡します。

jsx
<Icon as={Hoge} exProps={{ size: '1em' }} p="10" fz="l">
  ...
</Icon>

この例で、p と fz を使うのは Lism の Icon です。size は Hoge だけに届きます。

ヒント

今の Lism は size を受け取らないので、この例は exProps が無くても動きます。それでも、ほかの部品用の値だと書いておけば、Lism が新しい Props を足しても困りません。

クラスが並ぶ順番#

<Lism> が出す class は、次の順番に並びます。

text
[className(b-- / c-- 含む)] [a--] [l--] [set--] [is-- / has--] [u--] [-]
順 Props 例
1 className・class b--btn・c--box
2 atomic a--icon・a--divider
3 layout l--flex・l--columns
4 set set--hov
5 Trait(isXxxx・hasXxxx) is--wrapper・has--transition
6 util u--cbox・u--trim
7 CSS Props -p:20・-hov:-c
  • layout="flow" の -flow:{size} は、l--flow のすぐ後ろに並びます
  • b--*・c--* は className のどこに書いてもかまいませんが、読みやすいように先頭に書くのがおすすめです
  • この順番は読みやすくするためのものです。どのスタイルが勝つかには関係しません

関連するページ#

公式ドキュメント

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

ページの一覧