【问题标题】:Transform is not triggered again on window resize窗口调整大小时不会再次触发变换
【发布时间】:2019-10-27 23:31:50
【问题描述】:

关注How to make svg RTL
我使用以下方法制作了我的 svg RTL:

transform: translate(100%, 0) scale(-1, 1);  

但是当我尝试调整浏览器窗口的大小时,transform 未应用并且行原点发生变化!
Here is an example showing this issue
复制:
1- 改变窗口大小(可能会变大),你可以看到线原点没有停留在0 0
2- 使用inspect element就行,取消勾选再勾选css类中的“transform”,元素返回到它的预期位置

通过执行我描述的操作,很明显转换不会应用于调整大小。

【问题讨论】:

    标签: css reactjs svg


    【解决方案1】:

    您可能希望使用viewBox 来定义 SVG 视口的位置和尺寸:

    function App() {
      return (
        <div className="App">
          <div>
            Please resize the browser window, as you can see the line doesnt remain
            on 0, 0
          </div>
          <svg viewBox="0 0 200 200" vector-effect="non-scaling-stroke">
            <g className="svgRTL">
              <path
                stroke="green"
                strokeWidth="3"
                fill="none"
                d="M 0 0 L 100 100"
              />
            </g>
          </svg>
        </div>
      );
    }
    

    【讨论】:

    • 我明白了,所以使用 viewBox 解决了这个问题!谢谢,我可以制作 viewBox width: 100% height: 100% 吗?
    • svgwidth,height 属性,随意使用:&lt;svg viewBox="0 0 500 500" width="100%" height="100%"&gt; 默认值为auto
    • 我正在使用svg 旁边的div 创建类似工作流程图的东西,当我给svg 一个viewBox 时,它会导致线条的粗细发生变化在调整大小时,它也破坏了程序的其余部分,因为我对整个事情都使用了绝对位置,我有什么选择?
    • 使用viewBox 例如viewBox="0 0 200 100" 并保持相同的线宽使用vector-effect="non-scaling-stroke"
    • @enxaneta 您的解决方案意味着vector-effect="non-scaling-stroke" 解决了我的问题,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-17
    • 1970-01-01
    相关资源
    最近更新 更多