この記事は最終更新日から2年以上経過しています。

CSSで時計のアイコンを動かす

公開日:

更新日:

スタッフブログ

こんにちは。ましじめの田村です。

CSSで時計のアイコンと動きをつけたい場合がありました。
その場合次のようなコードで実現出来そうです。

表示例

コード

is-clock--time1 - 12で時間の調整が可能です。

html

 <div class="clock is-clock--time5">
  <span class="clock__hands"></span>
</div> 

css


.clock {
    display: inline-block;
    top: 0.3em;
    position: relative;
    border-radius: 50%;
    border: 2px solid #000;
    width: 40px;
    height: 40px;
}

.clock .clock__hands {
    position: absolute;
    z-index: 20;
    top: 50%;
    left: 50%;
    margin-top: -2px;
    margin-left: -1px;
    width: 2px;
    height: 10px;
    background: #000;
    border-radius: 2px;
    transform-origin: 1px 1px;
    transform: rotate(450deg);
}

.clock:hover .clock__hands {
    animation: clock 20s linear 0s infinite;
    transform-origin: 1px 1px;
}

.clock .clock__hands::after {
    content: '';
    position: absolute;
    top: 0;
    left: 0px;
    width: 2px;
    height: 14px;
    background: #000;
    border-radius: 2px;
    transform-origin: 1px 1px;
    transform: rotate(450deg);
}

.clock:hover .clock__hands::after {
    animation: clock 1s linear 0s infinite;
    transform-origin: 1px 1px;
}

.is-clock--time1 .clock__hands {
    transform: rotate(210deg);
}

.is-clock--time2 .clock__hands {
    transform: rotate(240deg);
}

.is-clock--time3 .clock__hands {
    transform: rotate(270deg);
}

.is-clock--time4 .clock__hands {
    transform: rotate(300deg);
}

.is-clock--time5 .clock__hands {
    transform: rotate(330deg);
}

.is-clock--time6 .clock__hands {
    transform: rotate(360deg);
}

.is-clock--time7 .clock__hands {
    transform: rotate(390deg);
}

.is-clock--time8 .clock__hands {
    transform: rotate(420deg);
}

.is-clock--time9 .clock__hands {
    transform: rotate(450deg);
}

.is-clock--time10 .clock__hands {
    transform: rotate(480deg);
}

.is-clock--time11 .clock__hands {
    transform: rotate(510deg);
}

.is-clock--time12 .clock__hands {
    transform: rotate(540deg);
}

.is-clock--time1 .clock__hands::after {
    transform: rotate(690deg);
}

.is-clock--time2 .clock__hands::after {
    transform: rotate(660deg);
}

.is-clock--time3 .clock__hands::after {
    transform: rotate(630deg);
}

.is-clock--time4 .clock__hands::after {
    transform: rotate(600deg);
}

.is-clock--time5 .clock__hands::after {
    transform: rotate(570deg);
}

.is-clock--time6 .clock__hands::after {
    transform: rotate(540deg);
}

.is-clock--time7 .clock__hands::after {
    transform: rotate(510deg);
}

.is-clock--time8 .clock__hands::after {
    transform: rotate(480deg);
}

.is-clock--time9 .clock__hands::after {
    transform: rotate(450deg);
}

.is-clock--time10 .clock__hands::after {
    transform: rotate(420deg);
}

.is-clock--time11 .clock__hands::after {
    transform: rotate(390deg);
}

.is-clock--time12 .clock__hands::after {
    transform: rotate(360deg);
}

@-webkit-keyframes clock {
    from {
        transform: rotate(-40deg);
    }
    to {
        transform: rotate(320deg);
    }
}

@keyframes clock {
    from {
        transform: rotate(-40deg);
    }
    to {
        transform: rotate(320deg);
    }
}

以上「CSSで時計のアイコンを動かす」でした。
CSSで似た動きを作りたい場合参考にしてみてください。

この記事をシェアする

関連記事

この記事のハッシュタグ #CSS から関連する記事を表示しています。

CSSでコマ送りのように動きを切り替えるアニメーション

こんにちは。田村です。 CSSアニメーションで、コマ送りのような「カクカク」と動きを切り替えるアニメーションを作りたい場合がありました。 そんなときはsteps() 関数を使うと実現可能です。 steps() とは? steps() は、CSSアニメーションの animation-timing-function プロパティで使われる関数の一つです。 通常のアニメーションが滑らかに動くのに対し、steps() を使うと 「段階的に進むアニメーション」 を作ることができます。 どんな場面で使えるのか? スプライトアニメーション 1枚の画像に複数のフレームを描き、steps() を使って特定のフレームごとに切り替えることができます。 コマ送りアニメーション 動画を再現するようなアニメーションをCSSで実現できます。 進行状況を表現 プログレスバーなど進行状況の表示に使用できます。 基本的な使い方 steps() 関数には、2つの主要な引数があります。 steps(段階数, タイミング) 段階数 アニメーションを何段階に分割するかを指定します。 steps(4) → 4段階の動き タイミング jump-none 0%と100%の状態を表示して間は均等に埋める jump-start / start コマの最初に動くので開始時0%の状態は見えない jump-end /end コマの最後に動くので終了時100%の状態が見えない jump-both startとendの動きをして間を埋めるので0%と100%の状態が見えない .element { /*アニメーションを4段階に分けて、各ステップが終了後に切り替わる。*/ animation: example 4s steps(4, end) infinite; } @keyframes example { from { background-position: 0 0; } to { background-position: -400px 0; } } まとめ steps()関数は段階的な動きが必要なアニメーションに利用できます。 また、start と end の使い分けで、タイミングを調整できます。 スプライトアニメーションやプログレスバー、コマ送りなど、幅広い用途に活用可能ですのでぜひ試してみてださい!

スタッフブログ

ユーザーの設定をCSSアニメーションに反映させる

こんにちは。田村です。 CSSアニメーションはリッチな動きが表現でき便利ですがユーザーによってはアニメーションをオフにしたいということがあります。 OS側で「動きをへらす」という設定があり、これをCSS側で判断したい場合はありました。 prefers-reduced-motion とは? prefers-reduced-motion は、ユーザーのOSやブラウザの設定に基づいて、動きの多いアニメーションやエフェクトを制御するためのCSSメディアクエリです。 OSの設定で「動きを減らす」という設定が提供されており、この設定が有効になっているユーザーに対し、アニメーションを軽減するスタイルを適用できます。 次のように読むそうです。 prefers-reduced-motion(プリファーズ・リデュースド・モーション) prefers(プリファーズ):好む reduced(リデュースド):減少した motion(モーション):動き どんな場面で使えるのか? 動きが苦手なユーザーへの配慮 激しいアニメーションや過剰な動きを好まないユーザーに快適なユーザー体験を提供できます。 アクセシビリティ向上 WCAGの達成基準にも含まれています。 「達成基準 2.3.3: インタラクションによるアニメーションを理解する」 基本的な使い方 prefers-reduced-motion は、CSSのメディアクエリとして以下のように使います。 /* 通常時のスタイル */ .animated-box { animation: bounce 2s infinite; } /* 動きを抑える設定の場合 */ @media (prefers-reduced-motion: reduce) { .animated-box { animation: none; } } まとめ prefers-reduced-motion は、ユーザーが動きを減らす設定をしている場合に、アニメーションを無効化または軽減できるCSSメディアクエリです。 動きに敏感なユーザーにも優しい動きを提供し、アクセシビリティを向上することができます。

スタッフブログ