如何旋转伪元素css
How to rotate pseudo element css
我想使用 css 伪元素(作为切换指示器)重新创建此图标:
我使用 ::after, ::before
创建了必要的伪元素,并尝试使用 transform: rotate(90deg)
旋转它们。
如何让他们绕着自己的中心旋转?我试过 transform-origin: 50% 50%;
,但没有用。现在,两个伪元素都得到了相同的 right: 10px;
但它们并没有放在彼此之上,而是彼此相邻。
你可以检查这个JS FIDDLE来说明问题。
将#pseudo::after的样式修改为right: 0;
#div {
background: blue;
width: 80px;
height: 80px;
transform: rotate(45deg);
}
/* tested but not working */
#pseudo::after,
#pseudo::before {
/* transform-origin: 50% 50%; */
}
#pseudo::after {
content: '›';
font-size: 50px;
color: green;
right: 0;
position: absolute;
transform: rotate(90deg);
top: 40px;
}
#pseudo::before {
content: '›';
font-size: 50px;
position: absolute;
color: green;
right: 10px;
top: 10px;
transform: rotate(-90deg);
}
<div id="div"></div>
<div id="pseudo"></div>
首先你可以使用 :before
和 :after
伪元素并创建这样的形状 DEMO
之后,您可以旋转 45deg
的父元素并获得所需的结果。
.el {
margin: 50px;
position: relative;
transform: rotate(45deg);
display: inline-block;
}
.el:before,
.el:after {
content: '';
width: 30px;
height: 30px;
position: absolute;
}
.el:before {
border-top: 4px solid black;
border-left: 4px solid black;
top: -10px;
left: -10px;
}
.el:after {
border-bottom: 4px solid black;
border-right: 4px solid black;
top: 10px;
left: 10px;
}
<div class="el"></div>
更新:您还可以像这样在:hover
上添加一些过渡
.el {
margin: 50px;
position: relative;
transform: rotate(45deg);
display: inline-block;
cursor: pointer;
}
.el:before,
.el:after {
content: '';
width: 30px;
height: 30px;
position: absolute;
transition: all 0.3s ease-in;
}
.el:before {
border-top: 4px solid black;
border-left: 4px solid black;
top: -10px;
left: -10px;
}
.el:after {
border-bottom: 4px solid black;
border-right: 4px solid black;
top: 10px;
left: 10px;
}
.el:hover:before {
top: -15px;
left: -15px;
}
.el:hover:after {
top: 15px;
left: 15px;
}
<div class="el"></div>
transform-origin
工作正常,只是
a) 50% 50%(对象的中心)是默认值,并且
b) 您必须将框的内容居中。这有点棘手,因为您使用的图标不需要完整的行高。尝试添加
::before, ::after {
padding-bottom: .17em;
}
我想使用 css 伪元素(作为切换指示器)重新创建此图标:
我使用 ::after, ::before
创建了必要的伪元素,并尝试使用 transform: rotate(90deg)
旋转它们。
如何让他们绕着自己的中心旋转?我试过 transform-origin: 50% 50%;
,但没有用。现在,两个伪元素都得到了相同的 right: 10px;
但它们并没有放在彼此之上,而是彼此相邻。
你可以检查这个JS FIDDLE来说明问题。
将#pseudo::after的样式修改为right: 0;
#div {
background: blue;
width: 80px;
height: 80px;
transform: rotate(45deg);
}
/* tested but not working */
#pseudo::after,
#pseudo::before {
/* transform-origin: 50% 50%; */
}
#pseudo::after {
content: '›';
font-size: 50px;
color: green;
right: 0;
position: absolute;
transform: rotate(90deg);
top: 40px;
}
#pseudo::before {
content: '›';
font-size: 50px;
position: absolute;
color: green;
right: 10px;
top: 10px;
transform: rotate(-90deg);
}
<div id="div"></div>
<div id="pseudo"></div>
首先你可以使用 :before
和 :after
伪元素并创建这样的形状 DEMO
之后,您可以旋转 45deg
的父元素并获得所需的结果。
.el {
margin: 50px;
position: relative;
transform: rotate(45deg);
display: inline-block;
}
.el:before,
.el:after {
content: '';
width: 30px;
height: 30px;
position: absolute;
}
.el:before {
border-top: 4px solid black;
border-left: 4px solid black;
top: -10px;
left: -10px;
}
.el:after {
border-bottom: 4px solid black;
border-right: 4px solid black;
top: 10px;
left: 10px;
}
<div class="el"></div>
更新:您还可以像这样在:hover
上添加一些过渡
.el {
margin: 50px;
position: relative;
transform: rotate(45deg);
display: inline-block;
cursor: pointer;
}
.el:before,
.el:after {
content: '';
width: 30px;
height: 30px;
position: absolute;
transition: all 0.3s ease-in;
}
.el:before {
border-top: 4px solid black;
border-left: 4px solid black;
top: -10px;
left: -10px;
}
.el:after {
border-bottom: 4px solid black;
border-right: 4px solid black;
top: 10px;
left: 10px;
}
.el:hover:before {
top: -15px;
left: -15px;
}
.el:hover:after {
top: 15px;
left: 15px;
}
<div class="el"></div>
transform-origin
工作正常,只是
a) 50% 50%(对象的中心)是默认值,并且
b) 您必须将框的内容居中。这有点棘手,因为您使用的图标不需要完整的行高。尝试添加
::before, ::after {
padding-bottom: .17em;
}