我的div元素为什么不能形成一个圆形时钟?

huangapple go评论56阅读模式
英文:

Why are my div elements not forming a circular clock?

问题

你的CSS代码中,你使用了transform: rotate来旋转每个数字,但这不会创建一个完美的圆形。要使divs形成一个圆,你可以尝试以下方法:

  1. 使用border-radius属性将clock容器变成一个圆形:

    .clock {
      border: 1px solid red;
      position: relative;
      width: 220px;
      height: 220px;
      margin: 10px auto;
      display: flex;
      flex-direction: row-reverse;
      justify-content: space-evenly;
      border-radius: 50%; /* 添加这行 */
    }
    
  2. 确保clock容器的宽度和高度相等,以便创建一个正圆。

这些更改应该使你的divs形成一个圆形。

英文:

I am trying to build a clock in CSS and I can't get my divs to make a circle. I am using the rotate(30deg) but its is not making a perfect circle.

<!-- begin snippet: js hide: false console: true babel: false -->

<!-- language: lang-css -->

:root {
  --rot: 30deg;
  background-color: darkgray;
}

.container {
  border: 1px solid black;
}

.clock {
  border: 1px solid red;
  position: relative;
  width: 220px;
  height: 220px;
  margin: 10px auto;
  display: flex;
  flex-direction: row-reverse;
  justify-content: space-evenly;
}

.clock div {
  display: flex;
  position: absolute;
}

.h-1 {
  transform: rotate(var(--rot))
}

.h-2 {
  transform: rotate(calc(2 * var(--rot)))
}

.h-3 {
  transform: rotate(calc(3 * var(--rot)));
}

.h-4 {
  transform: rotate(calc(4 * var(--rot)));
}

.h-5 {
  transform: rotate(calc(5 * var(--rot)));
}

.h-6 {
  transform: rotate(calc(6 * var(--rot)));
}

.h-7 {
  transform: rotate(calc(7 * var(--rot)));
}

.h-8 {
  transform: rotate(calc(8 * var(--rot)));
}

.h-9 {
  transform: rotate(calc(9 * var(--rot)));
}

.h-10 {
  transform: rotate(calc(10 * var(--rot)));
}

.h-11 {
  transform: rotate(calc(11 * var(--rot)));
}

.h-12 {
  display: block;
}

<!-- language: lang-html -->

&lt;div class=&quot;container&quot;&gt;
  &lt;div class=&quot;clock&quot;&gt;
    &lt;div class=&quot;h-12&quot;&gt;12&lt;/div&gt;
    &lt;div class=&quot;h-1&quot;&gt;1&lt;/div&gt;
    &lt;div class=&quot;h-2&quot;&gt;2&lt;/div&gt;
    &lt;div class=&quot;h-3&quot;&gt;3&lt;/div&gt;
    &lt;div class=&quot;h-4&quot;&gt;4&lt;/div&gt;
    &lt;div class=&quot;h-5&quot;&gt;5&lt;/div&gt;
    &lt;div class=&quot;h-6&quot;&gt;6&lt;/div&gt;
    &lt;div class=&quot;h-7&quot;&gt;7&lt;/div&gt;
    &lt;div class=&quot;h-8&quot;&gt;8&lt;/div&gt;
    &lt;div class=&quot;h-9&quot;&gt;9&lt;/div&gt;
    &lt;div class=&quot;h-10&quot;&gt;10&lt;/div&gt;
    &lt;div class=&quot;h-11&quot;&gt;11&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

<!-- end snippet -->

what am I doing wrong here?

I expect my divs to be circle
我的div元素为什么不能形成一个圆形时钟?

答案1

得分: 5

旋转发生在transform-origin周围,默认为元素的中心。你的每个div都是围绕自己的局部中心旋转的。

在这个片段中,我添加了一个transform-origin规则来移动旋转中心。这是唯一的改变。

:root {
  --rot: 30deg;
  background-color: darkgray;
}

.container {
  border: 1px solid black;
}

.clock {
  border: 1px solid red;
  position: relative;
  width: 220px;
  height: 220px;
  margin: 10px auto;
  display: flex;
  flex-direction: row-reverse;
  justify-content: space-evenly;
}

.clock div {
  display: flex;
  position: absolute;
  transform-origin: 0 110px; /* <==== 围绕时钟的中心旋转,而不是元素的中心 */
}

.h-1 {
  transform: rotate(var(--rot))
}

.h-2 {
  transform: rotate(calc(2 * var(--rot)))
}

.h-3 {
  transform: rotate(calc(3 * var(--rot)));
}

.h-4 {
  transform: rotate(calc(4 * var(--rot)));
}

.h-5 {
  transform: rotate(calc(5 * var(--rot)));
}

.h-6 {
  transform: rotate(calc(6 * var(--rot)));
}

.h-7 {
  transform: rotate(calc(7 * var(--rot)));
}

.h-8 {
  transform: rotate(calc(8 * var(--rot)));
}

.h-9 {
  transform: rotate(calc(9 * var(--rot)));
}

.h-10 {
  transform: rotate(calc(10 * var(--rot)));
}

.h-11 {
  transform: rotate(calc(11 * var(--rot)));
}

.h-12 {
  display: block;
}
<div class="container">
  <div class="clock">
    <div class="h-12">12</div>
    <div class="h-1">1</div>
    <div class="h-2">2</div>
    <div class="h-3">3</div>
    <div class="h-4">4</div>
    <div class="h-5">5</div>
    <div class="h-6">6</div>
    <div class="h-7">7</div>
    <div class="h-8">8</div>
    <div class="h-9">9</div>
    <div class="h-10">10</div>
    <div class="h-11">11</div>
  </div>
</div>
英文:

Rotation occurs around the transform-origin, which defaults to the center of the element. Each of your divs is being rotated around its own local center.

In this snippet I've added a transform-origin rule to move the center of rotation. That's the only change.

<!-- begin snippet: js hide: false console: true babel: false -->

<!-- language: lang-css -->

:root {
--rot: 30deg;
background-color: darkgray;
}
.container {
border: 1px solid black;
}
.clock {
border: 1px solid red;
position: relative;
width: 220px;
height: 220px;
margin: 10px auto;
display: flex;
flex-direction: row-reverse;
justify-content: space-evenly;
}
.clock div {
display: flex;
position: absolute;
transform-origin: 0 110px; /* &lt;==== rotate around the center of the clock, not the center of the element */
}
.h-1 {
transform: rotate(var(--rot))
}
.h-2 {
transform: rotate(calc(2 * var(--rot)))
}
.h-3 {
transform: rotate(calc(3 * var(--rot)));
}
.h-4 {
transform: rotate(calc(4 * var(--rot)));
}
.h-5 {
transform: rotate(calc(5 * var(--rot)));
}
.h-6 {
transform: rotate(calc(6 * var(--rot)));
}
.h-7 {
transform: rotate(calc(7 * var(--rot)));
}
.h-8 {
transform: rotate(calc(8 * var(--rot)));
}
.h-9 {
transform: rotate(calc(9 * var(--rot)));
}
.h-10 {
transform: rotate(calc(10 * var(--rot)));
}
.h-11 {
transform: rotate(calc(11 * var(--rot)));
}
.h-12 {
display: block;
}

<!-- language: lang-html -->

&lt;div class=&quot;container&quot;&gt;
  &lt;div class=&quot;clock&quot;&gt;
    &lt;div class=&quot;h-12&quot;&gt;12&lt;/div&gt;
    &lt;div class=&quot;h-1&quot;&gt;1&lt;/div&gt;
    &lt;div class=&quot;h-2&quot;&gt;2&lt;/div&gt;
    &lt;div class=&quot;h-3&quot;&gt;3&lt;/div&gt;
    &lt;div class=&quot;h-4&quot;&gt;4&lt;/div&gt;
    &lt;div class=&quot;h-5&quot;&gt;5&lt;/div&gt;
    &lt;div class=&quot;h-6&quot;&gt;6&lt;/div&gt;
    &lt;div class=&quot;h-7&quot;&gt;7&lt;/div&gt;
    &lt;div class=&quot;h-8&quot;&gt;8&lt;/div&gt;
    &lt;div class=&quot;h-9&quot;&gt;9&lt;/div&gt;
    &lt;div class=&quot;h-10&quot;&gt;10&lt;/div&gt;
    &lt;div class=&quot;h-11&quot;&gt;11&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

<!-- end snippet -->

huangapple
  • 本文由 发表于 2023年5月25日 00:34:11
  • 转载请务必保留本文链接:https://go.coder-hub.com/76325704.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定