纯CSS实现卡通齿轮效果
海轰Pro
共 5943字,需浏览 12分钟
·
2021-08-13 20:50
效果展示
![](https://filescdn.proginn.com/d8a5920a9269f5ac78042970d8973643/22028be9efe1ba4d901e3fa2b27e59b7.webp)
Demo代码
HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="style.css">
<title>Document</title>
</head>
<body>
<section>
<div class="gear">
<div></div>
<div></div>
<div></div>
<div></div>
</div>
<div class="hole"></div>
</section>
</body>
</html>
CSS
html, body {
margin: 0;
height: 100%;
}
body {
display: flex;
justify-content: center;
align-items: center;
background: gainsboro;
/* background: #222f3e; */
}
section {
width: 650px;
height: 300px;
padding: 10px;
position: relative;
display: flex;
align-items: center;
justify-content: center;
border: 2px solid orange;
}
.gear {
width: 120px;
height: 120px;
border-radius: 50%;
background-color: #f98db9;
display: flex;
justify-content: center;
align-items: center;
animation: rotate 12s infinite linear;
}
.gear div {
position: absolute;
width: 30px;
height: 150px;
background: #f98db9;
border-radius: 8px;
}
.gear div:nth-child(1) {
transform: rotate(0deg);
}
.gear div:nth-child(2) {
transform: rotate(45deg);
}
.gear div:nth-child(3) {
transform: rotate(90deg);
}
.gear div:nth-child(4) {
transform: rotate(135deg);
}
.hole {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 50px;
height: 50px;
background-color: white;
border-radius: 50%;
}
@keyframes rotate {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
原理详解
步骤1
使用两个div,一个作为齿轮外部,一个作为内部空心部分
<div class="gear"></div>
<div class="hole"></div>
设置gear
宽度、高度均为120px 背景色为粉红色 flex布局(上下左右都居中)
.gear {
width: 120px;
height: 120px;
background-color: #f98db9;
display: flex;
justify-content: center;
align-items: center;
}
效果图如下再设置hole
绝对定位(使其位于正中心) 宽度、高度均为50px 背景色为白色
.hole {
/*位于正中心*/
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 50px;
height: 50px;
background-color: white;
}
效果图如下
![](https://filescdn.proginn.com/3231c4d45ad202443217a1508f530c90/d5aa37e6516212af1afa72b73cf0e5c1.webp)
步骤2
gear和hole同时圆角化
.gear {
border-radius: 50%;
}
.hole {
border-radius: 50%;
}
效果图如下
![](https://filescdn.proginn.com/f22a5bf77164a1e325adb7d579e07fd2/1f72363d43d4d1f7f31608a9a19c46a6.webp)
步骤3
添加齿轮外部分的凹凸不平的那个部分(不知道具体叫啥??)
一共设置8个 需要使用到4个div (一个div可以显示出2个)
<div class="gear">
<div></div>
<div></div>
<div></div>
<div></div>
</div>
设置div为
绝对定位(重要!) 宽度30px 高度150px 颜色:粉色 border-radius: 8px;
.gear div {
position: absolute;
width: 30px;
height: 150px;
background: #f98db9;
border-radius: 8px;
}
效果图如下
![](https://filescdn.proginn.com/62efaeb6189361bbc019e5fede7dbbd8/5f4fa5b4196134c0ce846074b676e754.webp)
步骤4
给每个div设置旋转角度,分别是
0deg 45deg 90deg 135deg
.gear div:nth-child(1) {
transform: rotate(0deg);
}
.gear div:nth-child(2) {
transform: rotate(45deg);
}
.gear div:nth-child(3) {
transform: rotate(90deg);
}
.gear div:nth-child(4) {
transform: rotate(135deg);
}
效果图如下
![](https://filescdn.proginn.com/7a180e654d772bf7f7af2dd61ab9e5f8/4ccd738ab44316cb5892696e7afe8059.webp)
步骤5
最后再为gear添加一个旋转动画
.gear {
animation: rotate 12s infinite linear;
}
@keyframes rotate {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
得到最终效果图
![](https://filescdn.proginn.com/d8a5920a9269f5ac78042970d8973643/22028be9efe1ba4d901e3fa2b27e59b7.webp)
举一反三
修改
增加2个div 修改旋转角度(0 30 60 90 120 150deg)
效果图如下:
![](https://filescdn.proginn.com/855bd3d7438e6b926fc85c014a261d08/5a640c97cce494616c00336064e62d38.webp)
结语
文章仅作为学习笔记,记录从0到1的一个过程
希望对您有所帮助,如有错误欢迎小伙伴指正~
我是 「海轰ଘ(੭ˊᵕˋ)੭」
如果您觉得写得可以的话,请点个赞吧
谢谢支持❤️
![](https://filescdn.proginn.com/304219d58335f3aecb7b4b5ad4d86493/4d51fce76d176245f56c0f253a9e9236.webp)
评论