点击上方蓝字关注我哦
我们要实现这样的效果,首先看我们的html结构
<div class="wrap">
<input type="checkbox" id="check" />
<button class="blob">★</button>
<button class="blob">✉</button>
<button class="blob">⚙</button>
<button class="blob">✆</button>
<button class="blob">✎</button>
<button class="blob">♫</button>
<button class="blob">✌</button>
<button class="blob">❤</button>
<label for="check">
<i></i>
<i></i>
<i></i>
</label>
</div>
<!--本质上利用label for属性绑定input的id控制每一个button的显示 这时候点击label相当于点击input-->
然后书写CSS样式
* {
margin: 0;
padding: 0
}
body {
background-color: #000
}
.wrap {
position: relative;
width: 230px;
height: 250px;
border: 1px solid red;
margin: 50px auto;
}
然后是label的样式
.wrap label {
position: absolute;
left: 0px;
top: 10px;
width: 70px;
height: 70px;
background-color: #f44336;
text-align: center;
border-radius: 35px;
/* font-size:0; */
line-height: 1;
}
.wrap label i {
display: inline-block;
width: 40px;
height: 6px;
background-color: #fff;
border-radius: 4px;
}
最后是每一个图标菜单的样式,一开始肯定是叠在一起的并且被Label覆盖 我们可以使用绝对定位去实现.
之后input被点击后 也就是相当于label被点击后让他们改变样式走到相应的位置
.wrap input:checked~.blob {
background-color: #fff;
color: #888;
}
.wrap input:checked~.blob:nth-of-type(1) {
left: 100px;
top: 35px;
}
.wrap input:checked~.blob:nth-of-type(2) {
left: 65px;
top: 85px;
}
.wrap input:checked~.blob:nth-of-type(3) {
left: 15px;
top: 120px;
}
.wrap input:checked~.blob:nth-of-type(4) {
left: 180px;
top: 45px;
}
.wrap input:checked~.blob:nth-of-type(5) {
left: 160px;
top: 100px;
}
.wrap input:checked~.blob:nth-of-type(6) {
left: 120px;
top: 145px;
}
.wrap input:checked~.blob:nth-of-type(7) {
left: 70px;
top: 180px;
}
.wrap input:checked~.blob:nth-of-type(8) {
left: 15px;
top: 200px;
}
到此我们效果全部完成了,以下去全部源码↓
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
* {
margin: 0;
padding: 0;
}
body {
background-color: #000;
}
.wrap {
position: relative;
width: 230px;
height: 250px;
border: 1px solid red;
margin: 50px auto;
}
.wrap label {
position: absolute;
left: 0px;
top: 10px;
width: 70px;
height: 70px;
background-color: #f44336;
text-align: center;
border-radius: 35px;
/* font-size:0; */
line-height: 1;
}
.wrap label i {
display: inline-block;
width: 40px;
height: 6px;
background-color: #fff;
border-radius: 4px;
}
.wrap input {
display: none;
}
.wrap .blob {
position: absolute;
left: 10px;
top: 10px;
width: 50px;
height: 50px;
border-width: 0;
background-color: #f44336;
outline: none;
font-size: 30px;
border-radius: 25px;
transition: 0.5s;
}
.wrap input:checked ~ .blob {
background-color: #fff;
color: #888;
}
.wrap input:checked ~ .blob:nth-of-type(1) {
left: 100px;
top: 35px;
}
.wrap input:checked ~ .blob:nth-of-type(2) {
left: 65px;
top: 85px;
}
.wrap input:checked ~ .blob:nth-of-type(3) {
left: 15px;
top: 120px;
}
.wrap input:checked ~ .blob:nth-of-type(4) {
left: 180px;
top: 45px;
}
.wrap input:checked ~ .blob:nth-of-type(5) {
left: 160px;
top: 100px;
}
.wrap input:checked ~ .blob:nth-of-type(6) {
left: 120px;
top: 145px;
}
.wrap input:checked ~ .blob:nth-of-type(7) {
left: 70px;
top: 180px;
}
.wrap input:checked ~ .blob:nth-of-type(8) {
left: 15px;
top: 200px;
}
</style>
</head>
<body>
<div>
<input type="checkbox" id="check" />
<button>★</button>
<button>✉</button>
<button>⚙</button>
<button>✆</button>
<button>✎</button>
<button>♫</button>
<button>✌</button>
<button>❤</button>
<label for="check">
<i></i>
<i></i>
<i></i>
</label>
</div>
</body>
</html>
END
长按二维码识别
精彩内容早知道
三连一下,了解更多软件知识