Layout State
Lismでは、レイアウトを組む上で特定の役割を持ち、複数のモジュールに対してつけ外しできるような汎用性の高いセレクタを Layout State として分類しています。
is--flow
Lismでは、メインコンテンツ間の余白を管理するためのクラスとして、.is--flow
を用意しています。
.is--flow
系の直下では、コンテンツの間隔が margin-block-start
で管理されます。
クラス名 | 余白量 | 初期値 |
---|---|---|
.is--flow | --flowGap | --s40 |
.is--flow.-flow:s | --flowGap--s | --s30 |
見出しタグのみ、--flowGap
が--flowGap--h
に上書きされ、余白が広くなるようになっています。
-flow:s
クラスを併用すると、余白が少し狭くなります。さらにこの時、見出しタグも同じ余白量になります。
is--flow
ロレムイプサムの座り雨、トマ好き学習だったエリット、しかし時と活力はそのような木々と楽しみ。ブラインド行うにはいくつかの重要な事柄が流れます。
Heading
ロレムイプサムの座り雨、トマ好き学習だったエリット、しかし時と活力はそのような木々と楽しみ。
ロレムイプサムの座り雨、トマ好き学習だったエリット、しかし時と活力はそのような木々と楽しみ。ブラインド行うにはいくつかの重要な事柄が流れます。長年にわたり、私は学区と長寿であれば、そのような Liberroy, Foo の取り組み、我らのうち、Mulla Sunt の利点を提案したのなら。
- Lorem ipsum, LIST content…
- Lorem ipsum, LIST content…
- Lorem ipsum, LIST content…
ロレムイプサムの座り雨、トマ好き学習だったエリット、しかし時と活力はそのような木々と楽しみ。ブラインド行うにはいくつかの重要な事柄が流れます。
<div class="is--flow"> <p>Lorem ipsum content...</p> <p>Lorem ipsum content...</p> <h2>Heading</h2> <p>Lorem ipsum content...</p> <p>Lorem ipsum content...</p></div>
-flow:s
を併用するロレムイプサムの座り雨、トマ好き学習だったエリット、しかし時と活力はそのような木々と楽しみ。ブラインド行うにはいくつかの重要な事柄が流れます。
Heading
ロレムイプサムの座り雨、トマ好き学習だったエリット、しかし時と活力はそのような木々と楽しみ。
ロレムイプサムの座り雨、トマ好き学習だったエリット、しかし時と活力はそのような木々と楽しみ。ブラインド行うにはいくつかの重要な事柄が流れます。長年にわたり、私は学区と長寿であれば、そのような Liberroy, Foo の取り組み、我らのうち、Mulla Sunt の利点を提案したのなら。
- Lorem ipsum, LIST content…
- Lorem ipsum, LIST content…
- Lorem ipsum, LIST content…
ロレムイプサムの座り雨、トマ好き学習だったエリット、しかし時と活力はそのような木々と楽しみ。ブラインド行うにはいくつかの重要な事柄が流れます。
<div class="is--flow"> <p>Lorem ipsum content...</p> <p>Lorem ipsum content...</p> <h2>Heading</h2> <p>Lorem ipsum content...</p> <p>Lorem ipsum content...</p></div>
.is--skipFlow
次に続く兄弟要素との余白量を打ち消します。フローコンテンツの先頭に absolute な要素を配置したい場合などに活用できます。
is--container
is--container
はコンテナ要素を定義するためのクラスです。
-container:{s|m|l}
のいずれかでサイズを指定することで、子要素のコンテンツサイズを制御することもできます。
クラス名 | コンテンツ幅 | 初期値 |
---|---|---|
is--container | --item-size | 100% |
-container:s | --size--s | |
-container:m | --size--m | |
-container:l | --size--l |
<div class="is--container -container:s"> <div>Contents...</div> <div>Contents...</div></div>
-container:{s|m|l}
を使用すると、--item-size
だけではなく .is--wide
の幅(.--wide-size
)も同時に調整されます。
.is--container
に 任意の値をセットする方法
s, m, l 以外の値をセットしたい場合は、--item-size
変数を指定します。
<div class="is--container" style="--item-size:20rem"> <div>Contents...</div> <div>Contents...</div></div>
DEMO
is--container
関連の挙動を確認できるデモページを用意しています。
ぜひ広い画面でご確認ください。
is--wide|fullwide|overwide
コンテンツサイズの制御クラスを3種類用意しています。
クラス名 | 説明 |
---|---|
is--wide | .-container:\{s|m|l\} クラス直下では、コンテンツ幅よりも1段階広いサイズになります. |
is--fullwide | has--gutter の直下でも、親要素のサイズいっぱいに広がります。 |
is--overwide | 直前のコンテナ要素が呼び出された位置を基準としたコンテナ幅(100cqw )まで広がります。(@propetry が有効なブラウザでのみ有効。) |
これらのクラスの挙動についても、別ページで確認できます。
is--layer
position:absolute
で要素を親要素サイズに合わせて配置できます。
CSSは以下のようになっており、inset:0
とoverflow:hidden
も指定された状態で配置されます。
.is--layer { position: absolute; inset: 0; overflow: hidden;}
活用例は <Layer>
を参照してください。
is--linkBox
ボックス全体をリンク化するためのクラスです。
活用例は <LinkBox>
を参照してください。
is--hiddenLink
, is--overlayLink
is--linkBox
と併用して、内部のリンクをボックス全体に広げるために使用します。
活用例は <LinkBox>
を参照してください。
has--gutter
コンテンツの左右に余白をつけることができるクラスです。
サイト全体で統一した余白量を左右に確保するためのものとして、padding系のユーティリティとは別のクラスとして用意しています。
クラス名 | 余白量 | 初期値 |
---|---|---|
has--gutter | --gutter | --s40 |
Lorem ipsum content…
Lorem ipsum content…
Lorem ipsum content…
<div class="has--gutter"> <p>Lorem ipsum content...</p> <p>Lorem ipsum content...</p> <p>Lorem ipsum content...</p></div>
has--mask
--mask-img
変数と組み合わせて、自身にmaskを適用します。
.has--mask{ mask: var(--mask-img) no-repeat 50% / contain;}
Lism ComponentsではhasMask
プロパティに指定した文字列が--mask-img
として出力されるようになっています。(この時、<svg>
を渡すと、base64へエンコードされます。

<Media src='/img/img-3.jpg' alt='' ar='16/9' width='960' height='640' loading='lazy' hasMask='<svg viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg"><path fill="#FF0066" d="M170.4,25.7c16.1,14.2,23.2,38.5,24.8,61.7c1.7,23.3-1.8,45.5-12.9,62.3c-11,16.9-29.3,28.6-48.8,34.5 c-19.4,5.9-40,6.1-59.5,0.4c-19.5-5.6-37.9-17.4-51.7-34.9c-14-17.5-23.2-40.8-18-60.2c5-19.4,24.5-34.7,43.5-48.4 s37.6-25.7,59.5-29.7C129.1,7.3,154.2,11.4,170.4,25.7z" /></svg>' />
has--delimiter
子要素の間にデリミタを疑似要素で出力します。
.has--delimiter { > * + *::before { content: var(--delimiter, ' / '); color: var(--delimiter-c, currentColor); white-space: pre; }}
has--delimiter
<div class='l--flex l--flex--cluster has--delimiter'> <span>Content</span> <span>Content</span> <span>Content</span></div>
<div class='l--flex l--flex--cluster has--delimiter -g:20' style="--delimiter-c:var(--blue);--delimiter:'>>'"> <span className='-d:if -ai:c -g:i'>Content</span> <span className='-d:if -ai:c -g:i'>Content</span> <span className='-d:if -ai:c -g:i'>Content</span></div>
has--divider
子要素の間にボーダーを表示します。デフォルトではborder-block-end
で線が描画されます。
ボーダーの色や太さは、-bd:
クラスと同じく--bdw
や--bdc
変数で変更できます。
has--divider
<div class="l--box has--divider"> <div class="-p:20">Content</div> <div class="-p:20">Content</div> <div class="-p:20">Content</div></div>
--isRow
変数が1
の時、区切り線はborder-inline-end
で描画されます。
また、l--flex
と併用された時、--isRow
変数は1
にセットされるようにもなっています。
l--flex
で使用する<div class="l--flex has--divider"> <div class="-px:20">Content</div> <div class="-px:20">Content</div> <div class="-px:20">Content</div></div>
--isRow
と flex-direction をクエリで切り替えるようなクラスを作っておくと、以下のように方向を切り替えることもできます。
--isRow
で方向を管理する.-fxd:c2r@sm
を作る.-fxd\:c2r\@sm { --isRow: 0; flex-direction: column;}
@container (min-width: 480px) { .-fxd\:c2r\@sm { --isRow: 1; flex-direction: row; }}
.re--sh
.re--sh
クラスを指定した要素で、シャドウを構成する各CSS変数が再定義されます。
変数を上書きすることでシャドウの色味などを調整することが可能です。
Default
Custom
<div class="re--sh l--flex -g:40" style="--sh-hsl:200 50% 50%;--sh-a:20%"> <div class="l--box -bxsh:1 -p:40 -bdrs:3">Box</div> <div class="l--box -bxsh:4 -p:40 -bdrs:3">Box</div></div>
.re--style
基本的なスタイルがリセットされます。
buttun
要素などをスタイリングする際に便利です。
default:
reset:
<div> reset: <button className='re--style'>Button</button></div>
補足
コンテンツのサイズ制御について
ページのコンテンツエリアが次のような構造をしているとします。
<main> <article> ...コンテンツ... </article></main>
ここで、例えばarticle
内のコンテンツ幅を800px
にしたい時を考えてみてください。
主に、次の①か②の選択肢があると思います。
/* ① コンテナ自身(コンテンツの親要素)の幅を制御する */article{ max-width: 800px;}
/* ② 各コンテンツ(コンテナの直下要素)の幅を制御する */article > * { max-width: 800px; margin-inline: auto;}
どちらも一長一短ありますが、とくに理由がなければ①を採用することが多いのではないでしょうか。
しかし、Lismでは ② の方法を推奨しています。
この②のアプローチに対応するためのコンテンツ制御クラスが、-container:
クラスです。また、②を前提としてis--wide
やis--fullwide
クラスは設計されています。
これはなぜかというと、① のアプローチをベースにした場合、途中で全幅サイズで表示したいコンテンツを作る場合の処理が複雑になってしまうためです。
②であれば、基本のCSSはmax-width:100%
だけでOKで、少しの例外処理を加えれば済みます。
しかし①では、次のようなCSSになってしまいます。
.fullwide{ max-width: 100vw; left: calc(50% - 50vw);}
/* その他環境を考慮したCSS... */
これだけみるとそこまで複雑ではないように見えますが、vw
ではスクロールバーの幅が考慮されないという問題点があったり、汎用性を考慮するとCSSがどんどん複雑化していきます。
ただし、@property
が有効なブラウザでは①の問題点もほぼ解消されるようになってきました。
そこで、Lismでは、is--overwide
を用意しています。
①のようなアプローチを採用するには、is--container
にmax-widthを指定して運用し、全幅コンテンツに対してis--overwide
クラスを使用てください。
<Box hasGutter> <Container maxW='30rem' py='40' bd='u:guide' bdc='blue'> <Box bd='u:guide' py='10'>...コンテンツ...</Box> <Box isOverwide hasGutter bgc='gray:20%' py='20'>全幅コンテンツ</Box> <Box bd='u:guide' py='10'>...コンテンツ...</Box> </Container></Box>