第一种自己写的,下面的第二种是网上的用一个span使用做出来的
HTML
<div class="box"><!--chang用来判断是否变换-->
<span class="s1"></span>
<span class="s2"></span>
<span class="s3"></span>
</div>
CSS
*{
margin: 0px;
padding: 0px;
}
.box{
width: 50px;
height: 50px;
margin: 100px auto 0px;
border: 1px solid saddlebrown;
background-color: rgba(0,0,0,.8);
position: relative;
}
.box span{
position: absolute;
display:block;
width: 50px; height: 1px;
border: 1px solid #FFFFFF;
background-color: #FFFFFF;
left: 0; right: 0; top: 0; bottom: 0;
margin: auto;/*用来达到水平垂直,居中*/
transition: transform .3s ease;
}
/*这里有个问题就是在格式高宽同时设置了margin:auto时候top等属性的移动的时候是2被的数值*/
.box .s1{
top:-47px;/*(重要)这里为什么是-50px,而不是-25px,因为设置了margin:auto,解析每当我的top上升了2px,也就是说下面多了2px,因为margin的存在就会分1px去上面所以感觉就是向上移了1px*/
}
.box .s2{
}
.box .s3{
top:47px;
}
.box .s1rotate{
-moz-transform-origin: 30 0; /*以中兴为旋转点,这里可以不用写英文默认就是以中心点旋转*/
-webkit-transform-origin:30 0;
-moz-transform-origin: 30 0;
transform:rotate(45deg);
}
.box .s2translate{ /*下面2个展现方法一个是隐藏中的线 ,一个是位移出去的*/
/*transform: scale(0); *//*这个是隐藏*/
transform: translateX(-55px) ;/*这个是位移*/
}
.box .s3rotate{
-moz-transform-origin: 30 0;
-webkit-transform-origin:30 0;
-moz-transform-origin: 30 0;
transform:rotate(-45deg);
}
js
var box = document.querySelector(".box");
var s1 = document.querySelector(".s1");
var s2 = document.querySelector(".s2");
var s3 = document.querySelector(".s3");//在这里必须放在全局为由去除.S1一但去除那么这里的代码就没有用了
box.onclick = function(){
//用与判断不同是否已经变化的情况
if(this.className.indexOf("chang") > -1){ //判段当该改变了,执行true
s1.classList.add("s1");
s3.classList.add("s3");
s1.classList.remove("s1rotate");
s2.classList.remove("s2translate");
s3.classList.remove("s3rotate");
this.classList.remove("chang");//去除
}else{
s1.classList.add("s1rotate");
s2.classList.add("s2translate");
s3.classList.add("s3rotate");
s1.classList.remove("s1");
s3.classList.remove("s3");
this.classList.add("chang");//增加
}
}
/*第二种的使用*/
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style>
span {
margin: 15% auto;
width: 45px;
height: 45px;
position: relative;
display: block;
width: 1.5em;
height: 0.25em;
background: #E04681;
border-radius: 3px;
cursor: pointer;
transition: transform .2s ease;
}
span:before, span:after {
border-radius: 3px;
transition: transform .3s ease;
}
span:before {
content: '';
display: block;
position: absolute;
width: 1.5em;
height: 0.25em;
top: -0.5em;
background: #E04681;
}
span:after {
content: '';
display: block;
position: absolute;
width: 1.5em;
height: 0.25em;
top: 0.5em;
background: #E04681;
}
span.close {
width: 45px;
height: 45px;
margin: 15% auto;
/*left: 10px;*/
position: relative;
display: block;
width: 0;
height: 0;
background: transparent;
transform: rotate(-180deg);
}
span.close:before, span.close:after {
transition: transform .3s ease;
}
span.close:before {
content: '';
display: block;
position: absolute;
width: 1.5em;
height: 0.25em;
top: 0;
background: #E04681;
transform: rotate(-45deg);
}
span.close:after {
content: '';
display: block;
position: absolute;
width: 1.5em;
height: 0.25em;
top: 0;
background: #E04681;
transform: rotate(45deg);
}
</style>
</head>
<body>
<span class="sdasd sdasdaa"></span>
<script>
var btn = document.querySelector("span");
btn.onclick = function(){
if(this.className.indexOf('close')>-1?true:false){
this.classList.remove("close");
}else{
this.classList.add("close");
}
console.log(this.className);
}
</script>
</body>
</html>