微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 HTML CSS 创建半圆/椭圆?像仪表/车速表

如何解决如何使用 HTML CSS 创建半圆/椭圆?像仪表/车速表

我正在尝试做这样的事情:

enter image description here

它不是一个完整的或半圆形的,边缘有一点半径。还需要包含一些点以百分比显示当前位置。有人可以告诉我如何将接近以下 3 个想法的东西组合在一起吗?

.circle {
   display: flex;
   width: 200px;
   height: 100px;
   border-top-left-radius: 200px;
   border-top-right-radius: 200px;
   border: 10px solid gray;
   border-bottom: 0;
}

.circle>.text {
   font-size: 50px;
   margin: auto;
}

.circle.gradient {
   margin-top: 30px;
   border-image-slice: 1;
   border-width: 10px;
   border-bottom: 0;
   border-image-source: linear-gradient(to left,#6ECE34,#E6A749,#E5A749,#F71C1C);
}

.line {
   position: relative;
   margin-top: 30px;
   width: 220px;
   height: 10px;
   border-radius: 5px;
   background: linear-gradient(to left,#F71C1C);
}

.line>.point {
   position: absolute;
   top: -3px;
   left: 21%;
   width: 8px;
   height: 16px;
   border-radius: 5px;
   border: 1px solid black;
   background: #FFF;
}
<!-- Just semi circle -->
<div class="circle">
   <div class="text">
      21
   </div>
</div>

<!-- With gradient border -->
<div class="circle gradient"></div>

<!-- Maybe strech in Y -->
<div class="line">
   <!-- Relative point -->
   <div class="point"></div>
</div>

解决方法

您可以使用 CSS 将外观和功能拼凑在一起,用于外观和更新用于更新速度的任何语言的指针位置/斜率的 CSS 变量。

以下是仅用于演示的--pointerleft、--pointerright 和--pointerdeg 设置的外观片段。在操作代码中,您需要做一些三角函数来计算给定当时的特定速度,然后设置 CSS 变量(例如在 JS 中)。

是否使用径向和圆锥渐变,然后必须在末端放置小圆点可以说是我不知道的建议。 SO 不喜欢推荐,但我会冒险并建议这样做,但有点麻烦,SVG 可能会更好。

注意,代码片段只有一个简单的 3 色圆锥渐变,您可以根据需要添加更多/不同程度的不同颜色。

.ring {
  position: relative;
  --pointerleft: 11%;
  --pointertop: 11%;
  --pointerdeg: -45deg;
  width: 50vmin;
  height: 50vmin;
  background-image: radial-gradient(red 0,red 50%,transparent 50%,transparent 100%),radial-gradient(green 0,green 50%,radial-gradient(white 0,white 60%,transparent 60%),conic-gradient(orange 0,green 130deg,white 130deg,white 230deg,red 230deg,orange 360deg);
  background-size: 11% 11%,11% 11%,100% 100%,100% 100%;
  background-repeat: no-repeat;
  background-position: 9.2% 82.3%,90.8% 82.3%,center center,center center;
  border-radius: 50%;
  border-style: none;
}

.ring::after {
  position: absolute;
  content: '';
  width: 5%;
  height: 15%;
  left: var(--pointerleft);
  top: var(--pointertop);
  transform: rotate(var(--pointerdeg));
  border-style: solid;
  border-width: 0.5vmin;
  border-radius: 2vmin;
  background-color: white;
}

.speed {
  display: inline-block;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translateX(-50%) translateY(-50%);
  text-align: center;
  color: gray;
}

.speed .number {
  font-size: 6vw;
}

.speed .units {
  font-size: 3vw;
}
<div class="ring">
  <div class="speed">
    <div class="number">21</div>
    <div class="units" style=";">km/h</div>
  </div>
</div>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。