ADR-0073: コードを動かす画面を、地の上に角の丸い紙の面を重ねる見た目にし、面の角を 6〜14px で丸める¶
Status¶
承認
Context¶
コードを動かす画面の、ペインの区切りと角の丸めを決め直す必要がある。
- トークンを、プリミティブトークン、セマンティックトークン、テーマ変数の 3 つの層にし、テーマの組をコントラストのチェックで確認すると決めている。
- 罫で区切る版面を保ち、操作できる要素と重なる面の角を 2px で丸めると決めている。ふだんの画面が使う角丸の名前は、テーマ変数の
rounded-controlの 1 つだけである。Tabs のタブ、Notice、Table、コードブロックなどの角は丸めない。重なる面は、surface-raisedの面、1px の枠、ずらした影を組にして示す。 - コードを動かす画面は、文字と押せる領域を詰めた画面で、記事の本文と読み方が違う。触る端末では、押せる領域を 44px にする。
- フォーカスの表示は墨の 2px の輪で、詰めたペインでは要素の内側に引くと決めている。
- 狭い配置(ファイルのドロワー、下のタブ、左の縦のタブ、記事の枠の上のタブ)と PC の配置を分ける。
- 今のプレイグラウンドの画面は、ペインごとに四方の 1px の枠を引き、その中の見出しの帯とタブの帯に罫を引き、ペインの間に仕切りの罫を引く。PC の画面では、仕切りの押せる幅 44px とペインの余白で、ペインの間が約 52px 空く。
- 利用者は、今の画面を角ばって見えると感じた。罫と余白で区切る案(W1)と、地の上に紙の面を重ねる案(W2)の画像を比べ、W2 を選んだ。PC の画面では、ペインの間を詰め、境界をはっきり出しすぎない形を求めた。利用者が承認した W2 の画像は、ペインの面を 10px、ペインの中のボタンを 6px、下のタブの帯とファイルのドロワーを 14px で丸めて描いた。
- VS Code は、ペインを 1px の罫で仕切り、ペインの間を空けない。
- WCAG 2.2 の 1.4.11 は、操作に要る図とコンポーネントの境界に 3:1 を求める。ペインの区切りは飾りの境界で対象外と読んでいる(解釈)。
- 地と面のコントラストの比を、プリミティブトークンの値から計算した値は、次の表のとおりである。
| 組 | ライト | ダーク |
|---|---|---|
地と面(surface-ground、surface-pane) |
1.23:1(sumi-100、sumi-0) |
1.10:1(sumi-950、sumi-800) |
地とエディタの背景(code-surface) |
1.10:1(sumi-75) |
1.07:1(sumi-1000、地より暗い) |
面と今の hover の面(surface-subtle) |
1.08:1(sumi-50) |
1.00:1(どちらも sumi-800) |
面と sumi-750 |
対象外 | 1.16:1 |
| フォーカスの輪と面 | 17.25:1 | 14.86:1 |
Decision¶
コードを動かす画面(プレイグラウンドの Node、SQL、Go のツールのページと、記事に埋め込んだ実行環境)だけ、ペインを地の上に重ねた紙の面にする。
- 面と地
- セマンティックトークンに、地の
surface-groundと、ペインの紙の面のsurface-paneを足す。ライトは地をsumi-100、面をsumi-0にする。ダークは地をsumi-950、面をsumi-800にする。エディタと端末の背景(code-surface)は変えない。 - 地の出し方は、利用者が承認した W2 の画像のとおりにする。
- 地は、ツールのページの
mainに塗る。 - ページのヘッダは地の上に置き、面を塗らない。
- PC の配置では、画面の縁とペインの間を 6px 空ける。
- 狭い配置でも、ツールのページでは地を出す。
- 地は、ツールのページの
- ペインの中で
surfaceを直に塗っている面(ToolPaneの面、SQL の結果の欄)は、surface-paneに替える。 - ファイルの木の名前の欄(1px の枠を持つ欄)の背景は、
surfaceのままにする。欄は枠で示し、背景の色を変える理由が無いためである。 - ペインの中で
scroll-fade-endを使う枠には、--fd-scroll-fade-bgにsurface-paneを渡すユーティリティを並べて付ける。scroll-fade-codeがcode-surfaceの色を渡すのと同じ方法である。scroll-fade-endのデフォルトの色は、記事の表とTableが使うので変えない。 - ペインの四方の枠と、ペインの間の仕切りの罫を引かない。面と地の濃さの差で区切る。
- ハイコントラストのとき(
forced-colors: active)だけ、ペインの面に 1px の枠を引く。面の塗りが消え、ペインの区切りが見えなくなるためである。 - ペインの中の罫は、タブの帯の下の罫だけにする。見出しの帯の下、行番号の縦、エディタの下の案内の帯、プレビューの URL の帯の下の罫を引かない。
- 面の上の hover の面と選んだ行の面の色として、セマンティックトークン
surface-pane-subtleを足す。- 値は、ライトを
sumi-50、ダークをsumi-750にする。ダークのsurface-subtleは面と同じsumi-800で、面の上の hover が見えないためである。 surface-subtleの値は、画面の外に影響するので変えない。packages/uiのコンポーネントは、density="compact"かsize="XS"のときに、surface-subtleの代わりにsurface-pane-subtleを使う。対象は、hover の面、選んだ行の面、boxedの TextField の面、Switch と Checkbox の hover、neutralのラベルの面である。- ダークの
sumi-750はsurface-disabledと同じ値である。hover の面と無効の面は、面の色では見分けられないので、文字の色(text-disabled)で見分ける。
- 値は、ライトを
- セマンティックトークンに、地の
- 角
- ペインの面を 10px、ペインの中の操作できる要素を 6px で丸める。下のタブの帯、左の縦のタブの帯、ファイルのドロワーは 14px で丸める。紙の面の重なりを、角の丸めで見分けるためである。
- テーマ変数に、
rounded-pane(10px)、rounded-sheet(14px)、rounded-control-compact(6px)を足す。rounded-control(2px)の値は変えない。 rounded-control-compactは、packages/uiのコンポーネントがdensity="compact"のとき(Button はsize="XS"のとき)に、rounded-controlの代わりに使う。対象は、Button、IconButton、boxedの TextField、TreeView の行、Disclosure の要約、タブの閉じるボタン、ActionMenu の開くボタン、Switch、Checkbox である。値を上書きせずに別の名前にし、既にあるdensityとsizeの props で切り替えると、使う所をコードで追えるためである。ADR-0062 の compact のトークンと同じ分け方である。- Dialog、ActionMenu のメニューの面、エディタの補完の一覧は、重なる面なので 2px のままにする。ページのヘッダの要素も 2px のままにする。
- ADR-0028 が丸めないと決めた要素(Tabs のタブ、下罫だけの検索の欄、メニューの項目、Notice、StatusBadge、Table、コードブロック)は、今のとおり丸めない。
- フォーカスの輪は、要素の角の丸めに沿わせる。
- 重なる面
- 下のタブの帯と左の縦のタブの帯は、ペインと同じ
surface-paneの面にし、枠と影を付けない。ペインに重ならずに並ぶ面で、ADR-0028 の重なる面に当たらないためである。 - ファイルのドロワーは、ペインに重なる面として、
surface-raisedの面と、右の縁の 1px の枠(border-field)で示し、影を付けない。利用者が承認した W2 の画像のとおりである。- ライトとダークのどちらでも、
surface-raisedはsurface-paneと同じ色である。 - ドロワーを開いている間は、ドロワーの外の画面を薄い墨の面で覆う。この覆いと右の縁の枠で、ドロワーとペインを見分ける。
- ライトとダークのどちらでも、
- 画面の中の Dialog、ActionMenu、エディタの補完の一覧は、ADR-0028 の重なる面の組(
surface-raised、1px の枠、影)のままにする。
- 下のタブの帯と左の縦のタブの帯は、ペインと同じ
- 使う範囲
surface-ground、surface-pane、surface-pane-subtle、rounded-pane、rounded-sheet、rounded-control-compactは、コードを動かす画面の外で使わない。- 上の 6 つの名前のユーティリティを、コードを動かす画面のコンポーネントの外で使うと、
check:utilitiesが失敗する。- 対象は、
apps/web/srcの全体と、packages/ui/srcのうちコードを動かす画面のコンポーネントを除いた部分である。 - 使ってよいディレクトリは、チェックのスクリプトに列挙する。
- この規則の原則の ID を、
packages/ui/DESIGN.mdに足す。
- 対象は、
- 間隔
- 記事の埋め込み
- 記事の枠の中で、ペインを 1 つずつ出す配置では、地を出さず、ペインの面を枠いっぱいに置き、角を丸めない。記事の枠と面の縁が、二重の線に見えないようにするためである。枠の上のタブは、ペインの面の上に置き、タブの帯の下の罫だけを引く。
- 高さが 500px 未満の iframe で左の縦のタブにするときは、縦のタブの帯の右に罫を 1 本引き、ペインと分ける。地を出さないと、帯とペインが同じ色の面で続くためである。
- 記事の枠の中でペインを並べる配置の、地と角の出し方は、記事に埋め込む iframe の大きさが決まるまで決めない。記事の段の幅(640px)では、ペインを並べる配置にならない。
承認の条件¶
- ADR-0062 と ADR-0072 を先に承認していること。
- 実装した画面を、ライトとダーク、PC と 375px で撮っていること。撮った画像で、面の縁、hover の面、エディタの背景と
surface-groundの境が見えることを、利用者が確認していること。撮る組には、ダークのドロワー、記事の埋め込み、触る端末の PC の配置(ペインの間 44px)を含める。 - 撮った画像で、仕切りの hover の 2px の線と、8px の幅の中の内側の輪が見えること。
- ペインの中に、名前の欄のほかに
bg-surfaceを直に塗る所が残っていないこと。 - ダークで撮った画像で、利用者が hover の面と無効の面を見分けられること。
- コントラストのチェックに、
surface-ground、surface-pane、surface-pane-subtleの上の文字、border-field、フォーカスの輪の組が入っていること。その組で、文字は 4.5:1 以上、枠と輪は 3:1 以上であること。 - Chrome、Firefox、WebKit で撮った画像で、フォーカスの輪が 6px と 10px の角に沿って引かれていること。
- ハイコントラストのとき、ペインの区切りの 1px の枠が出ること。
Considered Options¶
| 選択肢 | 強み | 弱み |
|---|---|---|
| 採用: 地の上に角の丸い紙の面を重ね、ペインの間を 8px にする(W2) | 直角の線の数が最も減る。生成りの紙を重ねる形が、和紙と墨のサイトの考え方に合う | 角丸の名前が 3 つ増える。仕切りの押せる幅が 2.5.8 に届かない |
| ペインの四方の枠を外し、帯の罫と余白だけで区切る(W1) | ADR-0028 の角を変えない | 帯の罫は残り、利用者が挙げた角ばった見た目が残る |
| VS Code のように、ペインの間を空けず 1px の罫で仕切る | 画面を最も広く使える。仕切りの押せる領域を罫の上に重ねられる | 罫で区切る今の見た目に近く、角ばった見た目が残る |
| 今のまま(W0) | 変更が無い | ペインの間が約 52px 空き、枠と罫が重なる |
Consequences¶
Positive¶
- PC の画面で、ペインの間が約 52px から 8px になり、エディタとプレビューが広くなる。
- ペインの区切りの罫が減り、ペインの中の内容が目に入りやすくなる見込みである。
Negative¶
- コードを動かす画面と、サイトのほかの画面で、操作できる要素の角の丸めが違う。
- 地と面のセマンティックトークンが 3 つ、角丸のテーマ変数が 3 つ増える。
- 記事の埋め込みと、ツールのページで、面の角と地の出し方が違う。