コンテンツにスキップ

CSS Props

Prop Utility に対応するLism Propsを紹介します。

このページの表の見方
  • Prop: コンポーネントに指定するプロパティの文字列。
  • CSS: 対応するCSSプロパティ。
  • Token: 対応するトークンの種類。
    To Classに該当しない値で、かつトークンキーと一致した場合、var(--{prop}--{token})という変数で値が出力されます。
  • To Class: ユーティリティクラスに変換される値。
    -{prop}:{util}というクラスが出力されます。
  • BP: ブレイクポイントで値を切り替えることができる場合は

Colors

PropCSSTokenTo ClassBP
ccolorCOLORtext,text-2,base,keycolor,mix,
white,black,
inherit
-
bgcbackground-colorCOLORbase,base-2,text,keycolor,mix,
white,black,
inherit
-
bdc--bdcCOLORdivider,keycolor,mix,
inherit
-
keycolor--keycolorCOLOR--
使用例

Lorem ipsum dolor sit, amet consectetur adipisicing elit, sed do eiusmod tempor. Non facere laudantium ex eos doloribus aut dolore nisi.

Lorem ipsum dolor sit, amet consectetur adipisicing elit, sed do eiusmod tempor. Non facere laudantium ex eos doloribus aut dolore nisi.

<Box c='main' bgc='base-2' bd bdc='divider' p='30'>
<Dummy />
</Box>
<Box c='white' bgc='black' p='30'>
<Dummy />
</Box>

mix クラスの呼び出し方

.-c|bgc|bdc:mix クラスは、3つの変数を受け取とるようになっています。

c='mix'.-c:mixクラスを呼び出し、同時にCSS変数をstyleで定義してもよいですが、c='color1:(color2:)NUM%' の書式で指定することで、自動で変数に分割されるようになっています。

使用例

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

リサイズ可能
<Lism bgc='blue:10%' c='blue:currentColor:40%' p='30'>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
</Lism>

Typography

PropCSSTokenTo ClassBP
ffont-inherit-
fzfont-sizeTYPO.FZTYPO.FZ
fffont-familyTYPO.FFTYPO.FF-
fwfont-weightTYPO.FWTYPO.FW-
lhline-heightTYPO.LHTYPO.LH-
ltsletter-spacingTYPO.LTSTYPO.LTS-
tatext-align-center(c)
left(l)
right(r)
-
tdtext-decoration-none(n)
underline(u)
-
whswhite-space-nowrap(nw)-
ovwoverflow-wrap-anywhere(any)-

Width & Height

PropCSS PropertyTokenTo ClassBP
wwidthSIZE100%,
fit-content(fit)
hheightSIZE100%,
fit-content(fit),
screen
maxWmax-widthSIZE100%
maxHmax-heightSIZE100%
minWmin-widthSIZE100%
minHmin-heightSIZE100%

Margin and Padding

PropCSSTokenTo ClassBP
ppaddingSPACESPACE.0~50
pxpadding-inlineSPACESPACE.0~50
pypadding-blockSPACESPACE.0~50
pispadding-inline-startSPACESPACE.0~50
pbspadding-block-startSPACE-
plpadding-leftSPACE-
prpadding-rightSPACE-
ptpadding-topSPACE-
pbpadding-bottomSPACE-
mmarginSPACESPACE.0~50,auto
mxmargin-inlineSPACEauto
mymargin-blockSPACEauto
mismargin-inline-startSPACEauto
mbsmargin-block-startSPACESPACE.0~50, auto
mlmargin-leftSPACE-
mrmargin-rightSPACE-
mtmargin-topSPACE-
mbmargin-bottomSPACE-
Examples
<Box m='40'>...</Box>
<Box mx='auto'>...</Box>
<Text px={[20, 30]}>...</Text>
<Box p='30' py={[null, 50]}>...</Box>
<Box pbs='1em' my='2em'>...</Box>

Displays

PropCSSTokenTo ClassBP
ddisplay-n,b,f,g,i,ib,if,ig
vvisibility-hidden(h), visible(v)
ovoverflow-hidden(h),auto(a),clip(c)
ovxoverflow-x-hidden(h),auto(a),clip(c)
ovyoverflow-y-hidden(h),auto(a),clip(c)
opopacityOPACITYOPACITY,0,10,20,…,100

Styling

PropCSSTokenTo ClassBP
bxshbox-shadowSHADOWSHADOW-
bdrsborder-radiusRADIUSRADIUS
bdborder-n(none),
l,r,t,b,
is,ie,bs,be,
x,y
-
bdc--bdcCOLOR.PALETTE, COLOR.BDdivider,i,keycolor-
bdw--bdw--
bds--bds---

borderに関する仕様は少し特殊になっています。詳しくはborderページをご覧ください。

Positions

PropCSSTokenTo ClassBP
posposition-r(relative),
a(absolute),
s(static),
f(fixed),
sticky
-
zz-index--1, 0, 1, 2-
insetinsetSPACE0-
ttopSPACE0,50%,100%-
lleftSPACE0,50%,100%-
rrightSPACE0,50%,100%-
bbottomSPACE0,50%,100%-
insets.isinset-inline-startSPACE0,100%-
insets.ieinset-inline-endSPACE0,100%-
insets.bsinset-block-startSPACE,100%--
insets.beinset-block-endSPACE,100%--

position:absoluteで要素を配置する例をいくつか紹介します。

pos='a'でabsolute配置する

BG

Absolute Content

Absolute Content

<Box pos='r' p='40' bgc='base-2'>
<Text fz='4xl' fw='bold' op='20' ta='c' lts='l'>BG</Text>
<Box pos='a' t='0' l='40' px='20' bd>
<p>Absolute Content</p>
</Box>
<Box pos='a' insets={{ie:0, be:0}} px='20' bd>
<p>Absolute Content</p>
</Box>
</Box>

配置の指定例

A
B
C
D
E
F
G
H
I
リサイズ可能
<Box pos='r' ar='3/2' lh='1' ff='mono'>
<Box pos='a' l='0' t='0' bd p='20'>A</Box>
<Box pos='a' l='50%' t='0' css={{translate:'-50X'}} bd p='20'>B</Box>
<Box pos='a' r='0' t='0' bd p='20'>C</Box>
<Box pos='a' l='0' t='50%' css={{translate:'-50Y'}} bd p='20'>D</Box>
<Box pos='a' l='50%' t='50%' css={{translate:'-50XY'}} bd p='20'>E</Box>
<Box pos='a' r='0' t='50%' css={{translate:'-50Y'}} bd p='20'>F</Box>
<Box pos='a' l='0' b='0' bd p='20'>G</Box>
<Box pos='a' l='50%' b='0' css={{translate:'-50X'}} bd p='20'>H</Box>
<Box pos='a' r='0' b='0' bd p='20'>I</Box>
</Box>

Places

PropCSSTo ClassBP
aialign-itemsc, s, e, fs, fe, str-
acalign-contentc, s, e, fs, fe, sb-
jijustify-itemsc, s, e, fs, fe, str-
jcjustify-contentc, s, e, fs, fe, sb-
piplace-items--
pcplace-content--
PropCSSTo ClassBP
aslfalign-selfc, s, e, str-
jslfjustify-selfc, s, e, str-
pslfplace-self--
ordorder-1, 0, 1-

Grid & Flex

grid形、flex形のプロパティはそれぞれ grid, flex オブジェクト、もしくは専用のコンポーネントのみで指定できるようになっています。

grid

以下のものは grid オブジェクト内で指定することができます。

PropCSSTokenTo ClassBP
gdgrid--
gtagrid-template-areas--
gtcgrid-template-columns--
gtrgrid-template-rows--
gafgrid-auto-flow---
gargrid-auto-rows---
gacgrid-auto-columns---
ggapSPACESPACE,inherit
rowgrow-gapSPACE-
colgcolumn-gapSPACE-
基本的なgrid系プロパティの使用例
<Lism d='grid' ai='center' grid={{gtc:'1fr 1fr', g:40}}>...</Lism>
Gridコンポーネントでは、gridオブジェクトを挟まずにそのまま指定できます。
// Grid系のコンポーネントを使う場合は、gridオブジェクトは不要です。
<Grid ai='center'gtc='1fr 1fr' g={40}>...</Grid>

詳しくは<Grid>をご覧ください。

gridItem

以下のものは gridItem オブジェクト内で指定することができます。

PropCSSTo ClassBP
gagrid-area-
gcgrid-column-
grgrid-row-
gcsgrid-column-start--
grsgrid-row-start--
gcegrid-column-end--
gregrid-row-end--
使用例
// gridItemオブジェクトで各プロパティを指定します。
<Lism gridItem={{gc:'2'}} aslf='end'>...</Lism>
// GridItemのコンポーネントを使う場合は、gridItemオブジェクトは不要です。
<GridItem gc='2' aslf='end'>...</GridItem>

flex

以下のものは flex オブジェクト内で指定することができます。

PropCSSTokenTo ClassBP
fxwflex-wrap-wrap(w),
nowrap(nw)
fxdflex-direction-column(c),
column-reverse(cr),
row(r),
row-reverse(rr)
ggapSPACESPACE,inherit
rowgrow-gapSPACE-
colgcolumn-gapSPACE-

flexItem

以下のものは flexItem オブジェクト内で指定することができます。

PropCSSTo ClassBP
fxflex1
fxshflex-shrink0, 1-
fxgflex-grow0, 1-
fxbflex-basis-

Background

Lismコンポーネントでは、background用のプロパティとしてbg,backgroundsの2種類があります。

PropCSSTokenTo ClassBP
bgbackground---
bgに指定
<Box ar='16/9' bg="url(/img.jpg) center / 50%"></Box>

以下のものは backgrounds オブジェクト内で指定することができます。

PropCSSTokenTo ClassBP
colorbackground-color-
imagebackground-image-
sizebackground-size-
positionbackground-position-
backgroundsで指定する例
<Box ar='16/9' backgrounds={{image: 'url(/img.jpg)', position: 'center', size: '50%'}}></Box>

gradient

gradientに指定した文字列は background-image に出力されます。

値を直書き
リサイズ可能
<Frame ar='16/9' gradient='linear-gradient(to top, #a8edea 0%, #fed6e3 100%)'/>

独自ユーティリティクラスの作成例

Lismのパッケージ内で用意しているクラスはありませんが、いくつか独自のユーティリティクラスを用意してそれを呼び出す例を紹介します。

ユーティリティクラスとして強制出力する方法を活用します。

stripe

Lorem ipsum dolor sit, amet consectetur adipisicing elit, sed do eiusmod tempor. Non facere laudantium ex eos doloribus aut dolore nisi.

Lorem ipsum dolor sit, amet consectetur adipisicing elit, sed do eiusmod tempor. Non facere laudantium ex eos doloribus aut dolore nisi.

リサイズ可能
.-bg\:stripe {
--stripe-bdc: color-mix(in srgb, currentColor, transparent 94%);
--stripe-bdw: 1px;
--stripe-deg: -40deg;
--stripe-interval: 6px;
background-image: repeating-linear-gradient(
var(--stripe-deg),
var(--stripe-bdc),
var(--stripe-bdc) var(--stripe-bdw),
transparent var(--stripe-bdw),
transparent var(--stripe-interval)
);
background-position: center;
}
gradient="u:sunset"
リサイズ可能
.-gradient\:sunset{
background: linear-gradient(to top, #ddb672 5%, #e67a44 60%, #d16834 95%);
}

Others

PropCSSTokenTo ClassBP
bdrsborder-radiusRADIUS-
bxshbox-shadowSHADOW-

その他、下記のCSSプロパティは css というプロパティにオブジェクトとして指定することで出力できます。
(Note: 以下に挙げているもの以外は、そのまま styleに渡されます。)

ContextPropCSSTokenTo ClassBP
css.listStylelistStylenone
css.transformtransformflipX,flipY,flipXY
css.transformOrigintransformOriginlt,lb,rt,rb
css.translatetranslate-50,-50X,-50Y,-100X,-100Y
css.rotaterotate45,-45,90,-90,180
css.scalescale
css.clipPathscale
css.filterfilter
css.backdropFilterbackdropFilter

対応トークンとユーティリティクラスでの出力について

各プロパティごとに、指定した値によってはユーティリティクラスとして出力される場合があります。

<Box p={20} bxsh="2" ta="center" fz="xl">...</Box>

出力結果は次のようになります。

<div class="l--box -p:20 -bxsh:2 -ta:l">...</div>

具体的にどの値をユーティリティ化するかどうかの詳細は/src/config/presets,/src/config/utilitiesで定義しています。

utilities側で定義しているものは、キーと省略形のどちらを指定してもユーティリティクラスとして出力されます。

たとえば、text-align:center用の -ta:c クラスは、以下のどちらの書き方でも出力されます。

<Box ta="center">...</Box>
<Box ta="c">...</Box>

ユーティリティクラス化されない時の出力パターンについて

ユーティリティクラスとして出力されない時、3パターンの出力方式に分かれます。

1. -prop:クラスと--prop変数の組み合わせで出力される

<Box mb={40} fz='2em'>...</Box>
  • ブレイクポイント対応のプロパティ(ベース値を上書きする必要があるため、インラインで直接プロパティを出力せずクラスと変数で優先度の問題をなくす)
  • ユーティリティクラスが多く[class*='-prop:']にすると文字数の省略になりそうなもの
  • -{prop}:クラスによって何か値を指定していることが分かったほうが便利なケースがありそうなプロパティ

-prop:クラスだけを出力する方法

このパターン1での出力がされるLism Propsに対して "-" または true を指定することで、.-{prop}: クラスだけの出力が可能です。

CSSファイル側で具体的な値を指定したい場合などに活用できたり、一部、-{prop}:クラスがスタイルを持っている特殊なケースもあります。

<Box bd w='-' p={['-', '-']}>...</Box>

このように、-{prop}:クラスだけ出力されてCSS変数は何も出力されません。

2. 単純にstyleとして出力されるもの

<Box z="10">...</Box>

3. --propだけ出力されるもの

このケースが一番稀です。

<Box bd bdc="#000" bdw="2px">...</Box>
  • --bdc,--bdw,--bds のborder系

ユーティリティクラスとして強制的に出力する方法

u:からはじめると、その後ろの文字列がユーティリティクラス名として出力されます。

<Box p='u:hoge'>...</Box>
<div class="l--box -p:hoge">...</div>