【发布时间】:2018-09-29 21:36:51
【问题描述】:
我正在寻找一种简单的方法来使给定svg 元素中的坐标系从右上角开始,而不是从左上角开始。这意味着 X 轴被翻转,因此增加元素的 x 属性会将其渲染到更左侧,增加 y 属性会将其渲染到更底部。
我玩过scale 和viewBox,但是:
-
scale几乎解决了这个问题,但它并不适合我的用例,因为它还会翻转我渲染的文本 -
viewBox似乎不适用于height="100%"和width="100%"。对于我的用例,我认为我不能对 SVG 的height和width进行硬编码,因为我需要它能够在许多不同的分辨率和屏幕尺寸下使用。
这个question 表示它通过matrix 转换解决了Y 轴的相同问题。我环顾四周,试图计算 X 轴的等效值,但没有成功。
这是我想要实现的一个示例:
<svg style="border: 1px black solid;" height="100%" width="100%">
<g>
<g>
<rect fill="#F0BC40" width="70" height="12" x="0" y="30"></rect>
<text fill="black" font-size="10px" text-anchor="middle" x="35" y="29">7</text>
</g>
<g>
<rect fill="orange" width="50" height="12" x="72" y="30"></rect>
<text fill="black" font-size="10px" text-anchor="middle" x="97" y="29">5</text>
</g>
<g>
<rect fill="orange" width="40" height="12" x="124" y="30"></rect>
<text fill="black" font-size="10px" text-anchor="middle" x="144" y="29">4</text>
</g>
<g>
<rect fill="red" width="50" height="12" x="166" y="30"></rect>
<text fill="black" font-size="10px" text-anchor="middle" x="191" y="29">5</text>
</g>
<rect fill="#52575E" width="2" height="16" x="70" y="28"></rect>
<rect fill="#52575E" width="2" height="16" x="122" y="28"></rect>
<rect fill="#52575E" width="2" height="16" x="164" y="28"></rect>
</g>
</svg>
如您所见,我希望从右侧渲染此堆叠条,红色条位于最左侧(因此基本上堆叠条会被翻转)
我也在 Elm 中执行此操作,因此我无法访问 DOM 来检查元素的宽度、高度或坐标(我正在以函数方式计算所有内容)。
如果有人能帮助我实现这一目标,我将不胜感激。
【问题讨论】:
标签: svg graphics elm coordinate-systems coordinate-transformation