svg - 颠倒过来。图形

时间:2013-11-08 21:29:36

标签: css html5 svg

我正在尝试制作一个简单的svg示例 - 创建条形图。 但是,我并没有清楚地了解它的工作原理。我旋转了现有图表 颠倒但似乎有一个小的抵消。相应的jsfiddle在这里 - http://jsfiddle.net/rhvP8/2/

  <div style="width:300px;height:300px;">
  <svg xmlns="http://www.w3.org/2000/svg" version="1.1" style="width:100%;height:100%" viewBox="0 0 300 300">
    <g>
        <rect  width="14.55" height="40%" x="0" y="0" fill="black"></rect>
        <rect  width="14.55" height="20%" x="50" y="0" fill="green"></rect>
        <rect  width="14.55" height="80%" x="100" y="0" fill="red"></rect>
        <rect  width="14.55" height="90%" x="150" y="0" fill="yellow"></rect>
        <rect  width="14.55" height="10%" x="200" y="0" fill="pink"></rect>
        <rect  width="14.55" height="60%" x="250" y="0" fill="orange"></rect>
    </g>
</svg> 
</div>
<div style="width:300px;height:300px;">
 <svg xmlns="http://www.w3.org/2000/svg" version="1.1" style="width:100%;height:100%" viewBox="0 0 300 300">
    <g transform="rotate(180)">
        <rect  width="14.55" height="40" x="-50" y="-300" fill="black"></rect>
        <rect  width="14.55" height="20" x="-100" y="-300" fill="green"></rect>
        <rect  width="14.55" height="35" x="-150" y="-300" fill="red"></rect>
        <rect  width="14.55" height="90" x="-200" y="-300" fill="yellow"></rect>
        <rect  width="14.55" height="10" x="-250" y="-300" fill="pink"></rect>
        <rect  width="14.55" height="60" x="-300" y="-300" fill="orange"></rect>
    </g>
    </svg> 
</div>

3 个答案:

答案 0 :(得分:1)

您需要记住的是rotate()变换将围绕坐标(0,0)旋转对象,在这种情况下,坐标是图的左上角。由于图形宽300p,高300px,旋转180°会使图形旋转超出左上角。可以使用translate变换重新调整坐标,以便绘图再次出现在视图框中。希望这个例子能够解释:

Illustration of rotate and translate transforms in an SVG

这是一个更新的JSfiddle,其他一些修复程序:http://jsfiddle.net/rhvP8/4/

答案 1 :(得分:1)

squeamish解决方案的另一种选择就是使用旋转原点的旋转版本:rotate(angle x y)

由于您知道图表是300x300,因此使用rotate(180 150 150)可以正常工作。

Demo here

答案 2 :(得分:0)

简单方法:scaleY() CSS 函数,定义了一种沿 y 轴(垂直)调整元素大小的变换。

svg {
  transform: scaleY(-1);
}

在此处查看浏览器兼容性:https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/scaleY()#browser_compatibility