汉堡按钮的制作以及其中的问题

第一种自己写的,下面的第二种是网上的用一个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>

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值