更改 css 形状 onclick
Change css shape onclick
我有两种形状,一种是直线,一种是十字。当我点击 LINE 时,它变成了 CROSS。我只想在单击时获得流体形状变换。
线
#linea {
background: black;
height: 30px;
position: relative;
width: 2px;
}
交叉
#cross {
background: black;
height: 30px;
position: relative;
width: 2px;
-webkit-transform: rotate(45deg);
}
#cross:after {
background: black;
content: "";
height: 2px;
left: -14px;
position: absolute;
top: 14px;
width:30px;
}
这是 JSFIDDLE — https://jsfiddle.net/nk2w9w3z/3/
感谢您的帮助。
F.
您应该在声明中添加 transition
。
CSS Transitions allows property changes in CSS values to occur
smoothly over a specified duration.
例如;
div {
height: 30px;
width: 30px;
background: lightgray;
position: relative;
}
div:before,
div:after {
content: "";
position: absolute;
height: 100%;
width: 0;
border-left: 2px solid black;
left: 50%;
-webkit-transform: translateX(-50%);
-moz-transform: translateX(-50%);
-ms-transform: translateX(-50%);
transform: translateX(-50%);
transition: all 0.8s;
}
div:hover:before {
-webkit-transform: translateX(-50%) rotate(45deg);
-moz-transform: translateX(-50%) rotate(45deg);
-ms-transform: translateX(-50%) rotate(45deg);
transform: translateX(-50%) rotate(45deg);
}
div:hover:after {
-webkit-transform: translateX(-50%) rotate(-45deg);
-moz-transform: translateX(-50%) rotate(-45deg);
-ms-transform: translateX(-50%) rotate(-45deg);
transform: translateX(-50%) rotate(-45deg);
}
<div></div>hover this gray box
要添加此样式而不是 'hover'(即使其 可点击),您可以改用 class 样式,并使用 javascript/jquery:
$(document).ready(function() {
$('div').click(function() {
$('div').toggleClass("opened");
});
});
div {
height: 30px;
width: 30px;
background: lightgray;
position: relative;
cursor: pointer;
}
div:before,
div:after {
content: "";
position: absolute;
height: 100%;
width: 0;
border-left: 2px solid black;
left: 50%;
-webkit-transform: translateX(-50%);
-moz-transform: translateX(-50%);
-ms-transform: translateX(-50%);
transform: translateX(-50%);
transition: all 0.8s;
}
.opened:before {
-webkit-transform: translateX(-50%) rotate(45deg);
-moz-transform: translateX(-50%) rotate(45deg);
-ms-transform: translateX(-50%) rotate(45deg);
transform: translateX(-50%) rotate(45deg);
}
.opened:after {
-webkit-transform: translateX(-50%) rotate(-45deg);
-moz-transform: translateX(-50%) rotate(-45deg);
-ms-transform: translateX(-50%) rotate(-45deg);
transform: translateX(-50%) rotate(-45deg);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div></div>
click this gray box
备注
为转换 属性 添加前缀将是 required for cross browser compatibility. The Transition property 根本不需要添加前缀。
使用CSS 转换。您在这里有一个指南:http://www.w3schools.com/css/css3_transitions.asp
您的 CSS
中需要类似 transition: all 1s;
的内容
这样做:
function changeShape(){
var ele = document.getElementById("shape");
(ele.className === "linea") ? ele.className = "cross" : ele.className = "linea";
}
div{
-webkit-transition: all 1s ease; /* Firefox */
-moz-transition: all 1s ease; /* WebKit */
-o-transition: all 1s ease; /* Opera */
transition: all 1s ease; /* Standard */
margin-left: auto;
margin-right: auto;
}
.linea {
background: black;
height: 30px;
position: relative;
width: 2px;}
.cross {
background: black;
height: 30px;
position: relative;
width: 2px;
-ms-transform: rotate(45deg); /* IE 9 */
-webkit-transform: rotate(45deg); /* Chrome, Safari, Opera */
transform: rotate(45deg);
}
.cross:after {
background: black;
content: "";
height: 2px;
left: -14px;
position: absolute;
top: 14px;
width:30px;
}
<div id="shape" class="linea"></div>
<button onclick="changeShape()">Change the shape</button>
解释:
我们在 html 部分做的事情很简单。我创建了一个 "div",它最初是一个 "line"(注意 class)。之后我们有一个按钮,它只是一个虚拟按钮来显示代码是如何工作的。
好的,在 "onclick" 我们执行 changeShape() 函数。此函数只是将 class 从 "cross" 更改为 "linea",反之亦然。
最有趣的部分是 CSS。我已经使用了你的两个 classes(直线和十字)并将 "transitions" 添加到 div 本身。转换确保您将此 "smooth" 转换为不同的形状。 http://www.w3schools.com/css/css3_transitions.asp
我有两种形状,一种是直线,一种是十字。当我点击 LINE 时,它变成了 CROSS。我只想在单击时获得流体形状变换。
线
#linea {
background: black;
height: 30px;
position: relative;
width: 2px;
}
交叉
#cross {
background: black;
height: 30px;
position: relative;
width: 2px;
-webkit-transform: rotate(45deg);
}
#cross:after {
background: black;
content: "";
height: 2px;
left: -14px;
position: absolute;
top: 14px;
width:30px;
}
这是 JSFIDDLE — https://jsfiddle.net/nk2w9w3z/3/
感谢您的帮助。 F.
您应该在声明中添加 transition
。
CSS Transitions allows property changes in CSS values to occur smoothly over a specified duration.
例如;
div {
height: 30px;
width: 30px;
background: lightgray;
position: relative;
}
div:before,
div:after {
content: "";
position: absolute;
height: 100%;
width: 0;
border-left: 2px solid black;
left: 50%;
-webkit-transform: translateX(-50%);
-moz-transform: translateX(-50%);
-ms-transform: translateX(-50%);
transform: translateX(-50%);
transition: all 0.8s;
}
div:hover:before {
-webkit-transform: translateX(-50%) rotate(45deg);
-moz-transform: translateX(-50%) rotate(45deg);
-ms-transform: translateX(-50%) rotate(45deg);
transform: translateX(-50%) rotate(45deg);
}
div:hover:after {
-webkit-transform: translateX(-50%) rotate(-45deg);
-moz-transform: translateX(-50%) rotate(-45deg);
-ms-transform: translateX(-50%) rotate(-45deg);
transform: translateX(-50%) rotate(-45deg);
}
<div></div>hover this gray box
要添加此样式而不是 'hover'(即使其 可点击),您可以改用 class 样式,并使用 javascript/jquery:
$(document).ready(function() {
$('div').click(function() {
$('div').toggleClass("opened");
});
});
div {
height: 30px;
width: 30px;
background: lightgray;
position: relative;
cursor: pointer;
}
div:before,
div:after {
content: "";
position: absolute;
height: 100%;
width: 0;
border-left: 2px solid black;
left: 50%;
-webkit-transform: translateX(-50%);
-moz-transform: translateX(-50%);
-ms-transform: translateX(-50%);
transform: translateX(-50%);
transition: all 0.8s;
}
.opened:before {
-webkit-transform: translateX(-50%) rotate(45deg);
-moz-transform: translateX(-50%) rotate(45deg);
-ms-transform: translateX(-50%) rotate(45deg);
transform: translateX(-50%) rotate(45deg);
}
.opened:after {
-webkit-transform: translateX(-50%) rotate(-45deg);
-moz-transform: translateX(-50%) rotate(-45deg);
-ms-transform: translateX(-50%) rotate(-45deg);
transform: translateX(-50%) rotate(-45deg);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div></div>
click this gray box
备注
为转换 属性 添加前缀将是 required for cross browser compatibility. The Transition property 根本不需要添加前缀。
使用CSS 转换。您在这里有一个指南:http://www.w3schools.com/css/css3_transitions.asp
您的 CSS
中需要类似transition: all 1s;
的内容
这样做:
function changeShape(){
var ele = document.getElementById("shape");
(ele.className === "linea") ? ele.className = "cross" : ele.className = "linea";
}
div{
-webkit-transition: all 1s ease; /* Firefox */
-moz-transition: all 1s ease; /* WebKit */
-o-transition: all 1s ease; /* Opera */
transition: all 1s ease; /* Standard */
margin-left: auto;
margin-right: auto;
}
.linea {
background: black;
height: 30px;
position: relative;
width: 2px;}
.cross {
background: black;
height: 30px;
position: relative;
width: 2px;
-ms-transform: rotate(45deg); /* IE 9 */
-webkit-transform: rotate(45deg); /* Chrome, Safari, Opera */
transform: rotate(45deg);
}
.cross:after {
background: black;
content: "";
height: 2px;
left: -14px;
position: absolute;
top: 14px;
width:30px;
}
<div id="shape" class="linea"></div>
<button onclick="changeShape()">Change the shape</button>
解释:
我们在 html 部分做的事情很简单。我创建了一个 "div",它最初是一个 "line"(注意 class)。之后我们有一个按钮,它只是一个虚拟按钮来显示代码是如何工作的。
好的,在 "onclick" 我们执行 changeShape() 函数。此函数只是将 class 从 "cross" 更改为 "linea",反之亦然。
最有趣的部分是 CSS。我已经使用了你的两个 classes(直线和十字)并将 "transitions" 添加到 div 本身。转换确保您将此 "smooth" 转换为不同的形状。 http://www.w3schools.com/css/css3_transitions.asp