Search

Flow (l--flow)

l--flow is a flow class that manages spacing between child elements using margin.
Useful for the flow layout of text-heavy content such as article bodies.

Directly under l--flow, the spacing between content items is controlled by --flow and margin-block-start.

Class nameSpacing amount
l--flow--flow--base (--s30)
.l--flow.-flow:s--flow--s (--s20)
.l--flow.-flow:--flow

Heading tags receive larger spacing than other elements.

CSS

.l--flow {
  // コンテンツ間の余白バリエーションを定義
  --flow--base: var(--s30);
  --flow--s: var(--s20);

  display: flow-root;

  > * + * {
    --flow: var(--flow--base);
    margin-block-start: var(--flow);
  }

  // flow 直下のメディア要素は block に初期リセット
  > :where(img, video, iframe) {
    display: block;
  }
}

.-flow\:s > * {
  --flow: var(--flow--s);
}
.-flow\: > * {
  --flow: inherit;
}

// 見出しの上部の余白は広くする.
.l--flow > :where(h1, h2, h3, h4, h5, h6) {
  margin-block-start: calc(var(--flow) * 2 + 0.5em);
}

// 打ち消し
.is--skipFlow + *,
.l--flow > :first-child {
  --flow: 0px;
}

Lism Component

Import

import { Flow } from 'lism-css/react';

Props

PropertyDescription
flowSets the value of --flow.
When s is specified, the -flow:s class is applied. Any other value is emitted as the -flow: class together with the --flow variable.

Usage

Basic usage

l--flow

Lorem ipsum dolor sit amet. Consectetur adipiscing elit, sed do eiusmod tempor Incididunt ut. Labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut.

Heading 2

Lorem ipsum dolor sit amet. Consectetur adipiscing elit, sed do eiusmod tempor Incididunt ut.

Lorem ipsum dolor sit amet. Consectetur adipiscing elit, sed do eiusmod tempor Incididunt ut. Labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint.

Heading 3

  • Lorem ipsum, LIST content…
  • Lorem ipsum, LIST content…
  • Lorem ipsum, LIST content…

Lorem ipsum dolor sit amet. Consectetur adipiscing elit, sed do eiusmod tempor Incididunt ut. Labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut.

<Flow>
<p>Lorem ipsum content...</p>
<p>Lorem ipsum content...</p>
<h2>Heading</h2>
<p>Lorem ipsum content...</p>
<p>Lorem ipsum content...</p>
</Flow>

Using -flow:s

Using -flow:s

Lorem ipsum dolor sit amet. Consectetur adipiscing elit, sed do eiusmod tempor Incididunt ut. Labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut.

Heading 2

Lorem ipsum dolor sit amet. Consectetur adipiscing elit, sed do eiusmod tempor Incididunt ut.

Lorem ipsum dolor sit amet. Consectetur adipiscing elit, sed do eiusmod tempor Incididunt ut. Labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint.

Heading 3

  • Lorem ipsum, LIST content…
  • Lorem ipsum, LIST content…
  • Lorem ipsum, LIST content…

Lorem ipsum dolor sit amet. Consectetur adipiscing elit, sed do eiusmod tempor Incididunt ut. Labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut.

<Flow flow="s">
<p>Lorem ipsum content...</p>
<p>Lorem ipsum content...</p>
<h2>Heading</h2>
<p>Lorem ipsum content...</p>
<p>Lorem ipsum content...</p>
</Flow>

Setting a custom value

When a non-token value is passed to flow, it is output as the -flow: class and --flow CSS variable.

Setting a custom value

Contents…

Heading

Lorem ipsum dolor sit amet. Consectetur adipiscing elit, sed do eiusmod tempor Incididunt ut.

Contents…

Contents…

<Flow flow="10px">
<p>Contents...</p>
<p>Contents...</p>
<p>Contents...</p>
</Flow>

Note that l--flow falls back to --flow--base when --flow is unset. When nested inside another l--flow, it inherits the parent’s --flow value.

is--skipFlow

When used as a direct child of l--flow, this class cancels the spacing with the following sibling element. This is useful when you want to place an absolutely positioned element at the start of flow content.

Example
Skip flow…

Lorem ipsum, Example content…

Lorem ipsum, Example content…

Lorem ipsum, Example content…

<div class="l--flow">
<div class="is--skipFlow">skip flow...</div>
<p>Lorem ipsum, Example content...</p>
<p>Lorem ipsum, Example content...</p>
<p>Lorem ipsum, Example content...</p>
</div>

Notes on nesting l--flow

When l--flow is nested directly inside another l--flow and a custom --flow is set on the child, that value also affects the child’s own margin-block-start. (This issue can be avoided by wrapping the nested l--flow in an additional element to avoid being a direct child.)

When --flow is defined on a directly nested l--flow

Flow contents…

Flow contents…

*Nested l--flow(--flow:5px)

*Nested flow contents…

Flow contents…

*Nested l--flow(--flow:s)

*Nested flow contents…

<Flow>
<p>Flow contents...</p>
<p>Flow contents...</p>
<Flow flow="5px" bgc="orange:10%">
<p>
*Nested <code class="-fz:s -bd -p:5 -bdrs:10">`l--flow`(`--flow:5px`)</code>
</p>
<p>*Nested flow contents...</p>
</Flow>
<p>Flow contents...</p>
<Flow flow="s" bgc="green:10%">
<p>
*Nested <code class="-fz:s -bd -p:5 -bdrs:10">`l--flow`(`--flow:s`)</code>
</p>
<p>*Nested flow contents...</p>
</Flow>
</Flow>

© Lism CSS. All rights reserved.