我需要一个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;
答案 0 :(得分:1)
没有必要使用javascript或关键帧来做到这一点 我觉得你的codepen很复杂!
以下是您的代码,已修改,并附有我的评论:
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;
我希望它有所帮助。
答案 1 :(得分:-2)
您不需要JavaScript来实现这一目标。
@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;