【发布时间】:2015-09-05 15:42:36
【问题描述】:
我使用 HTML 中的纯 SVG 代码设计了一个 3 栏图标。我正在使用 CSS3 转换将顶部和底部条旋转成 X 形状。问题是它们围绕自己的中心旋转,但我需要它们围绕图标的中心旋转。为了解决这个问题,我调整了它们的 X/Y 坐标。
这会导致 Internet Explorer、Firefox 和 Safari 出现很多错误问题。 Chrome 似乎没问题,但显然我想以“正确”的方式对此进行编码,以便它适用于所有浏览器。
HTML
<svg id="burgericon" xmlns="http://www.w3.org/2000/svg" width="90" height="80">
<g class="icon">
<rect class="frstbar" x="10" y="10" width="70" height="12" rx="7" ry="7" fill="#414141"/>
<rect class="scndbar" x="10" y="35" width="70" height="12" rx="7" ry="7" fill="#414141"/>
<rect class="thrdbar" x="10" y="60" width="70" height="12" rx="7" ry="7" fill="#414141"/>
</g>
</svg>
CSS
.hamburger { display:block; text-align:center; }
svg { cursor:pointer; }
.frstbar, .scndbar, .thrdbar {
-webkit-transition: all 0.35s linear;
-moz-transition: all 0.35s linear;
-o-transition: all 0.35s linear;
transition: all 0.35s linear;
}
#burgericon.open .frstbar {
-webkit-transform: rotate(45deg);
-ms-transform: rotate(45deg);
transform: rotate(45deg);
}
#burgericon.open .thrdbar {
-webkit-transform: rotate(-45deg);
-ms-transform: rotate(-45deg);
transform: rotate(-45deg);
}
#burgericon.open .scndbar { width: 0; opacity: 0; }
JS
$('#burgericon').on('click', function(e) {
if($(this).attr('class') != "open") {
$(this).attr('class','open');
$('.frstbar').attr('x','25').attr('y','-5');
$('.thrdbar').attr('x','-35').attr('y','55');
}
else {
$(this).attr('class','default');
$('.frstbar').attr('x','10').attr('y','10');
$('.thrdbar').attr('x','10').attr('y','60');
}
});
我还认为更改 X/Y 坐标会导致模糊效果。我在下面添加了一个屏幕截图。首先,您将看到完整的 X 图标,然后您将看到动画恢复为默认值时的外观。
这些条不是完全笔直的,而是由于某种原因看起来弯曲了。
我还是 SVG 操作的新手,所以我不确定如何使用 CSS3/JS 正确旋转 <rect> 元素。任何正确方向的帮助或提示将不胜感激。
【问题讨论】:
-
codepen 可能不是最好的错误演示站点,因为它具有自动保存功能。是否也可以在此处发布您的标记(供未来的读者使用?)
-
很奇怪...即使在Chrome中,如果我尝试多次,有些会失败...
-
我不认为 linear
transition-timing-function提供了正确完成的过渡时间。在我有限的测试中,切换到默认的 ease 似乎可以解决它。 -
@jbutler483 当然!刚刚添加了所有代码,因此在没有 CodePen 的情况下可以从这篇文章中看到它。
标签: javascript jquery css svg css-transforms