CSS と JavaScript を使ってアナログ時計を作成する方法
ウェブ開発において、時計の作成は学習に最適なプロジェクトの一つです。今回は、CSS と JavaScript を使ってシンプルなアナログ時計を作成する方法を解説します。以下の手順を追って、デザインから機能までを実装していきます。
1. 必要な HTML の構造
まずは、基本的な HTML を作成します。時計の枠と、時針、分針、秒針をそれぞれ作成するための要素を用意します。

htmlhtml>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>アナログ時計title>
<link rel="stylesheet" href="styles.css">
head>
<body>
<div class="clock">
<div class="hour-hand">div>
<div class="minute-hand">div>
<div class="second-hand">div>
<div class="center-point">div>
div>
<script src="script.js">script>
body>
html>
この HTML では、時計を表示するための div.clock
を中心に、時針、分針、秒針の div
要素を配置しています。
2. CSS のスタイリング
次に、時計の見た目を作るための CSS を設定します。ここでは、時計の形、針のスタイル、そして針が動くアニメーションを設定します。
css/* 基本のスタイル */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
background-color: #f0f0f0;
}
.clock {
position: relative;
width: 300px;
height: 300px;
border: 10px solid #333;
border-radius: 50%;
background-color: #fff;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
}
/* 中央の点 */
.center-point {
position: absolute;
width: 10px;
height: 10px;
background-color: #333;
border-radius: 50%;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
/* 針の共通設定 */
.clock div {
position: absolute;
top: 50%;
left: 50%;
background-color: #333;
transform-origin: 50% 100%;
transition: all 0.05s;
}
/* 時針 */
.hour-hand {
width: 8px;
height: 70px;
transform: translateX(-50%) translateY(-100%) rotate(90deg);
}
/* 分針 */
.minute-hand {
width: 6px;
height: 90px;
transform: translateX(-50%) translateY(-100%) rotate(180deg);
}
/* 秒針 */
.second-hand {
width: 2px;
height: 100px;
background-color: red;
transform: translateX(-50%) translateY(-100%) rotate(270deg);
}
この CSS では、時計の枠や針のスタイル、中心の点を設定しました。transform-origin
を使って、針が中心を基点に回転するようにしています。
3. JavaScript で時刻を動的に設定
次に、JavaScript を使って時計の針を動的に回転させるロジックを追加します。setInterval
を使って、秒ごとに時計を更新する仕組みを作ります。
javascript// 現在時刻を取得して針を回転させる関数
function setClock() {
const now = new Date();
const hour = now.getHours();
const minute = now.getMinutes();
const second = now.getSeconds();
// 時針、分針、秒針の角度を計算
const hourDeg = (hour % 12) * 30 + (minute / 60) * 30; // 1時間 = 30度
const minuteDeg = minute * 6 + (second / 60) * 6; // 1分 = 6度
const secondDeg = second * 6; // 1秒 = 6度
// 各針の回転を設定
document.querySelector('.hour-hand').style.transform = `translateX(-50%) translateY(-100%) rotate(${hourDeg}deg)`;
document.querySelector('.minute-hand').style.transform = `translateX(-50%) translateY(-100%) rotate(${minuteDeg}deg)`;
document.querySelector('.second-hand').style.transform = `translateX(-50%) translateY(-100%) rotate(${secondDeg}deg)`;
}
// 時計を毎秒更新
setInterval(setClock, 1000);
この JavaScript のコードでは、setInterval
を使って、毎秒時計を更新し、現在の時刻に合わせて針を回転させています。getHours()
, getMinutes()
, getSeconds()
を使って現在の時刻を取得し、各針の角度を計算しています。
4. 時計の動作確認
これで、ブラウザでこの HTML ファイルを開くと、時計の針が実際に動き始めるのを確認できます。JavaScript が時刻をリアルタイムで更新し、CSS が時計のデザインを美しく仕上げます。
まとめ
このチュートリアルでは、HTML、CSS、そして JavaScript を組み合わせて、シンプルなアナログ時計を作成しました。CSS で時計のデザインを整え、JavaScript で時刻を動的に更新することで、リアルタイムで動く時計を作成することができました。
この基本的な時計の作り方を応用すれば、デジタル時計やその他のインタラクティブな時計を作成することも可能です。ぜひ、コードをカスタマイズして自分だけの時計を作成してみてください。