【发布时间】:2019-06-24 04:08:10
【问题描述】:
目标是创建一个笛卡尔空间,用倒置的垂直坐标系正确显示对象和文本,使文本不会倒置显示。我不想将文本嵌入到父 <g> 元素中。
这个 sn-p 有效:
<style>
svg.cartesian { transform: scaleY(-1); }
svg.cartesian text { transform: scaleY(-1); }
</style>
<svg class="cartesian" viewBox="-100 -100 200 200" preserveAspectRatio="xMidYMid meet">
<path d="M0 -100 V 200" stroke="green" stroke-width="0.5" stroke-opacity="0.5" />
<path d="M-100 0 H 200" stroke="green" stroke-width="0.5" stroke-opacity="0.5" />
<circle cx=20 cy=20 r=1 />
<g transform="translate(20, 20)">
<text>(20, 20)</text>
</g>
</svg>
但是,如果将translate() 命令移动到<text> 元素内,它就不起作用;文本未翻译到新位置:
<style>
svg.cartesian { transform: scaleY(-1); }
svg.cartesian text { transform: scaleY(-1); }
</style>
<svg class="cartesian" viewBox="-100 -100 200 200" preserveAspectRatio="xMidYMid meet">
<path d="M0 -100 V 200" stroke="green" stroke-width="0.5" stroke-opacity="0.5" />
<path d="M-100 0 H 200" stroke="green" stroke-width="0.5" stroke-opacity="0.5" />
<circle cx=20 cy=20 r=1 />
<text transform="translate(20, 20)">(20, 20)</text>
</svg>
为什么?
【问题讨论】:
-
@RobertLongson 我有点困惑:在这两种情况下只有一个 svg 转换。你的意思是CSS转换的应用顺序和每个案例之间的svg转换变化......?
-
@RobertLongson 好的,我明白了。然而,在第二种情况下,翻译命令似乎根本没有发生。是不是被 CSS 转换取消了...?
-
@RobertLongson 当你说“它确实发生了”时,你是说 - 除了应用了两个变换和最后应用的 CSS - 应用了第二个 (CSS) 变换original 位置,好像第一次(svg 翻译)转换从未发生过?因为很明显没有对最终图像应用任何翻译。这就是我所说的“被 CSS 转换取消”的意思。
-
我建议你自己试验一下然后找出答案。
-
@RobertLongson 虽然我同意顺序很重要,但这里的问题是另一回事,是 CSS 对转换的简单覆盖。