我想创建一个切换button
,将其形状从加号变为减号。
仅使用CSS , ,无使用伪元素。
我的期望效果是让“+”符号中的垂直线收缩到水平线。
我知道这是可能的,但我不确定哪条路线最佳。我正在考虑使用height
做一些事情,但我担心line-height
浏览器会改变它在元素中的位置。
$('button').on("click", function(){
$(this).toggleClass('active');
});
button {
color: #ecf0f1;
background: #e74c3c;
width: 50px;
height: 50px;
border: 0;
font-size: 1.5em;
}
button span {
transition: all .75s ease-in-out;
}
button.active span {
/* Code to morph + to - */
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<button><span>+</span></button>
答案 0 :(得分:9)
最简单的方法是使+
和-
使用元素(使用伪元素最干净),然后将它们转换为“变形”:
button {
color: #ecf0f1;
background: #e74c3c;
width: 50px;
height: 50px;
border: 0;
font-size: 1.5em;
position: relative;
}
button span {
position: absolute;
transition: .3s;
background: white;
border-radius: 2px;
}
button span:first-of-type {
top: 25%;
bottom: 25%;
width: 10%;
left: 45%;
}
button span:last-of-type {
left: 25%;
right: 25%;
height: 10%;
top: 45%;
}
button:hover span:first-of-type, button:hover span:last-of-type {
transform: rotate(90deg);
}
button:hover span:last-of-type {
left: 50%;
right: 50%;
}
<button>
<span></span><span></span>
</button>
答案 1 :(得分:8)
注意:请停止编辑使答案不正确的问题
$('button').on("click", function(){
$(this).toggleClass('active');
});
&#13;
button {
color: #ecf0f1;
background: #e74c3c;
width: 70px;
height: 70px;
position: relative;
font-size: 50px;
cursor: pointer;
border: 0;
outline: 0;
padding: 0
}
.plus,
.minus {
color: #fff;
padding: 10px;
width: 70px;
height: 70px;
line-height: 50px;
display: block;
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
text-align: center;
box-sizing: border-box;
transition: .5s all ease-out;
}
.plus {
opacity: 1;
transform: rotate(0deg);
}
button.active .plus {
opacity: 0;
transform: rotate(90deg);
}
.minus {
opacity: 0;
transform: rotate(-90deg);
}
button.active .minus {
opacity: 1;
transform: rotate(0deg);
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css" rel="stylesheet" />
<button>
<span class="plus"><i class="fa fa-plus"></i></span>
<span class="minus"><i class="fa fa-minus"></i></span>
</button>
&#13;
将伪元素::before
与content
属性
$('button').on("click", function() {
$(this).toggleClass('active');
});
&#13;
button {
color: #ecf0f1;
background: #e74c3c;
width: 50px;
height: 50px;
border: 0;
font-size: 1.5em;
}
button span {
transition: all .75s ease-in-out;
position:relative
}
button span::before {
content:"+"
}
button.active span::before {
content:"-"
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<button><span></span></button>
&#13;
不需要span
,您可以使用text()
和jquery中的if语句
$('button').on("click", function() {
$(this).toggleClass('active');
$(this).text() == "+" ? $(this).text("-") : $(this).text("+");
});
&#13;
button {
color: #ecf0f1;
background: #e74c3c;
width: 50px;
height: 50px;
border: 0;
font-size: 1.5em;
transition: all .75s ease-in-out;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<button>+</button>
&#13;
答案 2 :(得分:2)
啊,我的坏,我忽略了OP不想使用任何伪 元素。但伪元素的最大优势在于您拥有更少的HTML代码和更清晰的结构。
它也是OP想要的另一个变形动画,但也许其他人可以使用它。
所以,如果你不介意,我会在那里提出我的建议。
也许是这样的?
<强> HTML 强>
<div class="button"></div>
<强> CSS 强>
* {
box-sizing: border-box;
}
html,
body {
height: 100%;
}
body {
margin: 0;
background: #343838;
}
.button {
position: absolute;
width: 55px;
height: 55px;
background: #70975B;
top: 50%;
left: 50%;
transform: translate(-50%, -50%) rotate(0deg);
border-radius: 50%;
cursor: pointer;
z-index: 100;
transition: 0.4s cubic-bezier(0.2, 0.6, 0.3, 1.1);
}
.button:after {
content: '';
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
height: 2px;
width: 50%;
background: white;
}
.button:before {
content: '';
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
height: 50%;
width: 2px;
background: white;
}
.button.clicked {
transform: translate(-50%, -50%) rotate(360deg);
background: #CC2A41;
}
.button.clicked:before {
width: 0;
}
<强>的jQuery 强>
$(".button").click(function() {
$(this).toggleClass("clicked");
});
这是一个有效的例子 http://codepen.io/svelts/pen/LkyZoZ
答案 3 :(得分:1)
试试这个
$('button').on("click", function() {
var $this = $(this);
$this.toggleClass('toggle');
if ($this.hasClass('toggle')) {
$this.text('+');
} else {
$this.text('-');
}
});
&#13;
button {
color: #ecf0f1;
background: #e74c3c;
width: 50px;
height: 50px;
border: 0;
font-size: 1.5em;
transition: all .75s ease-in-out;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<button class="toggle">+</button>
&#13;