zfb
GitHub リポジトリ

検索したい単語を入力

いつでも検索バーを開ける

トランジション時間

範囲付きのミリ秒値または任意の時間でトランジション時間を設定します。

トランジションにかかる時間を設定します。duration は変化させるプロパティを選ばないため、トランジション系ユーティリティと状態変化を組み合わせます。

クラスと CSS の早見表

クラスの例期待される宣言
duration-150transition-duration: 150ms;
例の設定

すべてのプレビューで spec: 1、reset: "none"、strict モード、spacingUnit: "0.25rem"、空のブレークポイント、defaultTransitionTimingFunction: "ease" を明示します。ボタンは hover または focus-visible で 8px だけ動き、最長の例も 420ms です。prefers-reduced-motion: reduce では自作デモ CSS が時間を 0 にします。

使い方の例

範囲を抑えた時間を比べる

二つのボタンは同じ距離だけ動き、duration-150 と duration-300 で時間だけが変わります。

範囲を抑えた時間を比べる
HTML
<div class="wind-demo-motion"><button type="button" class="wind-demo-trigger transition-transform duration-150 hover:translate-x-[8px] focus-visible:translate-x-[8px]">150ms</button><button type="button" class="wind-demo-trigger transition-transform duration-300 hover:translate-x-[8px] focus-visible:translate-x-[8px]">300ms</button></div>
CSS
@layer zw-reset, zw-tokens, zfb-hi, base, components;
@layer zw-tokens {
  :root {
    --zw-spacing-unit: .25rem;
  }
}
@property --zw-translate-x {
  syntax: "<length-percentage>";
  inherits: false;
  initial-value: 0px;
}
@property --zw-translate-y {
  syntax: "<length-percentage>";
  inherits: false;
  initial-value: 0px;
}
.wind-demo-motion {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 1rem;
  max-width: 38rem;
  color: #24364b;
  font: 15px / 1.5 system-ui, sans-serif;
}

.wind-demo-motion button {
  min-width: 9rem;
  border: 1px solid #526477;
  border-radius: .35rem;
  background: #eef3f8;
  color: inherit;
  padding: .65rem .9rem;
  font: inherit;
  text-align: left;
}

.wind-demo-motion button:focus-visible {
  outline: 3px solid #1670b8;
  outline-offset: 3px;
}

.wind-demo-motion .wind-demo-trigger {
  cursor: pointer;
}

@media (prefers-reduced-motion: reduce) {
  .wind-demo-motion .wind-demo-trigger {
    transition-duration: 0s !important;
  }
}
.transition-transform {
  transition-property: transform,translate,rotate,scale;
  transition-duration: 150ms;
  transition-timing-function: ease;
}
.duration-150 {
  transition-duration: 150ms;
}
.duration-300 {
  transition-duration: 300ms;
}
@media (hover: hover) {
  .hover\:translate-x-\[8px\]:hover {
    --zw-translate-x: 8px;
    translate: var(--zw-translate-x) var(--zw-translate-y);
  }
}
.focus-visible\:translate-x-\[8px\]:focus-visible {
  --zw-translate-x: 8px;
  translate: var(--zw-translate-x) var(--zw-translate-y);
}
この例の設定
{
  "wind": {
    "spec": 1,
    "reset": "none",
    "strict": true,
    "tokens": {
      "spacingUnit": "0.25rem"
    },
    "breakpoints": {},
    "defaultTransitionTimingFunction": "ease",
    "authoredClasses": {
      "wind-demo-motion": true,
      "wind-demo-trigger": true
    },
    "safelist": {
      "docs-preview": [
        "transition-transform",
        "duration-150",
        "hover:translate-x-[8px]",
        "focus-visible:translate-x-[8px]",
        "duration-300"
      ]
    }
  }
}
デモ用の自作 CSS
.wind-demo-motion { display: flex; flex-wrap: wrap; align-items: center; gap: 1rem; max-width: 38rem; color: #24364b; font: 15px/1.5 system-ui, sans-serif; }
.wind-demo-motion button { min-width: 9rem; border: 1px solid #526477; border-radius: 0.35rem; background: #eef3f8; color: inherit; padding: 0.65rem 0.9rem; font: inherit; text-align: left; }
.wind-demo-motion button:focus-visible { outline: 3px solid #1670b8; outline-offset: 3px; }
.wind-demo-motion .wind-demo-trigger { cursor: pointer; }
@media (prefers-reduced-motion: reduce) { .wind-demo-motion .wind-demo-trigger { transition-duration: 0s !important; } }

任意の時間を指定する

duration-[420ms] で個別の時間を指定し、hover と focus-visible で 8px の垂直移動を起こします。

任意の時間を指定する
HTML
<div class="wind-demo-motion"><button type="button" class="wind-demo-trigger transition-transform duration-[420ms] hover:translate-y-[8px] focus-visible:translate-y-[8px]">A one-off 420ms duration</button></div>
CSS
@layer zw-reset, zw-tokens, zfb-hi, base, components;
@layer zw-tokens {
  :root {
    --zw-spacing-unit: .25rem;
  }
}
@property --zw-translate-x {
  syntax: "<length-percentage>";
  inherits: false;
  initial-value: 0px;
}
@property --zw-translate-y {
  syntax: "<length-percentage>";
  inherits: false;
  initial-value: 0px;
}
.wind-demo-motion {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 1rem;
  max-width: 38rem;
  color: #24364b;
  font: 15px / 1.5 system-ui, sans-serif;
}

.wind-demo-motion button {
  min-width: 9rem;
  border: 1px solid #526477;
  border-radius: .35rem;
  background: #eef3f8;
  color: inherit;
  padding: .65rem .9rem;
  font: inherit;
  text-align: left;
}

.wind-demo-motion button:focus-visible {
  outline: 3px solid #1670b8;
  outline-offset: 3px;
}

.wind-demo-motion .wind-demo-trigger {
  cursor: pointer;
}

@media (prefers-reduced-motion: reduce) {
  .wind-demo-motion .wind-demo-trigger {
    transition-duration: 0s !important;
  }
}
.transition-transform {
  transition-property: transform,translate,rotate,scale;
  transition-duration: 150ms;
  transition-timing-function: ease;
}
.duration-\[420ms\] {
  transition-duration: 420ms;
}
@media (hover: hover) {
  .hover\:translate-y-\[8px\]:hover {
    --zw-translate-y: 8px;
    translate: var(--zw-translate-x) var(--zw-translate-y);
  }
}
.focus-visible\:translate-y-\[8px\]:focus-visible {
  --zw-translate-y: 8px;
  translate: var(--zw-translate-x) var(--zw-translate-y);
}
この例の設定
{
  "wind": {
    "spec": 1,
    "reset": "none",
    "strict": true,
    "tokens": {
      "spacingUnit": "0.25rem"
    },
    "breakpoints": {},
    "defaultTransitionTimingFunction": "ease",
    "authoredClasses": {
      "wind-demo-motion": true,
      "wind-demo-trigger": true
    },
    "safelist": {
      "docs-preview": [
        "transition-transform",
        "duration-[420ms]",
        "hover:translate-y-[8px]",
        "focus-visible:translate-y-[8px]"
      ]
    }
  }
}
デモ用の自作 CSS
.wind-demo-motion { display: flex; flex-wrap: wrap; align-items: center; gap: 1rem; max-width: 38rem; color: #24364b; font: 15px/1.5 system-ui, sans-serif; }
.wind-demo-motion button { min-width: 9rem; border: 1px solid #526477; border-radius: 0.35rem; background: #eef3f8; color: inherit; padding: 0.65rem 0.9rem; font: inherit; text-align: left; }
.wind-demo-motion button:focus-visible { outline: 3px solid #1670b8; outline-offset: 3px; }
.wind-demo-motion .wind-demo-trigger { cursor: pointer; }
@media (prefers-reduced-motion: reduce) { .wind-demo-motion .wind-demo-trigger { transition-duration: 0s !important; } }

任意値と名前付きの値

整数の接尾辞は 0 から 60000 までのミリ秒として解釈されるため、duration-300 は 300ms、duration-0 は補間なしです。duration-[420ms] なら個別の CSS 時間を指定できます。名前付きの時間スケールはありません。150ms の初期値はトランジション系ユーティリティが設定し、duration-* を追加すると上書きします。

関連ガイド: ユーティリティの文法 · バリアント

カタログの詳細

duration

フィールド値
カタログ識別子v1.duration
クラスパターンduration-<suffix>
文法{"acceptedKinds":["integer","arbitrary"],"arbitraryProperty":"transition-duration","allowsFractionSlash":false,"allowsColorOpacity":false}
受け入れる値この項目には独立した値の定義がありません。
トークンカテゴリトークンカテゴリなし
負の値の規則forbidden
競合グループと順位duration (36)
並び順の順位0
セレクタの形ownElement
仕様バージョン1
出力するプロパティtransition-duration

受け入れる値

この項目には独立した値の定義がありません。

宣言テンプレート

プロパティ値の種類固定値
transition-durationresolvednull

カタログの例

クラスの例期待される宣言
duration-200transition-duration: 200ms

Revision History

作成更新