Демо
  • 5,29 КБ
  • CSS, HTML, JS
  • Часы
  • аналоговые
  • Лицензия MIT
HTML
<div class="clock">
    <div class="middle"></div>
    <div class="clock-face">
        <div class="dots">
            <div class="dot"></div>
            <div class="dot"></div>
            <div class="dot"></div>
            <div class="dot"></div>
            <div class="dot"></div>
            <div class="dot"></div>
        </div>
        <div class="hand hour-hand"></div>
        <div class="hand min-hand"></div>
        <div class="hand second-hand"></div>
    </div>
</div>
CSS
.clock {
    position: relative;
    width: 30rem;
    height: 30rem;
    margin: 3.125rem auto;
    padding: 2rem;
    border: 0.625rem solid #f5f5f5;
    -webkit-border-radius: 50%;
    -moz-border-radius: 50%;
    border-radius: 50%;
}
.clock .middle {
    position: absolute;
    top: 50%;
    left: 50%;
    width: 3rem;
    height: 3rem;
    background-color: #f5f5f5;
    -webkit-border-radius: 50%;
    -moz-border-radius: 50%;
    border-radius: 50%;
    -webkit-box-shadow: 0 0 1.25rem rgba(51, 51, 51, 0.4);
    -moz-box-shadow: 0 0 1.25rem rgba(51, 51, 51, 0.4);
    box-shadow: 0 0 1.25rem rgba(51, 51, 51, 0.4);
    -webkit-transform: translate(-50%, -50%);
    -moz-transform: translate(-50%, -50%);
    -o-transform: translate(-50%, -50%);
    transform: translate(-50%, -50%);
    z-index: 9;
}
.clock .clock-face {
    position: relative;
    width: 100%;
    height: 100%;
    -webkit-transform: translateY(-3px);
    -moz-transform: translateY(-3px);
    -o-transform: translateY(-3px);
    transform: translateY(-3px);
    /* учитывать высоту стрелок часов */
}
.clock .clock-face .dots {
    position: absolute;
    content: "";
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    -webkit-border-radius: 50%;
    -moz-border-radius: 50%;
    border-radius: 50%;
}
.clock .clock-face .dots .dot {
    position: absolute;
    top: -webkit-calc(50% - 0.1875rem);
    top: -moz-calc(50% - 0.1875rem);
    top: calc(50% - 0.1875rem);
    width: 100%;
    height: 0.625rem;
}
.clock .clock-face .dots .dot:before,
.clock .clock-face .dots .dot:after {
    position: absolute;
    content: "";
    width: 0.625rem;
    height: 0.625rem;
    background-color: #f5f5f5;
    -webkit-border-radius: 50%;
    -moz-border-radius: 50%;
    border-radius: 50%;
}
.clock .clock-face .dots .dot:before {
    left: 0;
}
.clock .clock-face .dots .dot:after {
    right: 0;
}
.clock .clock-face .dots .dot:nth-of-type(1) {
    -webkit-transform: rotate(0deg);
    -moz-transform: rotate(0deg);
    -o-transform: rotate(0deg);
    transform: rotate(0deg);
}
.clock .clock-face .dots .dot:nth-of-type(2) {
    -webkit-transform: rotate(30deg);
    -moz-transform: rotate(30deg);
    -o-transform: rotate(30deg);
    transform: rotate(30deg);
}
.clock .clock-face .dots .dot:nth-of-type(3) {
    -webkit-transform: rotate(60deg);
    -moz-transform: rotate(60deg);
    -o-transform: rotate(60deg);
    transform: rotate(60deg);
}
.clock .clock-face .dots .dot:nth-of-type(4) {
    -webkit-transform: rotate(90deg);
    -moz-transform: rotate(90deg);
    -o-transform: rotate(90deg);
    transform: rotate(90deg);
}
.clock .clock-face .dots .dot:nth-of-type(5) {
    -webkit-transform: rotate(120deg);
    -moz-transform: rotate(120deg);
    -o-transform: rotate(120deg);
    transform: rotate(120deg);
}
.clock .clock-face .dots .dot:nth-of-type(6) {
    -webkit-transform: rotate(150deg);
    -moz-transform: rotate(150deg);
    -o-transform: rotate(150deg);
    transform: rotate(150deg);
}
.clock .clock-face .hand {
    position: absolute;
    top: 50%;
    width: 50%;
    height: 0.375rem;
    background: #333;
    -webkit-border-radius: 6.1875rem;
    -moz-border-radius: 6.1875rem;
    border-radius: 6.1875rem;
    -webkit-transform-origin: 100%;
    -moz-transform-origin: 100%;
    -o-transform-origin: 100%;
    transform-origin: 100%;
    -webkit-transform: rotate(90deg);
    -moz-transform: rotate(90deg);
    -o-transform: rotate(90deg);
    transform: rotate(90deg);
    -webkit-transition: all 0.05s;
    -o-transition: all 0.05s;
    -moz-transition: all 0.05s;
    transition: all 0.05s;
    -webkit-transition-timing-function: cubic-bezier(0.1, 2.7, 0.58, 1);
    -moz-transition-timing-function: cubic-bezier(0.1, 2.7, 0.58, 1);
    -o-transition-timing-function: cubic-bezier(0.1, 2.7, 0.58, 1);
    transition-timing-function: cubic-bezier(0.1, 2.7, 0.58, 1);
}
.clock .clock-face .hand.second-hand {
    background: #e74c3c;
}
.clock .clock-face .hand.hour-hand {
    left: 10%;
    width: 40%;
}
JS
const secondHand = document.querySelector('.second-hand');
const minuteHand = document.querySelector('.min-hand');
const hourHand = document.querySelector('.hour-hand');

function setDate() {
	const now = new Date();
	const seconds = now.getSeconds();
	const secondsDegrees = ((seconds / 60) * 360) + 90;
	secondHand.style.transform = `rotate(${secondsDegrees}deg)`;

	const minutes = now.getMinutes();
	const minutesDegrees = ((minutes / 60) * 360) + 90;
	minuteHand.style.transform = `rotate(${minutesDegrees}deg)`;

	const hours = now.getHours();
	const hoursDegrees = ((hours / 12) * 360) + 90;
	hourHand.style.transform = `rotate(${hoursDegrees}deg)`;
}

setInterval(setDate,1000);

Давайте разберём код, который создаёт на веб-странице аналоговые часы. Это увлекательное сочетание HTML, CSS и JavaScript, где каждый язык вносит свой вклад в создание живых часов на вашем экране.

Начнём с HTML. Здесь задаётся структура часов: элементы для циферблата, точек, обозначающих часы, и стрелок для секунд, минут и часов. Это как бы каркас наших часов, где каждая деталь находится на своём месте.

Переходим к CSS. Именно здесь наши часы обретают свой внешний вид. Мы стилизуем их, чтобы они выглядели как настоящие аналоговые часы, с круглым циферблатом и стрелками. CSS отвечает за точное позиционирование каждого элемента, чтобы стрелки могли плавно перемещаться, показывая время. Стилизация также делает часы привлекательными, с подходящими цветами и размерами.

Наконец, JavaScript вдыхает в часы жизнь. Скрипт определяет текущее время и двигает стрелки часов в соответствии с реальным временем — секундами, минутами и часами. Это как сердцебиение наших часов, обеспечивающее их работу в унисон с временем. Скрипт непрерывно обновляет время, благодаря чему наши часы всегда идут точно.

Таким образом, этот кусок кода является идеальным примером того, как HTML, CSS и JavaScript могут совместно создать не только функциональный, но и стильный объект — аналоговые часы, которые не только показывают время, но и делают это с элегантностью.

Меню