このページの中身

部品がトークンに追従する

決めたトークンで、ボタン・入力欄・カード・表・警告など8つの部品が一斉に張り替わる。完成形の :root と用途の CSS を持ち帰る。参考にした作業面: Radix Themes Playground。

つまみ#

この面に自分のつまみはありません。ほかの5面で決めた値(URL のクエリ)で、下の部品が一斉に張り替わります。値を変えるときは下の帯から各面へ。

見本#

持ち帰る#

:root {
  --color-bg: #fbfaf8;
  --color-surface: #f3efe8;
  --color-text: #1c1a17;
  --color-text-muted: #6f6a62;
  --color-border: #d8d2c7;
  --color-accent: #b4713a;
  --color-accent-text: #95591c;
  --color-on-accent: #ffffff;
  --color-danger: #a2382a;
  --color-on-danger: #ffffff;
  --color-focus: var(--color-accent-text);
  --space-1: 4px;
  --space-2: 8px;
  --space-3: 12px;
  --space-4: 16px;
  --space-5: 24px;
  --space-6: 32px;
  --space-7: 48px;
  --space-8: 64px;
  --space-9: 96px;
  --space-10: 128px;
  --text-sm: 0.8125rem;
  --text-base: 1rem;
  --text-lg: 1.1875rem;
  --text-xl: 1.5rem;
  --text-2xl: 2.25rem;
  --leading-body: 1.9;
  --leading-heading: 1.35;
  --dur-fast: 120ms;
  --dur-base: 240ms;
  --dur-slow: 420ms;
  --ease-out: cubic-bezier(0.16, 1, 0.3, 1);
  --ease-in: cubic-bezier(0.7, 0, 0.84, 0);
  --page: 80rem;
  --gutter: var(--space-6);
  --radius: 2px;
  --shadow-1: 0 1px 2px hsl(40 20% 20% / 0.08), 0 2px 4px hsl(40 20% 20% / 0.05);
  --shadow-2: 0 1px 2px hsl(40 20% 20% / 0.08), 0 2px 4px hsl(40 20% 20% / 0.06), 0 6px 12px hsl(40 20% 20% / 0.05);
  --shadow-3: 0 2px 4px hsl(40 20% 20% / 0.08), 0 6px 12px hsl(40 20% 20% / 0.06), 0 14px 28px hsl(40 20% 20% / 0.05), 0 28px 56px hsl(40 20% 20% / 0.04);
}
@media (prefers-color-scheme: dark) {
  :root {
    --color-bg: #171614;
    --color-surface: #201e1b;
    --color-text: #e9e6e1;
    --color-text-muted: #a49d93;
    --color-border: #3b3833;
    --color-accent: #d99356;
    --color-accent-text: #d99356;
    --color-on-accent: #171614;
    --color-danger: #d4705f;
    --color-on-danger: #171614;
    --shadow-1: 0 1px 2px hsl(40 20% 4% / 0.4);
    --shadow-2: 0 2px 6px hsl(40 20% 4% / 0.45);
    --shadow-3: 0 6px 18px hsl(40 20% 4% / 0.5);
  }
}

用途の CSS

セレクタで出るもの。勾配のブロックと動きの場面、動きを減らす設定の分岐。

/* 勾配は bench/gradient.html で決めると、ここに入ります */
/* 入る。画面に現れるもの */
.enter { opacity: 0; transform: translateY(12px); }
.enter.is-on { opacity: 1; transform: none;
  transition: opacity var(--dur-base) var(--ease-out), transform var(--dur-base) var(--ease-out); }
/* 出る。入りより短く */
.leave.is-on { opacity: 0; transform: translateY(calc(12px * -1));
  transition: opacity var(--dur-fast) var(--ease-in), transform var(--dur-fast) var(--ease-in); }
/* 位置が移る */
.move { transition: transform var(--dur-slow) cubic-bezier(0.65,0,0.35,1); }
.move.is-on { transform: translateX(calc(12px * 4)); }
/* 一覧の順次表示。要素ごとに --i を振る */
.enter[style*="--i"] { transition-delay: calc(var(--i) * 40ms); }
@media (prefers-reduced-motion: reduce) {
  .enter, .leave, .move { transition: none; }
  .enter { opacity: 1; transform: none; }
}

借りた部品#

貼るのはパターン集から。ここでは張り替わるのを見るだけです。

つまみは JavaScript で動きます。無効の場合は、上の見本は既定の値で描かれ、コピー欄には出発点のCSSと同じ既定の値が入っています。

この資料は、Webサイトを作るときに引くためのものです。 何のために作ったか。作っているのは AK²Lab。