OmochiXを検索

Esc で閉じる

UIパーツの動き #009

トグルスイッチ Toggle switch

つまみが滑ってON/OFFが切り替わる

スイッチのつまみが右へ滑り、同時に背景がアクセントカラーに変わります。1.6秒ごとにON/OFFを繰り返します。

調整する

値を変えるとプレビューに反映され、「プロンプトをコピー」「コードをコピー」も調整後の内容になります。

AIへの頼み方

設定画面のトグルスイッチに切り替えアニメーションを付けて。つまみは少し跳ねる感じで0.25秒。

動きの仕様

  • つまみは transform: translateX で移動(leftを使わない)
  • 移動は約0.25秒、cubic-bezier(.34,1.4,.64,1) で少し跳ねる
  • トラックの背景色は同時にグレー→アクセントカラーへ
  • 実装は <input type="checkbox"> + label にして、キーボードとスクリーンリーダーで操作できるようにする

使いどころ

設定のON/OFF、通知の切り替え、ダークモードスイッチ。

コピーされるプロンプト全文を見る
「トグルスイッチ(Toggle switch)」の動きを実装してください。
OmochiX Learn の動く見本 #009(UIパーツの動き)です。

頼み方の例: 設定画面のトグルスイッチに切り替えアニメーションを付けて。つまみは少し跳ねる感じで0.25秒。
どんな動きか: つまみが滑ってON/OFFが切り替わる
見本で起きること: スイッチのつまみが右へ滑り、同時に背景がアクセントカラーに変わります。1.6秒ごとにON/OFFを繰り返します。
仕様:
- つまみは transform: translateX で移動(leftを使わない)
- 移動は約0.25秒、cubic-bezier(.34,1.4,.64,1) で少し跳ねる
- トラックの背景色は同時にグレー→アクセントカラーへ
- 実装は <input type="checkbox"> + label にして、キーボードとスクリーンリーダーで操作できるようにする
使いどころ: 設定のON/OFF、通知の切り替え、ダークモードスイッチ。
調整した値:
- OFF→ON→OFFの1周期は3.2s(既定)
- ONの色: #6e4bff(既定)
- ノブの弾み方は「少し」(既定)

実装の条件:
- HTML / CSS(必要なら素のJavaScript)で、外部ライブラリは使わない
- 見本の形・タイミング・イージングの数値はそのまま使い、文字・色・素材だけ今作っているものに合わせる
- prefers-reduced-motion: reduce の環境では動きを止めるか最小限にする
- 使った技術: CSS

見本(動くプレビューと参考コード): https://omochix.com/learn/motion/toggle-switch/

コード

プレビューで動いているものと同じコードです。HTMLに貼り付ければそのまま動きます。

HTML / CSS / JavaScript
<!-- トグルスイッチ (Toggle switch) | OmochiX Learn 動く見本 #009 | https://omochix.com/learn/motion/toggle-switch/ -->

<style>
.tg{position:relative;width:84px;height:46px;border-radius:23px;background:var(--line);animation:tg-track var(--p-cycle,3.2s) ease-in-out infinite}
.tg__knob{position:absolute;top:4px;left:4px;width:38px;height:38px;border-radius:50%;background:#fff;box-shadow:0 2px 6px rgba(0,0,0,.25);animation:tg-knob var(--p-cycle,3.2s) var(--p-bounce,cubic-bezier(.34,1.4,.64,1)) infinite}
@keyframes tg-track{0%,40%{background:var(--line)}50%,90%{background:var(--p-color,var(--primary))}100%{background:var(--line)}}
@keyframes tg-knob{0%,40%{transform:translateX(0)}50%,90%{transform:translateX(38px)}100%{transform:translateX(0)}}
</style>

<div class="tg" role="img" aria-label="トグルスイッチ"><span class="tg__knob"></span></div>