<!-- 主容器 -->
<div class="container"></div>
<!-- SVG滤镜定义,用于创建果冻效果 -->
<svg width="0" height="0" class="svg">
<defs>
<filter id="uib-jelly-ooze">
<!-- 添加高斯模糊效果 -->
<feGaussianBlur in="SourceGraphic" stdDeviation="5" result="blur" />
<!-- 调整颜色矩阵以创建果冻般的渗出效果 -->
<feColorMatrix in="blur" mode="matrix" values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 18 -7"
result="ooze" />
<!-- 将原始图形与效果混合 -->
<feBlend in="SourceGraphic" in2="ooze" />
</filter>
</defs>
</svg>
HTML
格式化
支持Emmet,输入 p 后按 Tab键试试吧!
<head> ... </head>
<body>
</body>
/* 设置页面基本样式,使内容居中显示 */
body {
background: #282c34;
height: 100vh;
display: flex;
align-items: center;
justify-content: center;
}
.container {
/* 定义CSS变量 */
--uib-size: 40px; /* 控制动画大小 */
--uib-color: #c7f93e; /* 控制动画颜色 */
--uib-speed: .9s; /* 控制动画速度 */
position: relative;
height: calc(var(--uib-size) / 2);
width: var(--uib-size);
filter: url('#uib-jelly-ooze'); /* 应用果冻效果滤镜 */
animation: rotate calc(var(--uib-speed) * 2) linear infinite;
will-change: transform;
}
/* 使用伪元素创建两个圆形 */
.container::before,
.container::after {
content: '';
position: absolute;
top: 0%;
left: 25%;
width: 50%;
height: 100%;
background-color: var(--uib-color);
border-radius: 100%;
will-change: transform;
transition: background-color 0.3s ease;
}
/* 左侧圆形的动画 */
.container::before {
animation: shift-left var(--uib-speed) ease infinite;
}
/* 右侧圆形的动画 */
.container::after {
animation: shift-right var(--uib-speed) ease infinite;
}
/* 隐藏SVG元素 */
.svg {
width: 0;
height: 0;
position: absolute;
}
/* 旋转动画关键帧 */
@keyframes rotate {
0%, 49.999%, 100% {
transform: none;
}
50%, 99.999% {
transform: rotate(90deg);
}
}
/* 左移动画关键帧 */
@keyframes shift-left {
0%, 100% {
transform: translateX(0%);
}
50% {
transform: scale(0.65) translateX(-75%);
}
}
/* 右移动画关键帧 */
@keyframes shift-right {
0%, 100% {
transform: translateX(0%);
}
50% {
transform: scale(0.65) translateX(75%);
}
}
预览
控制台