Как сделать стрелки для квадратных аналоговых часов?
Я пытаюсь сделать аналоговые часы, но квадратные. Проблема в создании стрелок. Ни в какую не получается создать стрелки.
#card7 {
width: 500px;
height: 500px;
background-color: #C4C4C4;
position: absolute;
left: 0;
top: 0;
display: block;
}
.line {
width: 100%;
height: 35px;
background-color: #0000AA;
font-size: 20px;
display: flex;
}
.turn {
width: 40px;
height: 35px;
background-color: #C4C4C4;
text-align: center;
flex-direction: column;
justify-content: center;
border: 2px solid Black;
display: flex;
}
.title {
flex-direction: column;
justify-content: center;
width: 100%;
text-align: center;
color: #fff;
display: flex;
}
.close {
width: 40px;
height: 35px;
background-color: #C4C4C4;
text-align: center;
flex-direction: column;
justify-content: center;
border: 2px solid Black;
display: flex;
box-shadow: inset 2px 2px 0px 0px #FFFFFF, inset -3px -3px 0px 0px #939393;
}
#clockFace {
width: 490px;
height: 460px;
margin: 7px 5px;
background-color: #C4C4C4;
box-shadow: inset 0px 0px 0px 8px rgba(255, 0, 0, 1), 0px 0px 0px 5px rgba(149, 1, 1, 1), inset 0px 0px 0px 15px rgba(149, 1, 1, 1);
border-radius: 5px;
display: flex;
justify-content: center;
align-items: center;
position: relative;
}
#clockFace::before {
content: '';
position: absolute;
width: 8px;
height: 8px;
text-align: center;
background: #000;
}
#clockFace div {
position: absolute;
inset: 20px;
text-align: center;
display: inline-block;
transform: rotate(calc(30deg * var(--i)));
}
#clockFace div p {
display: inline-block;
transform: rotate(calc(-30deg * var(--i)));
}
.hour-hand {
width: 8px;
height: 20px;
background: seagreen;
}
.minute-hand {
width: 8px;
height: 140px;
background: seagreen;
}
.second-hand {
width: 8px;
height: 160px;
background: seagreen;
}
.hour-hand,
.minute-hand,
.second-hand {
position: absolute;
bottom: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
<div id="card7">
<div class="line">
<div class="turn">➖</div>
<p class="title">Часы</p>
<div class="close">▲</div>
</div>
<!--Часы-->
<div id="clockFace">
<div style="--i:1;">
<p>1</p>
</div>
<div style="--i:2;">
<p>2</p>
</div>
<div style="--i:3;">
<p>3</p>
</div>
<div style="--i:4;">
<p>4</p>
</div>
<div style="--i:5;">
<p>5</p>
</div>
<div style="--i:6;">
<p>6</p>
</div>
<div style="--i:7;">
<p>7</p>
</div>
<div style="--i:8;">
<p>8</p>
</div>
<div style="--i:9;">
<p>9</p>
</div>
<div style="--i:10;">
<p>10</p>
</div>
<div style="--i:11;">
<p>11</p>
</div>
<div style="--i:12;">
<p>12</p>
</div>
<div class="hour-hand"></div>
<div class="minute-hand"></div>
<div class="second-hand"></div>
</div>
</div>
Пока, что такой результат:
Ответы (1 шт):
Автор решения: Grundy
→ Ссылка
Селектор #clockFace div
перебивает по специфичности классы стрелок, поэтому их настройки игнорируются.
В качестве решения можно
- либо увеличить специфичность классов для стрелок,
- либо изменить селектор для отметок часов
- вынести стрелки из общего контейнера
Например: добавим класс для дивов ответственных за хранение меток часов, селектор вместо #clockFace div
станет обычным селектором класса, и не будет влиять на элементы стрелок.
Кроме того, стрелки сами по себе были позиционированы не совсем корректно. Из-за того что отступ считается снизу, не нужно поднимать их в трансформе.
#card7 {
width: 500px;
height: 500px;
background-color: #C4C4C4;
position: absolute;
left: 0;
top: 0;
display: block;
}
.line {
width: 100%;
height: 35px;
background-color: #0000AA;
font-size: 20px;
display: flex;
}
.turn {
width: 40px;
height: 35px;
background-color: #C4C4C4;
text-align: center;
flex-direction: column;
justify-content: center;
border: 2px solid Black;
display: flex;
}
.title {
flex-direction: column;
justify-content: center;
width: 100%;
text-align: center;
color: #fff;
display: flex;
}
.close {
width: 40px;
height: 35px;
background-color: #C4C4C4;
text-align: center;
flex-direction: column;
justify-content: center;
border: 2px solid Black;
display: flex;
box-shadow: inset 2px 2px 0px 0px #FFFFFF, inset -3px -3px 0px 0px #939393;
}
#clockFace {
width: 490px;
height: 460px;
margin: 7px 5px;
background-color: #C4C4C4;
box-shadow: inset 0px 0px 0px 8px rgba(255, 0, 0, 1), 0px 0px 0px 5px rgba(149, 1, 1, 1), inset 0px 0px 0px 15px rgba(149, 1, 1, 1);
border-radius: 5px;
display: flex;
justify-content: center;
align-items: center;
position: relative;
}
#clockFace::before {
content: '';
position: absolute;
width: 8px;
height: 8px;
text-align: center;
background: #000;
}
.label {
position: absolute;
inset: 20px;
text-align: center;
display: inline-block;
transform: rotate(calc(30deg * var(--i)));
}
.label p {
display: inline-block;
transform: rotate(calc(-30deg * var(--i)));
}
.hour-hand {
width: 8px;
height: 20px;
background: seagreen;
}
.minute-hand {
width: 8px;
height: 140px;
background: seagreen;
}
.second-hand {
width: 8px;
height: 160px;
background: seagreen;
}
.hour-hand,
.minute-hand,
.second-hand {
position: absolute;
bottom: 50%;
left: 50%;
transform: translate(-50%, 0%);
}
<div id="card7">
<div class="line">
<div class="turn">➖</div>
<p class="title">Часы</p>
<div class="close">▲</div>
</div>
<!--Часы-->
<div id="clockFace">
<div class="label" style="--i:1;">
<p>1</p>
</div>
<div class="label" style="--i:2;">
<p>2</p>
</div>
<div class="label" style="--i:3;">
<p>3</p>
</div>
<div class="label" style="--i:4;">
<p>4</p>
</div>
<div class="label" style="--i:5;">
<p>5</p>
</div>
<div class="label" style="--i:6;">
<p>6</p>
</div>
<div class="label" style="--i:7;">
<p>7</p>
</div>
<div class="label" style="--i:8;">
<p>8</p>
</div>
<div class="label" style="--i:9;">
<p>9</p>
</div>
<div class="label" style="--i:10;">
<p>10</p>
</div>
<div class="label" style="--i:11;">
<p>11</p>
</div>
<div class="label" style="--i:12;">
<p>12</p>
</div>
<div class="hour-hand"></div>
<div class="minute-hand"></div>
<div class="second-hand"></div>
</div>
</div>