如何围绕字形的垂直中间或中心点应用 CSS 旋转过渡
How to apply CSS rotate transition around glyph's vertical middle or centerpoint
我有一个隐藏面板,它位于屏幕外,直到 div
被点击(见附件,可运行的代码片段)。
单击此 div
时,面板出现在屏幕上并且 div
内容(单个字形或字符)旋转 180 度。
问题是旋转原点围绕着某个点而不是字形的垂直中间。发生旋转时,字形会向上移动几个像素。
如何测量字形属性并设置旋转原点,使其在旋转时围绕字形的垂直中间或中心旋转?
var show_panel = function() {
var e = document.getElementById("panel");
if (e.classList) {
e.classList.toggle("show");
}
else {
var classes = e.className;
if (classes.indexOf("show") >= 0) {
e.className = classes.replace("show", "");
}
else {
e.className = classes + " show";
}
}
};
body {
margin: 0;
padding: 0;
overflow: hidden;
font-family: system, -apple-system, ".SFNSDisplay-Regular", "Helvetica Neue", "Helvetica", sans-serif !important;
}
#panel {
width: 300px;
/* border: 2px solid rgba(33, 33, 33, 0.0933); */
background-color: rgba(33, 33, 33, 0.0933);
position: fixed;
top: 60px;
left: -275px;
padding: 5px;
-webkit-transition: all 0.5s ease-in-out;
-moz-transition: all 0.5s ease-in-out;
-o-transition: all 0.5s ease-in-out;
transition: all 0.5s ease-in-out;
}
#panel.show {
left: -5px;
}
#panel .controller {
position: absolute;
right: 5px;
text-decoration: none;
color: black;
font-weight: bold;
font-size: 2em;
-webkit-transition: all 0.5s ease-in-out;
-moz-transition: all 0.5s ease-in-out;
-o-transition: all 0.5s ease-in-out;
transition: all 0.5s ease-in-out;
}
#panel.show .controller {
-webkit-transform: rotate(180deg);
-moz-transform: rotate(180deg);
-o-transform: rotate(180deg);
transform: rotate(180deg);
}
<html lang="en">
<body>
<p class="panel_description">Click on the "x" to trigger showing the panel. Note how the "x" does not rotate on the vertical midpoint of the glyph, but instead moves upwards</p>
<div id="panel">
<div onclick="show_panel();" class="controller">x</div>
</div>
</body>
</html>
简单:当你想要一个图标时不要使用字形。
一个图标可以很容易的做成旋转对称的,翻转的时候不会"move up"。
要准确了解您的 "x" 不对称的原因,请查看:
.x {
display: inline-block;
background: pink;
}
.flipped {
transform: rotate(180deg);
}
<div class="x">x</div>
<div class="x flipped">x</div>
您可以通过设置 css 属性transform-origin: 50% 50%
来实现它,它将提供围绕元素中心的变换。我希望这有效。
我有一个隐藏面板,它位于屏幕外,直到 div
被点击(见附件,可运行的代码片段)。
单击此 div
时,面板出现在屏幕上并且 div
内容(单个字形或字符)旋转 180 度。
问题是旋转原点围绕着某个点而不是字形的垂直中间。发生旋转时,字形会向上移动几个像素。
如何测量字形属性并设置旋转原点,使其在旋转时围绕字形的垂直中间或中心旋转?
var show_panel = function() {
var e = document.getElementById("panel");
if (e.classList) {
e.classList.toggle("show");
}
else {
var classes = e.className;
if (classes.indexOf("show") >= 0) {
e.className = classes.replace("show", "");
}
else {
e.className = classes + " show";
}
}
};
body {
margin: 0;
padding: 0;
overflow: hidden;
font-family: system, -apple-system, ".SFNSDisplay-Regular", "Helvetica Neue", "Helvetica", sans-serif !important;
}
#panel {
width: 300px;
/* border: 2px solid rgba(33, 33, 33, 0.0933); */
background-color: rgba(33, 33, 33, 0.0933);
position: fixed;
top: 60px;
left: -275px;
padding: 5px;
-webkit-transition: all 0.5s ease-in-out;
-moz-transition: all 0.5s ease-in-out;
-o-transition: all 0.5s ease-in-out;
transition: all 0.5s ease-in-out;
}
#panel.show {
left: -5px;
}
#panel .controller {
position: absolute;
right: 5px;
text-decoration: none;
color: black;
font-weight: bold;
font-size: 2em;
-webkit-transition: all 0.5s ease-in-out;
-moz-transition: all 0.5s ease-in-out;
-o-transition: all 0.5s ease-in-out;
transition: all 0.5s ease-in-out;
}
#panel.show .controller {
-webkit-transform: rotate(180deg);
-moz-transform: rotate(180deg);
-o-transform: rotate(180deg);
transform: rotate(180deg);
}
<html lang="en">
<body>
<p class="panel_description">Click on the "x" to trigger showing the panel. Note how the "x" does not rotate on the vertical midpoint of the glyph, but instead moves upwards</p>
<div id="panel">
<div onclick="show_panel();" class="controller">x</div>
</div>
</body>
</html>
简单:当你想要一个图标时不要使用字形。
一个图标可以很容易的做成旋转对称的,翻转的时候不会"move up"。
要准确了解您的 "x" 不对称的原因,请查看:
.x {
display: inline-block;
background: pink;
}
.flipped {
transform: rotate(180deg);
}
<div class="x">x</div>
<div class="x flipped">x</div>
您可以通过设置 css 属性transform-origin: 50% 50%
来实现它,它将提供围绕元素中心的变换。我希望这有效。