検索

Lism Props

<Lism>系コンポーネントで受け取れる、Lism CSS 専用プロパティをLism Propsと呼んでいます。

as

出力するHTMLタグや外部コンポーネントを指定できます。デフォルトはdivです。

HTMLタグの指定例
<Lism as="p">Lorem ipsum texts...</Lism>
<p>Lorem ipsum texts...</p>

外部コンポーネントを指定すると、<Lism>を最終的に別の外部コンポーネントとして展開することができます。

例、Lismの<Media>コンポーネントをNext.jsの<Image>で展開する
import Image from 'next/image';
<Media as={Image} src="..." p="20" bd />

先に Lism Props(上記の例だとp,bd) を解析して className, style を生成してから、asで指定したコンポーネントに渡します。 Lismコンポーネント以外に対しても Lism Props を使いたい時に活用してください。

className

コンポーネントに任意のクラス名を付与するための標準の prop です。c--基底クラス(Component Class)や外部スタイルのクラスなどは、この prop から指定します。

以前は lismClass / variant という専用スロットがありましたが、className に一本化しました。BEM 展開は @lism-css/uibuildModifierClass ヘルパーを使って UI コンポーネント側で組み立てる形に変わっています。

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

set / util

setSet Classset--{value})、
utilUtility Classu--{value})を指定するための prop です。

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

複数指定

どちらもスペース区切りで複数指定できます。

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

- prefix で除外

値の先頭に - を付けると、その識別子を除外できます。コンポーネント内部で適用済みのクラスを除外したい場合などに利用できます。

{/* Buttonに初期セットされている set="plain"(set--plain) を除外 */}
<MyButton set="-plain">...</MyButton>
{/* u--trim を除外して u--cbox を追加 */}
<MyCallout util="-trim cbox">...</MyCallout>

layout / atomic

layoutatomic はそれぞれ Layout Primitive クラス(l--*)と Atomic Primitive クラス(a--*)を指定するための prop です。

レイアウトプリミティブを指定できます。例えばlayout='flow'とすると、l--flowクラスが出力されます。

<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 に応じた専用処理が追加されることもあります。

  • 例1: layout="withSide"の場合はsideW / mainW を受け取れる
  • 例2: atomic="spacer" 時は w / h でスペーストークンを受け付ける

Trait Props

Trait Class (is--* / has--*) に対応する Props です。

| Prop | 出力クラス | 用途 | |---|---|---| | isWrapper(='{s\|m\|l\|xl}') | is--wrapper + -contentSize:{s\|m\|l\|xl} | コンテンツ幅制限 | | 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 変数でセット | | hasGutter | has--gutter | 左右に統一ガター(--gutter / --gutter--base)を確保 | | hasSnap | has--snap | scroll-snap-* プロパティを CSS 変数でセット | | hasMask | has--mask | mask プロパティを CSS 変数でセット |

Trait Class についての解説は以下を参照してください。

CSS Props

Property Class (-{prop}:{value}) に対応する Props です。

{prop}部分と同じ短縮されたCSSプロパティ名を使って指定できます。
(例: font-sizefzpaddingp で指定できます。)

prop={value} で指定した値に応じて、出力形式が以下のように決まります。

| 値 | 出力形式 | 例 | |------|------|-----| | トークン値・プリセット値 | -{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 ClassBP 欄を参照してください。
  • 変数専用プロパティ: bds, bdc, bdw, keycolor など、常に CSS 変数(--{prop})のみで出力されるプロパティです。
  • 対応トークンがあるがクラスとして登録されていない場合は、CSS 変数で出力されます。(例: c='red'class="-c" + style="--c:var(--red)"

コード例

トークン値 → クラスのみ
<Lism fz="l" p="20">...</Lism>
// → <div class="-fz:l -p:20">...</div>
カラートークン(クラス未登録)→ クラス + CSS変数
<Lism c="red">...</Lism>
// → <div class="-c" style="--c:var(--red)">...</div>
true → クラスのみ(変数なし)
<Lism p bdrs>contents</Lism>
// → <div class="-p -bdrs">contents</div>

CSS側で変数の中身を記述したい場合や、親と同じ変数を継承したい場合などに活用できます。

変数専用プロパティ → CSS変数のみ
<Lism bd bdc="#000" bdw="2px">...</Lism>
// → <div class="-bd" style="--bdc:#000;--bdw:2px">...</div>
BP対応プロパティにカスタム値 → クラス + CSS変数
<Lism fz="20px">contents</Lism>
// → <div class="-fz" style="--fz:20px">contents</div>
BP非対応プロパティにカスタム値 → style属性に直接出力
<Lism o="0.75">contents</Lism>
// → <div style="opacity:0.75">contents</div>

: でクラスとして強制的に出力

対応する Property Class がない場合でも、: から始めることでその後ろの文字列がクラス名として出力されます。

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

任意のクラスをCSSへ追加し、ご利用ください。

.-p\:hoge {
/* ... your styles ... */
}

className='-p:hoge' としてももちろん大丈夫ですが、:を使ってCSS Propとして渡すことで出力順序が統一されます。

: 単体を指定した場合

: の後ろに文字列を続けず、: だけを指定した場合は true を指定したときと同じく -{prop} クラスのみが出力されます。

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

bd のようにそのまま値を渡せる(true で有効化できる)プロパティに対して、テキスト入力など boolean を渡せない経路から true 相当を指定したい場合に便利です。

レスポンシブ指定

BP対応プロパティは、配列またはオブジェクトでブレイクポイント(sm, md)ごとの値を指定できます。

例1: 配列で指定(base → sm → md の順)
<Lism p={['20', '30', '5rem']}>...</Lism>
例2: 途中のBPをスキップ(@md のみ指定)
<Lism p={[null, null, '40']}>...</Lism>

実際に値が切り替わるかどうかは、そのプロパティがレスポンシブ対応している必要があります。 どのプロパティが対応しているかはProperty ClassBPブレイクポイントの略)の欄をチェックしてください。

デフォルトでレスポンシブ対応されていない(CSSが用意されていない)プロパティに関しては、SCSSによるカスタマイズを行うことで対応できます。

exProps

Lism Props としての処理をスキップしたいプロパティをオブジェクトで指定できます。

asで指定した外部コンポーネントが受け取れるプロパティと Lism Props の名前が被っている場合など、外部コンポーネント用のプロパティであることを明示的にしたい時に便利です。

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

上記のようにすることで、LismのIconコンポーネントでp, fz を受け取って処理し、Hogeという外部コンポーネント側で確実にsizeを受け取ることができます。
(現状、Lism 側では size は処理されないためこの例ではexPropsは不要ですが、外部コンポーネント用のプロパティを明示的に指定しておくと、将来的にも影響がでる心配がなくなります。)

クラスの出力順

<Lism> が生成する class 属性は、以下のような順序で出力されます。

[className(c-- 含む)] [a--] [l--] [set--] [is-- / has--] [u--] [-]

| # | Prop | 例 | |---|---|---| | 1 | 独自クラス(className / class) | c--box, z--header, hoge | | 2 | atomic | a--icon, a--divider | | 3 | layout | l--flex, l--columns | | 4 | set | set--hov | | 5 | isXxxx / hasXxxx(Trait) | is--wrapper, is--layer, has--transition | | 6 | util | u--cbox, u--trim | | 7 | prop={value} | -p:20, -bgc:base-2, -hov:-c |

layout="flow"-flow:{size} はレイアウトプリミティブ固有の設定クラスとして扱われるため、l--flow 直後のプリミティブ群に並びます。

c--* クラスは className で自由な位置に書けますが、可読性のため先頭に書くことを推奨します。

class 属性内の並び順は CSS の適用結果(詳細度・カスケード順)には影響しません。この順序はあくまで可読性と一貫性のための整理です。

© Lism CSS. All rights reserved.