点击查看html编辑器说明文档

Loading 动画 - 沙漏edit icon

|
|
Fork(复制)
|
|
提交反馈
嵌入
设置
下载
HTML
格式化
支持Emmet,输入 p 后按 Tab键试试吧!
<head> ...
展开
</head>
<body>
            
              <!-- 主容器,包含两个漏斗元素 -->
  <div class="container">
      <div class="half"></div>
      <div class="half"></div>
  </div>
        
</body>
CSS
格式化
            
            /* 设置页面基本样式,使内容居中显示 */
body {
  background: #282c34;
  height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;
}

/* 容器样式,定义基本变量和旋转动画 */
.container {
  /* 自定义变量 */
  --uib-size: 45px;          /* 控制整体大小 */
  --uib-color: #c7f93e;      /* 设置主要颜色 */
  --uib-speed: 1.75s;        /* 动画速度 */
  --uib-bg-opacity: .1;      /* 背景透明度 */
  position: relative;
  display: flex;
  flex-direction: column;
  height: var(--uib-size);
  width: var(--uib-size);
  transform: rotate(45deg);
  animation: rotate calc(var(--uib-speed) * 2) ease-in-out infinite;
}

/* 半圆形元素的基本样式 */
.half {
  --uib-half-size: calc(var(--uib-size) * 0.435);
  position: absolute;
  display: flex;
  align-items: center;
  justify-content: center;
  width: var(--uib-half-size);
  height: var(--uib-half-size);
  overflow: hidden;
  isolation: isolate;

  /* 第一个半圆形元素的位置和样式 */
  &:first-child {
    top: 8.25%;
    left: 8.25%;
    border-radius: 50% 50% calc(var(--uib-size) / 15);
  }

  /* 第二个半圆形元素的位置和样式 */
  &:last-child {
    bottom: 8.25%;
    right: 8.25%;
    transform: rotate(180deg);
    align-self: flex-end;
    border-radius: 50% 50% calc(var(--uib-size) / 15);

    &::after {
      animation-delay: calc(var(--uib-speed) * -1);
    }
  }

  /* 半圆形元素的背景层 */
  &::before {
    content: '';
    height: 100%;
    width: 100%;
    position: absolute;
    top: 0;
    left: 0;
    background-color: var(--uib-color);
    opacity: var(--uib-bg-opacity);
    transition: background-color 0.3s ease;
  }

  /* 半圆形元素的流动效果层 */
  &::after {
    content: '';
    position: relative;
    z-index: 1;
    display: block;
    background-color: var(--uib-color);
    height: 100%;
    transform: rotate(45deg) translate(-3%, 50%) scaleX(1.2);
    width: 100%;
    transform-origin: bottom right;
    border-radius: 0 0 calc(var(--uib-size) / 20) 0;
    animation: flow calc(var(--uib-speed) * 2) linear infinite both;
    transition: background-color 0.3s ease;
  }
}

/* 流动动画关键帧 */
@keyframes flow {
  0% {
    transform: rotate(45deg) translate(-3%, 50%) scaleX(1.2);
  }
  30% {
    transform: rotate(45deg) translate(115%, 50%) scaleX(1.2);
  }
  30.001%, 50% {
    transform: rotate(0deg) translate(-85%, -85%) scaleX(1);
  }
  80%, 100% {
    transform: rotate(0deg) translate(0%, 0%) scaleX(1);
  }
}

/* 旋转动画关键帧 */
@keyframes rotate {
  0%, 30% {
    transform: rotate(45deg);
  }
  50%, 80% {
    transform: rotate(225deg);
  }
  100% {
    transform: rotate(405deg);
  }
}
        
JS
格式化
            
            
        
预览
控制台