css加上关闭按钮

时间:2018-04-25 07:28:30

标签: jquery css css3

我需要一个css设计,其中方形按钮悬停更改加号以交叉而不是方形到圆形 我已经在这里演示了。但我不能像我的要求那样改变

https://codepen.io/tapos007/pen/odxQgW



    		$(function() {
        //do something
    
          $(".btn-square").click({animateIn: "circleShape", animateOut: "squareShape"}, animate_function);
     
          
          function animate_function(event){
              if( $(this).hasClass(event.data.animateIn) ) {
                    $(this).removeClass(event.data.animateIn).addClass(event.data.animateOut);
                   }
                else if( $(this).hasClass(event.data.animateOut) ) {
                   $(this).removeClass(event.data.animateOut).addClass(event.data.animateIn);
                }
                else {
                  $(this).addClass('animated ' + event.data.animateIn);
                }     
          }
          
      //end do something     
    	});
    

    //Variables
    $btn-round-size:100px;
    $btn-round-rotate:135deg;
    $btn-default-color:blue;
    $btn-close-color:red;
    
    //Styles
    body {
      font-family: sans-serif;
    }
    
    .btn-round {
      width:$btn-round-size;
    	height:$btn-round-size;
    	border-radius:$btn-round-size;
      background-color:$btn-default-color;
    }
    
    .btn-square {
      width:$btn-round-size;
    	height:$btn-round-size;
      background-color:blue;
    }
    
    .close{
      position: relative;
      display: inline-block;
      width: 50px;
      height: 50px;
      top:25px;
      left:25px;
      overflow: hidden;
    
      &::before, &::after {
        content: '';
        position: absolute;
        height: 2px;
        width: 100%;
        top: 50%;
        left: 0;
        margin-top: -1px;
        background: #fff;
      }
      &::before {
         transform:rotate(0deg);
        }
     &::after {
         transform:rotate(90deg);
        }
    } 
    
    
    
    //Animations
    .animated {
      -webkit-animation-duration: 1s;
      animation-duration: 1s;
      -webkit-animation-fill-mode: both;
      animation-fill-mode: both;
    }
    
    @-webkit-keyframes plusButton {
      from {
        -webkit-transform-origin: center;
        transform-origin: center;
        -webkit-transform: rotate3d(0, 0, 1, -$btn-round-rotate);
        transform: rotate3d(0, 0, 1, -$btn-round-rotate);
        background-color:$btn-close-color;
      }
    
      to {
        -webkit-transform-origin: center;
        transform-origin: center;
        -webkit-transform: none;
        transform: none;
        background-color:$btn-default-color;
      }
    }
    
    @keyframes plusButton {
      from {
        -webkit-transform-origin: center;
        transform-origin: center;
        -webkit-transform: rotate3d(0, 0, 1, $btn-round-rotate);
        transform: rotate3d(0, 0, 1, $btn-round-rotate);
        background-color:$btn-close-color;
      }
    
      to {
        -webkit-transform-origin: center;
        transform-origin: center;
        -webkit-transform: none;
        transform: none;
        background-color:$btn-default-color;
      }
    }
    
    .plusButton {
      -webkit-animation-name: plusButton;
      animation-name: plusButton;
    }
    
    
    @-webkit-keyframes closeButton {
      from {
        -webkit-transform-origin: center;
        transform-origin: center;
        -webkit-transform: none;
        transform: none;
        background-color:$btn-default-color;
      }
    
      to {
        -webkit-transform-origin: center;
        transform-origin: center;
        -webkit-transform: rotate3d(0, 0, 1, $btn-round-rotate);
        transform: rotate3d(0, 0, 1, $btn-round-rotate);
        background-color:$btn-close-color;
      }
    }
    
    @keyframes closeButton {
      from {
        -webkit-transform-origin: center;
        transform-origin: center;
        -webkit-transform: none;
        transform: none;
        background-color:$btn-default-color;
      }
    
      to {
        -webkit-transform-origin: center;
        transform-origin: center;
        -webkit-transform: rotate3d(0, 0, 1, $btn-round-rotate);
        transform: rotate3d(0, 0, 1, $btn-round-rotate);
        background-color:$btn-close-color;
      }
    }
    
    .closeButton {
      -webkit-animation-name: closeButton;
      animation-name: closeButton;
    }
    
    @-webkit-keyframes circleShape {
      from {
        -webkit-transform-origin: center;
        transform-origin: center;
        background-color:$btn-default-color;
      }
    
      to {
        -webkit-transform-origin: center;
        transform-origin: center;
        -webkit-transform: rotate3d(0, 0, 1, $btn-round-rotate);
        transform: rotate3d(0, 0, 1, $btn-round-rotate);
        background-color:$btn-close-color;
        border-radius: $btn-round-size;
      }
    }
    
    @keyframes circleShape {
      from {
        -webkit-transform-origin: center;
        transform-origin: center;
        background-color:$btn-default-color;
      }
    
      to {
        -webkit-transform-origin: center;
        transform-origin: center;
        -webkit-transform: rotate3d(0, 0, 1, $btn-round-rotate);
        transform: rotate3d(0, 0, 1, $btn-round-rotate);
        background-color:$btn-close-color;
        border-radius: $btn-round-size;
      }
    }
    
    .circleShape {
      -webkit-animation-name: circleShape;
      animation-name: circleShape;
    }
    
    @-webkit-keyframes squareShape {
      from {
        -webkit-transform-origin: center;
        transform-origin: center;
        -webkit-transform: rotate3d(0, 0, 1, $btn-round-rotate);
        transform: rotate3d(0, 0, 1, $btn-round-rotate);
        background-color:$btn-close-color;
        border-radius: $btn-round-size;
      }
    
      to {
        -webkit-transform-origin: center;
        transform-origin: center;
        background-color:$btn-default-color;
        border-radius: 0px;
      }
    }
    
    @keyframes squareShape {
      from {
        -webkit-transform-origin: center;
        transform-origin: center;
        -webkit-transform: rotate3d(0, 0, 1, $btn-round-rotate);
        transform: rotate3d(0, 0, 1, $btn-round-rotate);
        background-color:$btn-close-color;
        border-radius: $btn-round-size;
      }
    
      to {
        -webkit-transform-origin: center;
        transform-origin: center;
        background-color:$btn-default-color;
        border-radius: 0px;
      }
    }
    
    .squareShape {
      -webkit-animation-name: squareShape;
      animation-name: squareShape;
    }

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="btn-square">
      <span class="close"></span>
    </div> 
    
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:1)

没有必要使用javascript或关键帧来做到这一点 我觉得你的codepen很复杂!

以下是您的代码,已修改,并附有我的评论:

&#13;
&#13;
body {
  font-family: sans-serif;
}

.btn-square {
  width: 100px;
  height: 100px;
  background-color: blue;
  transition: background-color 1s; /* Added */
}

.close {
  position: relative;
  display: inline-block;
  width: 50px;
  height: 50px;
  top: 25px;
  left: 25px;
  overflow: hidden;
  transition: transform 1s; /* Added */
}

.close::before,
.close::after {
  content: '';
  position: absolute;
  height: 2px;
  width: 100%;
  top: 50%;
  left: 0;
  margin-top: -1px;
  background: #fff;
}

.close::before {
  transform: rotate(0deg);
}

.close::after {
  transform: rotate(90deg);
}

/* Added the below code */
.btn-square:hover {
  background-color: red;
}

.btn-square:hover .close {
  transform: rotate(-135deg);
}

/* And removed all other code */
&#13;
<div class="btn-square">
  <span class="close"></span>
</div>
&#13;
&#13;
&#13;

我希望它有所帮助。

答案 1 :(得分:-2)

您不需要JavaScript来实现这一目标。

&#13;
&#13;
@charset "UTF-8";
.closeBtn {
  transition: all 200ms ease-in-out;
  display: inline-block;
  width: 50px;
  height: 50px;
  background-color: teal;
  padding: 0;
}
.closeBtn:before {
  transition: all 200ms ease-in-out;
  display: block;
  height: 20px;
  width: 20px;
  line-height: 20px;
  content: "×";
  transform: rotate(45deg);
  margin: 0 auto;
}
.closeBtn:hover {
  border-radius: 100%;
  cursor: pointer;
  background-color: red;
}
.closeBtn:hover:before {
  transform: rotate(0deg);
}
&#13;
<button class="closeBtn" />
&#13;
&#13;
&#13;

Link to codepen for sass version