CSS 圆锥渐变+MASK遮罩实现WIFI图标

2023-05-08  本文已影响0人  苏苏哇哈哈

前言

👏CSS 圆锥渐变+MASK遮罩实现WIFI图标,速速来Get吧~

🥇文末分享源代码。记得点赞+关注+收藏!

1.实现效果

image.png

2.实现步骤

:root {
  --bg: #fff;
  --dot: 20px;
  --w: 300px;
  --gap: 45px;
}
image.png
<div class="container"></div>
.container {
    width: var(--w);
    position: relative;
    border: 1px solid red;
}
image.png
<div class="container">
    + <div class="line" ></div>
</div>

conic-gradient():
CSS 函数 conic-gradient() 创建了一个由渐变组成的图像,渐变的颜色变换围绕一个中心点旋转(而不是从中心辐射)。锥形渐变的例子包括饼图和色轮 color wheels (en-US). conic-gradient() 函数的结果是 gradient 数据类型的对象,是一种特殊的 image 数据类型。

image.png
.line{
    position: absolute;
    width: var(--w);
    height: var(--w);
    border-radius: 50%;
    background: conic-gradient(var(--bg) 35%, transparent 35%);
}
image.png
.line{
     -webkit-mask: radial-gradient(
        transparent calc(var(--w) / 2 - var(--dot) - 1px),
        #000 calc(var(--w) / 2 - var(--dot))
      );
}
image.png
.line::before,
.line::after {
    content: "";
    position: absolute;
    width: var(--dot);
    height: var(--dot);
    border-radius: 50%;
    left: calc(var(--w) / 2 - var(--dot) / 2);
    top: calc(var(--w) / 2 - var(--dot) / 2);
    background: var(--bg);
}
image.png image.png
.line::before {
   transform: translate(0, calc(var(--dot) / 2 - var(--w) / 2));
 }
image.png
.line::after {
    transform: rotate(calc(360deg * 0.35))
    translate(0, calc(var(--dot) / 2 - var(--w) / 2));
}
image.png
.line{
    transform: rotate(-60deg);
}
<div class="container">
     <div class="line" ></div>
    + <div class="line" ></div>
    + <div class="line" ></div>
</div>
image.png image.png
<div class="container">
    <div class="line" style="--i: 0"></div>
    <div class="line" style="--i: 1"></div>
    <div class="line" style="--i: 2"></div>
</div>
image.png
.line {
    --width: calc(var(--w) - var(--gap) * 2 * var(--i));
    width: var(--width);
    height: var(--width);
    -webkit-mask: radial-gradient(
        transparent calc(var(--width) / 2 - var(--dot) - 1px),
        #000 calc(var(--width) / 2 - var(--dot))
      );
}
.line::before,
.line::after {
    left: calc(var(--width) / 2 - var(--dot) / 2);
    top: calc(var(--width) / 2 - var(--dot) / 2); *
}
.line::before {
    transform: translate(0, calc(var(--dot) / 2 - var(--width) / 2));
}
.line::after {
    transform: rotate(calc(360deg * 0.35))
      translate(0, calc(var(--dot) / 2 - var(--width) / 2));
}
image.png
.line{
    /* 水平居中 */
    left: calc(50% - var(--width) / 2);
    /* 距离顶部的距离,根据gap来定 */
    top: calc(var(--gap) * var(--i));
}
image.png
<div class="container">
    + <div class="dot"></div>
</div>
.dot {
    position: absolute;
    width: var(--dot);
    height: var(--dot);
    border-radius: 50%;
    top: calc(var(--gap) * 3);
    background: var(--bg);
    left: calc(50% - var(--dot) / 2);
}
image.png image.png
.container {
    + height: calc(var(--gap) * 3 + var(--dot));
}

3.实现代码

<style>
:root {
  --bg: #fff;
  --dot: 20px;
  --w: 300px;
  --gap: 45px;
}
.container {
  width: var(--w);
  height: calc(var(--gap) * 3 + var(--dot));
  position: relative;
}
.line {
  position: absolute;
  --width: calc(var(--w) - var(--gap) * 2 * var(--i));
  width: var(--width);
  height: var(--width);
  /* 水平居中 */
  left: calc(50% - var(--width) / 2);
  /* 距离顶部的距离,根据gap来定 */
  top: calc(var(--gap) * var(--i));
  border-radius: 50%;
  background: conic-gradient(var(--bg) 35%, transparent 35%);
  -webkit-mask: radial-gradient(
    transparent calc(var(--width) / 2 - var(--dot) - 1px),
    #000 calc(var(--width) / 2 - var(--dot))
  );
  transform: rotate(-60deg);
}
.line::before,
.line::after {
  content: "";
  position: absolute;
  width: var(--dot);
  height: var(--dot);
  border-radius: 50%;
  left: calc(var(--width) / 2 - var(--dot) / 2);
  top: calc(var(--width) / 2 - var(--dot) / 2);
  background: var(--bg);
}
.line::before {
  transform: translate(0, calc(var(--dot) / 2 - var(--width) / 2));
}
.line::after {
  transform: rotate(calc(360deg * 0.35))
    translate(0, calc(var(--dot) / 2 - var(--width) / 2));
}
.dot {
  position: absolute;
  width: var(--dot);
  height: var(--dot);
  border-radius: 50%;
  top: calc(var(--gap) * 3);
  background: var(--bg);
  left: calc(50% - var(--dot) / 2);
}
</style>
<body>
<div class="container">
  <div class="line" style="--i: 0"></div>
  <div class="line" style="--i: 1"></div>
  <div class="line" style="--i: 2"></div>
  <div class="dot"></div>
</div>
</body>

4.写在最后🍒

看完本文如果觉得对你有一丢丢帮助,记得点赞+关注+收藏鸭 🍕
更多相关内容,关注🍥苏苏的bug,🍡苏苏的github,🍪苏苏的码云~
上一篇 下一篇

猜你喜欢

热点阅读