css - 转换 SVG 元素(rotateX)的正确方法是什么?

标签 css svg css-transforms

我尝试用透视图转换 SVG 元素,发现它不起作用,但对 HTML 标记的相同转换可以正常工作。

jsfiddle 实验:https://jsfiddle.net/5ms7ubck/ (html 转换(红色元素)VS svg(灰色))。

.outer {
  perspective: 1000px;
}

.inner {
  transform: rotateX(60deg) perspective(1000px);
  transform-style: preserve-3d;
  transform-origin: 50% 50%;
}
<svg width="151px" height="151px" viewBox="0 0 151 151" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
      <defs></defs>
      <g class="outer" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
          <rect class="inner" width="150" height="150" fill="#D8D8D8"></rect>
      </g>
</svg>

我想找到转换 SVG 元素的正确方法。我还测试了 SVG Rotation in 3D 中的示例而且它也不起作用。

最佳答案

某些浏览器,如 Firefox,支持对 SVG 形状进行 3D 转换。例如,如果 Firefox 是 add overflow: visible,那么你需要做的就是让你的第一个 fiddle 工作。到 <svg>元素。

https://jsfiddle.net/gqsy14be/ (仅限火狐)

然而,这是一项实验性功能,目前您不能依赖跨浏览器支持。

但好消息是外层 <svg>元素被视为任何其他 HTML 元素,并且可以进行 3D 转换。

.test {
  display: block;
  width: 100px;
  margin: 20px;
}

.outer {
  perspective: 1000px;
}


.inner {
  transform: rotateX(60deg);
  transform-style: preserve-3d;
  transform-origin: 50% 50%;
}
<div class="test">
  <div class="outer">
    <svg width="151px" height="151px" viewBox="0 0 151 151" class="inner">
      <defs></defs>
      <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
          <rect width="150" height="150" fill="#D8D8D8"></rect>
      </g>
    </svg>
  </div>
</div>

<div class="test">
  <div class="outer">
    <div class="inner" style="background-color: red; width: 150px; height: 150px;">

    </div>
  </div>
</div>

但显然这对您尝试在 SVG 中制作 3D 实体没有帮助。您只能变换 SVG 的平面。

关于css - 转换 SVG 元素(rotateX)的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56532720/

相关文章:

css - Magento 从特定 View 中删除 css 或 js

javascript - 无法让 svg 元素完全跟随鼠标

css - 如何切换 scaleX 以翻转没有动画的图像

css - 为什么在父级上应用 CSS 过滤器会破坏子级定位?

css - 为什么要转换:translatex in this css class does not move the div sideway?

javascript - 允许用户获取部分网页的 'screenshot'

javascript - 使我的网站菜单触摸友好(下拉)

cross-browser - 带有 css 三 Angular 形的边界半径

javascript - 如何在 CSS/JAVASCRIPT 中将图像转换为灰度

svg - 在 JavaFX 上的按钮中加载 SVG 文件