ساخت ساعت دیجیتال با CSS
ساعت دیجیتال یکی از عناصر متداول در صفحات وب و داشبوردهاست. در این مقاله روشهای عملی برای طراحی و پیادهسازی یک ساعت دیجیتال زیبا و قابلاستفاده را با تمرکز بر CSS (و در صورت نیاز JavaScript برای همگامسازی زمان) توضیح میدهیم. همچنین نمونهای از پیادهسازی صرفاً با CSS برای حالت تزئینی آورده شده است و نکات بهینهسازی و دسترسپذیری را بررسی میکنیم.
چرا CSS مهم است؟
CSS نقش اصلی را در ظاهر، انیمیشنها و واکنشپذیری ساعت ایفا میکند. برای نمایش زمان زنده به JavaScript نیاز داریم؛ اما با CSS میتوانیم ظاهر هفتتکه، افکت نور، انیمیشن چشمک زدن نقطهها و پاسخگویی در موبایل را پیاده کنیم.
مثال کامل: ساعت دیجیتال با HTML، CSS و JavaScript
<div class="clock">
<span class="time" id="hours">00</span>
<span class="sep">:</span>
<span class="time" id="minutes">00</span>
<span class="sep" id="blink">:</span>
<span class="time" id="seconds">00</span>
</div>
<style>
:root{
--bg: #0f1724;
--panel: #0b1220;
--accent: #39ff14;
--muted: rgba(255,255,255,0.12);
}
.clock{
display:inline-flex;
gap:0.6rem;
padding:1rem 1.2rem;
background:linear-gradient(135deg,var(--panel), #07101a);
border-radius:12px;
box-shadow:0 6px 20px rgba(2,6,23,0.7), inset 0 1px 0 var(--muted);
color:var(--accent);
font-family: "Courier New", Courier, monospace;
font-weight:700;
font-size:2rem;
align-items:center;
}
.time{
min-width:2.2ch;
text-align:center;
letter-spacing:0.05em;
padding:0.2rem 0.35rem;
background:rgba(0,0,0,0.15);
border-radius:6px;
box-shadow:0 2px 6px rgba(0,0,0,0.6), inset 0 -2px 10px rgba(255,255,255,0.02);
}
.sep{
opacity:0.95;
transition:opacity 0.2s;
}
#blink{
animation: blink 1s steps(1,end) infinite;
}
@keyframes blink{
50%{ opacity:0; }
}
@media (max-width:420px){
.clock{ font-size:1.4rem; padding:0.6rem; gap:0.35rem; }
}
</style>
<script>
function pad(n){ return n < 10 ? '0'+n : n; }
function updateClock(){
const now = new Date();
document.getElementById('hours').textContent = pad(now.getHours());
document.getElementById('minutes').textContent = pad(now.getMinutes());
document.getElementById('seconds').textContent = pad(now.getSeconds());
}
setInterval(updateClock, 1000);
updateClock();
</script>توضیح: این قطعه کد HTML یک ساختار ساده برای ساعت دارد (سه فیلد: ساعت، دقیقه، ثانیه و جداکنندهها). CSS ظاهر را با پسزمینه تیره، فونت مونواسپیس و جلوهای شبیه نمایشگر دیجیتال میسازد. کلاس #blink با انیمیشن keyframes باعث چشمکزدن دونقطه در ثانیه میشود. اسکریپت JavaScript هر ثانیه زمان را خوانده و مقادیر عناصر را با فرمت دو رقمی بهروزرسانی میکند. این ترکیب بهترین تعادل بین دقت زمانی (با JS) و استایل قوی (با CSS) را فراهم میکند.
نسخهٔ صرفاً CSS (تزئینی)
<div class="fake-clock">
<span class="digit">1</span>
<span class="digit">2</span>
<span class="colon">:</span>
<span class="digit">3</span>
<span class="digit">4</span>
</div>
<style>
.fake-clock{
font-family:monospace;
font-size:3rem;
color:#00e676;
background:#021018;
padding:0.4rem 0.6rem;
border-radius:8px;
display:inline-flex;
gap:0.2rem;
align-items:center;
}
.colon{
animation: pulse 1s infinite;
}
@keyframes pulse{
0%,100%{ opacity:1; transform:scaleY(1); }
50%{ opacity:0.1; transform:scaleY(0.9); }
}
</style>توضیح: این نمونه صرفاً تزئینی است و زمان واقعی را نشان نمیدهد. با CSS میتوان افکت چشمکزدن یا پالس روی دونقطه ایجاد کرد، اما بدون JavaScript دسترسی به زمان سیستم ممکن نیست. این نسخه برای نمایش نمونه یا مکانهایی که نیازی به همگامسازی ندارید مناسب است.
نکات فنی و بهترین روشها
- دقت زمان: برای همگامسازی با زمان سیستم و نمایش ثانیهها از JavaScript استفاده کنید. setInterval با بازهٔ 1000ms کافی است اما برای دقت بالاتر میتوان روی setTimeout با محاسبه اختلاف تا شروع ثانیه بعدی استفاده کرد.
- دسترسپذیری: حتماً برای کاربران صفحهخوان متن قابلخواندن فراهم کنید (مثلاً aria-live=”polite” یا مقدار متنی پنهان برای خواندن زمان).
- واکنشپذیری: از واحدهای نسبی و media queries برای اندازه در موبایل استفاده کنید.
- عملکرد: انیمیشنهای CSS را با خواص بلادرنگ مانند transform و opacity انجام دهید تا به پردازنده فشار نیاید.
- فارمتهای مختلف: برای نمایش 12 یا 24 ساعته، تعیین AM/PM و منطقهٔ زمانی میتوانید ورودی یا تنظیمات کاربر را در JavaScript اضافه کنید.
جدول مقایسه — CSS فقط در برابر ترکیب CSS+JS
| ویژگی | CSS فقط | CSS + JS |
|---|---|---|
| نمایش زمان واقعی | خیر | بله |
| انیمیشن و ظاهر | قوی (تزئینی) | قوی |
| پیچیدگی پیادهسازی | کم | متوسط |
بهینهسازی کد JavaScript برای دقت بیشتر
// Use timeout to align with system clock ticks
function updateAlignedClock(){
const now = new Date();
// update UI
// ...
// calculate ms until next full second
const delay = 1000 - now.getMilliseconds();
setTimeout(updateAlignedClock, delay);
}
updateAlignedClock();توضیح: در این الگو بهجای setInterval مستقیم، از setTimeout استفاده میشود تا هر بار با اختلاف میلیثانیهٔ فعلی هماهنگ شویم و در نتیجه چشمک و بهروزرسانی در شروع هر ثانیه دقیقتر انجام میشود.
جمعبندی و توصیههای نهایی
اگر هدف نمایش زمان واقعی و دقیق است از JavaScript برای خواندن زمان و از CSS برای ساخت ظاهر و انیمیشن استفاده کنید. برای المانهای تزئینی یا طرحهای ثابت میتوانید از CSS-only بهره ببرید. همیشه دسترسپذیری، بهینهسازی انیمیشن و واکنشپذیری را در نظر بگیرید تا تجربهٔ کاربری دلپذیر و قابلدسترس ایجاد شود.
آیا این مطلب برای شما مفید بود ؟




