挿絵¶
Overview¶
挿絵は、版面に足す和の感じの絵で、情報を運ばない。
トップには水墨の門の絵と立体の庭を置き、記事の一覧の冒頭には、トークンの色で描く版画風の図柄を置く。
画面のトークンとコンポーネントの全体は デザインシステム(packages/ui)の Design Doc にある。
ADR-0026: トップの最初の訪問で水墨の門を描き、門をくぐった立体の庭にプロフィールを置く
Scope¶
持つものは次のとおり。
- 挿絵を置く場所と、置かない場所
- 版画風の挿絵の図柄、版の仕様、色と濃さの決め方
- 版画風の挿絵の動きの層
- 生成器と
ArtBandの使い方
持たないものは次のとおり。
- 水墨の門の絵と立体の庭の時間、色、配置。トップの水墨の門と立体の庭の Design Doc が持つ。
- 挿絵の濃さのトークンの値。
packages/ui/src/tokens/semantic.cssとsemantic-dark.cssが持つ。 - 動きの規則と、トップの庭の例外。全体の Design Doc の「動き」 が持つ。
Design¶
置く場所¶
| 場所 | 挿絵 |
|---|---|
| トップの庭 | 水墨の門の絵と、立体の庭 |
| 庭を出さないときのトップ | 帯の位置に、止まった水墨の絵 |
| 記事の一覧の冒頭 | 版画風の図柄 |
挿絵は、記事の本文、コードを動かす画面、フッターには置かない。
水墨の絵と庭の絵は、トップの水墨の門と立体の庭の Design Doc にある。
色と濃さ¶
版画風の挿絵は、文字の色(--fd-color-text)と面の色(--fd-color-surface)の 2 色だけで塗る。
濃さは、層ごとの不透明度のトークン(--fd-art-*)で決める。
テーマを替えると、色と濃さが一緒に替わる。
| トークン | 層 |
|---|---|
--fd-art-far |
遠景 |
--fd-art-mid |
中景 |
--fd-art-near |
近景 |
--fd-art-moon |
月 |
- ライトは近景ほど濃く、ダークは近景ほど面の色に近い。
- 層は、面の色で下を隠してから、文字の色を重ねる。後ろの層が透けないので、ダークで近景を薄くしても奥の稜線が出ない。
- SVG に色の値を書かない。
maskは alpha で読み、白の色の値を書かない。
版の仕様¶
図柄は、次の表の版の仕様を共有する。
数値は scripts/build-art.mjs が持つ。
| 要素 | 実装 | 目的 |
|---|---|---|
| 輪郭の荒れ | feTurbulence と feDisplacementMap。図柄ごとに変位の大きさを替える |
刷りのずれ。刷ったものに見せる |
| 霧 | 縦のグラデーションを mask に掛ける。下端が濃く、上端で面の色へなじむ |
上端で面へなじませる |
| 空 | 上端から下へ薄れる帯(一文字ぼかし)。霧だけを掛け、荒れを掛けない | 荒れで上端の辺がずれ、空に筋が出るのを防ぐ |
| 断ち落とし | viewBox 0 0 1200 400 と preserveAspectRatio="xMidYMax slice" |
帯の高さに関わらず下端を保つ |
図柄¶
| 名前 | ファイル | 特徴 |
|---|---|---|
seigaiha |
seigaiha.svg |
青海波。同心の弧の段を重ね、下の段ほど濃い。密なので低い帯でも幅を埋める |
kasumi |
kasumi.svg、kasumi-motion.svg |
霞の山並み。3 層の稜線と、動きの層の霞の帯 |
moonPine |
moon-pine.svg、moon-pine-motion.svg |
月と松。空の一文字ぼかし、遠い稜線、右下から入る松の枝と、動きの層の月 |
記事の一覧の冒頭には seigaiha を置く。
動きの層¶
図柄は、版の層の上に、動きの層を 1 枚持てる。
動きの層は、読み込んだ直後に 1 回だけ濃度を上げて出て、5 秒を超えない。
位置は動かさない。
| 図柄 | 動き |
|---|---|
kasumi |
霞の帯が、4 秒で濃度を上げて出る |
moonPine |
月が、3 秒で濃度を上げて出る |
seigaiha |
動きの層を持たない |
霞の帯は、面の色の帯の縁を、放射のグラデーションで四方にぼかす。
荒れを掛けると端が棒に見えるので、版の層に入れない。
帯と文字¶
ArtBand は、版の層と動きの層を重ねた帯を描く。
帯は aria-hidden="true" を持ち、SVG に読み上げの名前を付けない。挿絵は装飾であり、読み上げに渡さない。
ArtBandは子の要素を受け取らないので、帯の中に文字を置けない。文字を重ねるときは、帯の外に霞と文字を重ねる。bandの帯は高さが 120px で、上端の半分を面の色へなじませる(mask-t-from-50%)。fillの帯は、relativeを持つ親の全体に広げる。
Interface¶
置くファイル¶
| パス | 持つもの |
|---|---|
packages/ui/src/art/<図柄>.svg |
図柄ごとの版の層の SVG |
packages/ui/src/art/<図柄>-motion.svg |
図柄ごとの動きの層の SVG |
packages/ui/src/base/ArtBand/ArtBand.tsx |
SVG を帯として描くコンポーネント |
scripts/build-art.mjs |
版の仕様を共有して SVG を組む生成器 |
@fukuemon/ui は、パッケージの . から ArtBand と、型の ArtBandProps、ArtBandLayout、ArtMotif を出す。
ArtBand は ?raw で SVG を文字列として読み込む。
ArtBand の props¶
| prop | 意味 |
|---|---|
motif |
図柄の名前。kasumi、seigaiha、moonPine |
layout |
置き方。band(デフォルト)か fill |
生成器¶
pnpm run build:art は、scripts/build-art.mjs で packages/ui/src/art/ に SVG を書き出す。
生成器は乱数の種を固定するので、生成し直しても同じ SVG になる。
SVG を手で直さず、生成器を直して書き出し、一緒にコミットする。
チェック¶
pnpm run check:artは、書き出すはずの中身と今の SVG を比べ、食い違うかファイルがないと終了コード 1 にする。pnpm run checkに入っている。ArtBand.test.tsxは、帯を読み上げから外すこと、bandが 120px の帯を埋めること、動きの層が 5 秒以内の 1 回だけの遷移で動くことを確認する。