純CSS實(shí)現(xiàn)卡通齒輪效果
效果展示

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
使用兩個(gè)div,一個(gè)作為齒輪外部,一個(gè)作為內(nèi)部空心部分
<div class="gear"></div>
<div class="hole"></div>
設(shè)置gear
寬度、高度均為120px 背景色為粉紅色 flex布局(上下左右都居中)
.gear {
width: 120px;
height: 120px;
background-color: #f98db9;
display: flex;
justify-content: center;
align-items: center;
}
效果圖如下
再設(shè)置hole
絕對(duì)定位(使其位于正中心) 寬度、高度均為50px 背景色為白色
.hole {
/*位于正中心*/
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 50px;
height: 50px;
background-color: white;
}
效果圖如下

步驟2
gear和hole同時(shí)圓角化
.gear {
border-radius: 50%;
}
.hole {
border-radius: 50%;
}
效果圖如下

步驟3
添加齒輪外部分的凹凸不平的那個(gè)部分(不知道具體叫啥??)
一共設(shè)置8個(gè) 需要使用到4個(gè)div (一個(gè)div可以顯示出2個(gè))
<div class="gear">
<div></div>
<div></div>
<div></div>
<div></div>
</div>
設(shè)置div為
絕對(duì)定位(重要!) 寬度30px 高度150px 顏色:粉色 border-radius: 8px;
.gear div {
position: absolute;
width: 30px;
height: 150px;
background: #f98db9;
border-radius: 8px;
}
效果圖如下

步驟4
給每個(gè)div設(shè)置旋轉(zhuǎn)角度,分別是
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);
}
效果圖如下

步驟5
最后再為gear添加一個(gè)旋轉(zhuǎn)動(dòng)畫(huà)
.gear {
animation: rotate 12s infinite linear;
}
@keyframes rotate {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
得到最終效果圖

舉一反三
修改
增加2個(gè)div 修改旋轉(zhuǎn)角度(0 30 60 90 120 150deg)
效果圖如下:

結(jié)語(yǔ)
文章僅作為學(xué)習(xí)筆記,記錄從0到1的一個(gè)過(guò)程
希望對(duì)您有所幫助,如有錯(cuò)誤歡迎小伙伴指正~
我是 「海轟?(?ˊ?ˋ)?」
如果您覺(jué)得寫(xiě)得可以的話,請(qǐng)點(diǎn)個(gè)贊吧
謝謝支持??

評(píng)論
圖片
表情
