Reel
コンテンツを横スクロールで表示するコンポーネントです。
対応するHTML構造
<div class="l--reel">
<div class="is--item">...</div>
<div class="is--item">...</div>
<div class="is--item">...</div>
</div>
Props
itemBasis
: 各アイテムのサイズを指定できます。unreel
: 横スクロールを解除するブレイクポイントを指定できます。(sm
,md
を標準ではサポートしています)
検討事項MEMO
- scroll-snap-alignあたりの設定
- スクロール可能であることを視覚的に表示する機能をつける?(端にシャドウ)
- ブロック化した時
- 子要素はBox or 画像・動画だけにする?
- もしくは、専用の子ブロック(BOX拡張)のみにするか
Import
import { Reel } from '@loos/lism-core';
DEMO
<Reel>
デフォルト
Content
Content
Content
Content
Content
Content
リサイズ可能エリアです ↑
<Reel>
<Box>...</Box>
<Box>...</Box>
...
</Reel>
itemBasis
で子要素の横幅を指定する
リサイズ可能エリアです ↑
<Reel itemBasis="40%" gap={20}>
<Frame ascpect="16/9">
<img src="..." alt="" loading="lazy" width={960} height={640} />
</Frame>
<Frame ascpect="16/9">
<img src="..." alt="" loading="lazy" width={960} height={640} />
</Frame>
...
</Reel>
snap="center"
リサイズ可能エリアです ↑
<Reel itemBasis="40%" snap="center" gap={20}>
<Frame ascpect="16/9">
<img src="..." alt="" loading="lazy" width={960} height={640} />
</Frame>
<Frame ascpect="16/9">
<img src="..." alt="" loading="lazy" width={960} height={640} />
</Frame>
...
</Reel>
ボタンナビゲーションをつける(idつけてアンカーリンク用意するだけ)
<Reel itemBasis="40%" snap="center" gap={20}>
<Frame id="image-1" ascpect="16/9">
<img src="..." alt="" loading="lazy" width={960} height={640} />
</Frame>
<Frame id="image-2" ascpect="16/9">
<img src="..." alt="" loading="lazy" width={960} height={640} />
</Frame>
<Frame id="image-3" ascpect="16/9">
<img src="..." alt="" loading="lazy" width={960} height={640} />
</Frame>
...
</Reel>
<Cluster gap={20} jc="c" lh="1" provide={{c: 'base', bgc:'b200', p:'box:s', radius: '2'}}>
<Item tag="a" href="#image-1" consume='c bgc p radius' hover={{bgc: "b300"}} td="none">1</Item>
<Item tag="a" href="#image-2" consume='c bgc p radius' hover={{bgc: "b300"}} td="none">2</Item>
<Item tag="a" href="#image-3" consume='c bgc p radius' hover={{bgc: "b300"}} td="none">3</Item>
...
</Cluster>
direction="vertical"
リサイズ可能エリアです ↑
<Reel itemBasis="auto" direction="column" snap="center" aspect="3/4.5" radius="4" bgc="b900" p={30} gap={30}>
<Frame aspect="3/4" radius="3">
<img src="/img/demo-img.jpeg" alt="" loading="lazy" width={960} height={640} />
</Frame>
<Frame aspect="3/4" radius="3">
<img src="/img/demo-img.jpeg" alt="" loading="lazy" width={960} height={640} />
</Frame>
<Frame aspect="3/4" radius="3">
<img src="/img/demo-img.jpeg" alt="" loading="lazy" width={960} height={640} />
</Frame>
<Frame aspect="3/4" radius="3">
<img src="/img/demo-img.jpeg" alt="" loading="lazy" width={960} height={640} />
</Frame>
</Reel>
小さい画面サイズでのみReelにする
unreel
でブレイクポイントを指定(sm
, md
を標準ではサポートしています)することで、そのポイントを超えるとReelではなく、<TileGrid>
と同じようなレイアウトに切り替わります。
flex
からgrid
に切り替わるので、grid
プロパティ(grid-template-columns
など)を指定して、レイアウトを調整することもできます。(Reel時にgrid用のプロパティは影響しない)
@mdでReel解除
Content
Content
Content
Content
Content
Content
リサイズ可能エリアです ↑
<Reel unreel='md' gap={20}>
...
</Reel>
@smでReel解除
Content
Content
Content
Content
Content
Content
リサイズ可能エリアです ↑
<Reel unreel='sm' gap={20}>
...
</Reel>
@smでReel解除, grid時、2:3の比率でコンテンツを表示
Content
Content
Content
Content
Content
Content
リサイズ可能エリアです ↑
<Reel unreel='sm' gap={20} grid={{columns: '2fr 3fr'}}>
...
</Reel>