Skip to content

如何实现一个tooltip组件

  1. 首先编写HTML代码如下
html
<section class="rund">
    <div class="container">
        <div class="item" style="--i:0;"></div>
        <div class="item" style="--i:1;"></div>
        <div class="item" style="--i:2;"></div>
        <div class="item" style="--i:3;"></div>
        <div class="item" style="--i:4;"></div>
        <div class="item" style="--i:5;"></div>
        <div class="item" style="--i:6;"></div>
        <div class="item" style="--i:7;"></div>
        <div class="item" style="--i:8;"></div>
        <div class="item" style="--i:9;"></div>
        <div class="item" style="--i:10;"></div>
    </div>
</section>
<section class="rund">
    <div class="container">
        <div class="item" style="--i:0;"></div>
        <div class="item" style="--i:1;"></div>
        <div class="item" style="--i:2;"></div>
        <div class="item" style="--i:3;"></div>
        <div class="item" style="--i:4;"></div>
        <div class="item" style="--i:5;"></div>
        <div class="item" style="--i:6;"></div>
        <div class="item" style="--i:7;"></div>
        <div class="item" style="--i:8;"></div>
        <div class="item" style="--i:9;"></div>
        <div class="item" style="--i:10;"></div>
    </div>
</section>
  1. 编写样式文件
scss
.rund .container .item {
  position: absolute;
  background-color: transparent;
  width: calc(var(--i) * 25px);
  aspect-ratio: 1;
  border: 10px solid rgb(0, 200, 255);
  border-radius: 50%;
  transform: rotateX(70deg);
  animation: move 3s ease-in-out calc(var(--i) * 0.08s) infinite;
  box-shadow: 0 0 15px rgb(124, 124, 124),
  inset 0 0 15px rgb(124, 124, 124);
}

.rund .container {
  position: relative;
  display: flex;
  justify-content: center;
  align-items: center;
  width: 100%;
  height: 100%;
}

@keyframes move {
  0% {
    transform: rotateX(70deg) translateY(0deg);
    filter: hue-rotate(0deg);
  }
  50% {
    transform: rotateX(70deg) translateY(-35vw);
    filter: hue-rotate(180deg);
  }
}
.rund .container .item {
  position: absolute;
  background-color: transparent;
  width: calc(var(--i) * 25px);
  aspect-ratio: 1;
  border: 10px solid rgb(0, 200, 255);
  border-radius: 50%;
  transform: rotateX(70deg);
  animation: move 3s ease-in-out calc(var(--i) * 0.08s) infinite;
  box-shadow: 0 0 15px rgb(124, 124, 124),
  inset 0 0 15px rgb(124, 124, 124);
}

.rund .container {
  position: relative;
  display: flex;
  justify-content: center;
  align-items: center;
  width: 100%;
  height: 100%;
}

@keyframes move {
  0% {
    transform: rotateX(70deg) translateY(0deg);
    filter: hue-rotate(0deg);
  }
  50% {
    transform: rotateX(70deg) translateY(-35vw);
    filter: hue-rotate(180deg);
  }
}

最终的效果如下