【问题标题】:Best practice to hide a svg element隐藏 svg 元素的最佳实践
【发布时间】:2015-07-08 17:12:39
【问题描述】:

我的屏幕上确实有许多 (>100) 个 SVG-<g> 元素,如果用户将鼠标悬停在其中一个上,则此 <g> 中包含的内部 img 元素应该变得可见。如果用户将鼠标悬停在<g> 之外,他们应该会再次变得不可见。

我看到有两种方法可以做到这一点:

  1. 在每个 mouseenter 上插入 <img>,并在 mouseleave 时将其删除。
  2. 在初始渲染期间在每个<g> 上插入元素,使它们最初不可见,然后在 mouseenter 上将它们变为可见。

哪一个是要走的路? 如果是#2,使用什么 CSS 属性?我找到了很多,包括

visibility : hidden;

display : none;

【问题讨论】:

标签: javascript css svg


【解决方案1】:

请记住,它们的工作方式不同,

visibility: hidden;

保留对象正在使用的空间,因此如果您的对象大小为 例如:宽度:250px,高度:200px,会显示一个空格。

另一方面:

display:none;

不会显示空白区域,您的对象仍然存在,但宽度:0px 高度:0px

再见!

【讨论】:

  • 这是错误的。 SVG 中没有“空间守恒”。那是 HTML 的东西。
  • w3schools.com/cssref/tryit.asp?filename=trycss_visibility 这是一个可见性的例子,可能与 svg 的工作方式不同,通常你不能将一些 css 属性添加到像 这样的 SVG 标签,而是使用 svg属性来做到这一点
  • OP 讨论的是 SVG 元素(SVG 中的元素)。 SVG 元素的行为与 HTML 不同。
  • 如果你想要空白空间,你可能需要一个容器来保留你需要的空间,然后你可以隐藏你的 SVG 元素developer.mozilla.org/en-US/docs/Web/SVG/Attribute/visibility
【解决方案2】:

两者都可以。就 SVG 而言,它们之间没有有效的区别。

有一个例外,那就是当它们与<tspan> 元素一起使用时。如果<tspan>visibility: hidden,它将留下一个空白。但是dispay: none 会完全忽略它。

对于其他所有用途,行为将是相同的,您可以使用其中任何一种。

【讨论】:

    猜你喜欢
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    • 2012-09-28
    • 2011-08-18
    • 1970-01-01
    • 1970-01-01
    • 2020-04-03
    • 2018-03-31
    相关资源
    最近更新 更多