Lism
LismのCSS設計に対応した様々なプロパティを受け取ることができるようになっている汎用的なコンポーネントです。
Lismで配布しているほぼ全てのコンポーネントは、この<Lism>
がベースなっています。
<Lism>
の出力例<Lism p='30' fw='bold' c='blue' bgc='base-2' bdrs='3'>Lism content</Lism>
<div>
タグを返します。<Lism>Lism content</Lism>
Import
Section titled “Import”import { Lism } from 'lism-css/react';
Lism Props
Section titled “Lism Props”<Lism>
をベースとした@lism/core
で提供する各コンポーネントで受け取れるプロパティをLism Propsと呼んでいます。
Lism Propsは、主に以下の3種類に分類されます。
種別 | 説明 |
---|---|
Common Props | 基本的な共通プロパティ |
State Props | Layout State に分類されるクラスを出力するためのプロパティ |
CSS Props | Prop Class に分類されるクラスを出力するためのプロパティ |
skipState
が指定されているコンポーネントでは、State Propsは受け取れません。
Common Props
Section titled “Common Props”Prop | 説明 |
---|---|
tag | 出力する HTMLタグを指定できます。デフォルトはdiv を返します。 |
lismClass | Lismコンポーネント名となる主要なクラス名。 |
variant | lismClassに対するバリエーションクラスを出力できます。lismClass に複数クラスが指定されている場合、先頭のクラスに対してバリエーションクラスを出力します。, 区切りで複数指定できます。 |
上記の他、少し複雑なものがいくつかあります。それらについては後述の補足で解説しています。
State Props
Section titled “State Props”Layout State クラスに対応するプロパティ群です。
Prop | 出力されるクラス |
---|---|
isFlow(='{s|l}') | .is--flow +(.-flow:{s|l}) |
isContainer(='{s|m|l}') | .is--container +(.-container:{s|m|l}) |
isFrame | .l--frame |
isLayer | .is--layer |
isLinkBox | .is--linkBox |
isWide ,isFullwide ,isOverwide | .is--wide ,.is--fullwide ,.is--overwide |
hasGutter | .has--gutter |
CSS Props
Section titled “CSS Props”主要なCSSプロパティに対して、それぞれ省略記法でコンポーネントに指定できるようになっています。
例えば、font-size
は fz
、padding
は p
で指定できます。
この時、Prop Class に対応する値が指定されれば、下記のようにLismで用意しているユーティリティクラスが出力されるようになっています。
<Lism fz='l' p='20'>contents</Lism>
// ↓ 出力されるHTML<div class="-fz:l -p:20">contents</div>
トークン値ではなく各プロパティの主要なキーワード値に対応したクラスをする場合、値を省略してもしなくても出力されます。
例:text-align:center
用の -ta:c
クラスや、position:relative
用の -pos:r
クラスは、以下のどちらの書き方でも出力されます。
<Lism ta="center" pos="relative">...</Lism><Lism ta="c" pos="r">...</Lism>
// ↓ どちらも次のような出力になります
<div class="-ta:c -pos:r">...</div>
対応するProp Classがない値を指定した場合
Section titled “対応するProp Classがない値を指定した場合”ユーティリティクラスに変換されない値を指定した場合、以下のいずれかで出力されます。
- 単純に
style
属性にインライン出力される。 -{prop}:
&--{prop}
の組み合わせで出力される。--{prop}
だけ出力されるもの(特殊)
<Lism op='0.75'>contents</Lism>↓<div style="opacity:0.75">contents</div>
<Lism fz='20px'>contents</Lism>// ↓ 出力<div class="-fz:" style="--fz:20px">contents</div>
ブレイクポイントでの切り替えに対応しているような主要なプロパティは、この-{prop}:
& --{prop}
で出力されます。
<Lism bd bdc="#000" bdw="2px">...</Lism>
// ↓ 出力<div class="bd:" style="--bdc:#000;--bdw:2px">...</div>
-bd:
や-trs:
と併用するようなプロパティがこれに当てはまります。
ユーティリティクラスとして強制的に出力する方法
Section titled “ユーティリティクラスとして強制的に出力する方法”対応するProp Classがない場合でも、u:
からはじめることでその後ろの文字列がユーティリティクラス名として出力されます。
<Lism p='u:hoge'>...</Lism>
↓
<div class="-p:hoge">...</div>
必要に応じて独自のクラス名を定義してCSSを追加しておくと、それを活用することができます。
.-p\;hoge{ /* ... your styles ... */}
className='-p:hoge'
としてももちろん大丈夫ですが、u:
を使ってCSS Propとして渡すことで、Moduleクラスよりも後ろでこのクラスが出力されるようになります。
変数なしで-{prop}:
クラスのみを出力する方法
Section titled “変数なしで-{prop}:クラスのみを出力する方法”CSS Props に対して"-"
またはtrue
を指定すると、変数なしで-{prop}:
クラスのみを出力します。
<Lism p='-' bdrs>contents</Lism>↓<div class="-p: -bdrs:">contents</div>
CSS側で変数の中身を記述したい場合や、親と同じ変数を継承したい場合などに活用できます。
<Lism>
コンポーネントを最終的に別の外部コンポーネントとして展開することができます。
<Media>
コンポーネントをNext.jsの<Image>
で展開するimport Image from 'next/image';
<Media as={Image} src='...' bxsh='2' bdrs='3' />
先に Lism Props を解析して class
, style
を生成してから、as
で指定したコンポーネントに渡します。
Lismコンポーネント以外に対しても Lism Props を使いたい時に活用してください。
exProps
Section titled “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
で指定しておくと将来的に影響がでる心配がなくなります。)
pass-get
Section titled “pass-get”pass-get
に関するプロパティとして、passVars
を用意しています。
passVars
:--pass-{prop}
を出力します。オブジェクト形式{prop:value}
で指定します。
skipState
Section titled “skipState”State Props用の処理をスキップできます。<Spacer>
や<Divider>
、<Text>
など、明らかに Layout Stateクラスがつかないような粒度のコンポーネントに対して内部的に指定されています。
レスポンジブ指定の方法
Section titled “レスポンジブ指定の方法”Lism
で使用できる CSS Propsは、レスポンシブに対応した形式で出力できるようになっています。
次の2通りの書き方があります。
- 配列で順番に指定( base → sm → md → …)
- オブジェクトで直接ブレイクポイントを指定
どちらも最終的に出力されるHTMLは同じで、ユーティリティクラスとCSS変数のペア(-{prop}@{bp}:
& --{bp}-{prop}
)で出力されます。
<Lism p={['20', '30', '5rem']}>...</Lism>
途中のブレイクポイントをスキップする場合は次のようになります。
@md
の値のみ指定<Lism p={[null, null, '40']}>...</Lism>
実際に値が切り替わるかどうかは、そのプロパティがレスポンシブ対応している必要があります。 どのプロパティが対応してるかはProp Class の BP( ブレイクポイントの略) の欄をチェックしてください。
デフォルトでレスポンシブ対応されていない(CSSが用意されていない)プロパティに関しては、SCSSによるカスタマイズを行うことで対応できます。