前言
这次带大家来实现一个由 HTML
和 CSS
组合而成的效果,太极阴阳鱼。话不多说,我们直奔主题。
效果预览
接下来教大家如何使用 CSS
创建一个阴阳鱼的旋转动画,使用了变量、线性渐变和伪元素。
CSS 部分
首先我们看到.yin-yang
类样式,相关代码如下。
.yin-yang {
width: 10em;
height: 10em;
font-size: 20px;
--color1: white;
--color2: black;
background-image: linear-gradient(var(--color1) 50%, var(--color2) 50%);
display: flex;
align-items: center;
box-shadow: 0 0 1em rgba(0, 0, 0, 0.3);
animation: rotating linear 5s infinite;
}
@keyframes rotating {
to {
transform: rotate(1turn);
}
}
这里我们创建了一个阴阳鱼样式的旋转动画效果。在.yin-yang
中,width: 10em; height: 10em;
设置了阴阳鱼容器的宽度和高度为 10 个字体尺寸。font-size: 20px;
设置了字体大小为 20px。--color1: white; --color2: black;
:自定义了两个颜色变量,用于表示阴阳鱼的两种部分颜色。background-image: linear-gradient(var(--color1) 50%, var(--color2) 50%);
创建了一个线性渐变背景,将容器一分为二,并使用两种颜色填充。display: flex; align-items: center;
表示采用弹性布局,在容器中垂直居中放置鱼形图案。box-shadow: 0 0 1em rgba(0, 0, 0, 0.3);
则是给阴阳鱼容器添加了一个淡淡的阴影效果。
animation: rotating linear 5s infinite;
则是应用了一个名为 rotating
的线性动画,使阴阳鱼进行无限旋转效果。该动画的作用是使阴阳鱼旋转 1 个完整的圈,使阴阳鱼进行无限旋转。
接着是伪元素的样式,相关代码如下。
.yin-yang::before,
.yin-yang::after {
content: "";
width: 50%;
height: 50%;
background-color: var(--inner-color);
box-sizing: border-box;
border: 1.5em solid var(--outer-color);
}
.yin-yang::before {
--inner-color: var(--color1);
--outer-color: var(--color2);
}
.yin-yang::after {
--inner-color: var(--color2);
--outer-color: var(--color1);
}
这里使用了伪元素:before
和:after
来创建阴阳鱼中的两个部分,并使用自定义变量来控制它们的颜色。
在.yin-yang::before
和 .yin-yang::after
中,content: ""
设置了伪元素的内容为空,这样它们就可以在页面中生成。width: 50%; height: 50%;
定义了伪元素的宽度和高度,使其成为容器的一半大小。background-color: var(--inner-color);
使用了var(--inner-color)
来设置伪元素的背景颜色,这样通过外部的自定义变量来控制内部的颜色。box-sizing: border-box;
设置了box-sizing
为border-box
,确保了边框的大小不会改变元素的尺寸。border: 1.5em solid var(--outer-color);
则是创建了一个边框,通过var(--outer-color)
使用自定义变量设置了边框的颜色。
在.yin-yang::before
和 .yin-yang::after
中的--inner-color
和 --outer-color
定义了两种不同的内外颜色组合作为自定义变量,以此来调出阴阳鱼两个部分的颜色。
通过使用自定义变量以及::before
和 ::after
伪元素被用来创建鱼形图案的两个部分,实现了通过 CSS
生成阴阳鱼中的两个部分,并结合颜色变量来灵活控制它们的样式和颜色。
到这里整个效果的实现就结束了,比较简单。
总结
以上就是整个效果的实现过程了,纯 CSS
实现,代码简单易懂。另外,感兴趣的小伙伴们还可以在现有基础上发散思维,比如增加点其他效果,或者更改颜色等等。关于该效果如果大家有更好的想法欢迎在评论区分享,互相学习。最后,完整代码在码上掘金里可以查看,如果有什么问题大家在评论区里讨论~