可见性:隐藏与显示:无与不透明度:0

IT技术 javascript css performance animation render
2021-02-19 16:49:16

我目前正在开始一个动画项目。在该项目中,我将有超过 40000div秒并迭代地为它们设置动画。如果divs 中的任何一个处于被动状态(即它至少有 2 秒没有动画),我将不会显示它们以提高动画性能。

问题是:哪个css属性最适合这个?

.passive1{
   display:none
}

.passive2{
    visibility:hidden;
}

.passive3{
    opacity:0;
}

以及如何衡量渲染性能,如 fps、gpu 使用情况?

6个回答

它们都使元素不可见,但在是否占用空间和消耗点击方面有所不同

+--------------------+----------------+-----------------+
| Property           | occupies space | consumes clicks |
+--------------------+----------------+-----------------+
| opacity: 0         |        ✓       |        ✓        |
+--------------------+----------------+-----------------+
| visibility: hidden |        ✓       |        ✗        |
+--------------------+----------------+-----------------+
| display: none      |        ✗       |        ✗        |
+--------------------+----------------+-----------------+

✓: yes
✗: no

当我们说它消耗点击时,这意味着它也消耗其他指针事件,如 ondblclick、onmousedown、onmousemove 等。

本质上,“可见性:隐藏”的行为类似于“不透明度:0”和“指针事件:无”的组合。

我应该打印这张桌子并将它贴在我电脑显示器的边缘。
2021-04-20 16:49:16
解释再好不过了
2021-04-29 16:49:16
请注意,可以使用例如 jQuery 来触发对不消耗点击的元素的点击
2021-05-03 16:49:16
完美答案!很有帮助。
2021-05-12 16:49:16

此处找到的答案将回答您的第一个问题(很可能display:none是因为空间已完全折叠)。

你的第二个问题,工具,比如将可能对您有用。然而,40,000 个 div 听起来太多了,使用 canvas 或 SVG(例如,使用KineticJS库来处理动画 - 转换、旋转、缩放等)可能会为您提供更好的性能

很棒的答案!!欣赏您如何首先回答问题,然后提出更好的方法。
2021-04-24 16:49:16
适当的操作是将问题标记为重复,而不是链接到重复的答案。
2021-05-05 16:49:16
kaizou.org/2011/06/...是 404,我已经编辑了答案。相应地进行编辑。
2021-05-19 16:49:16

如果使用 display:none 或visibility:hidden ,则性能将是一个问题,因为它们会在大多数浏览器中触发绘制和布局,这意味着您的浏览器将在这两个更改时重新绘制视口,因此我会推荐不透明度,但仍然会为该数量的 div仍然没有达到预期的效果,您可以使用名为 html-gl 的库尝试 webgl,该库在 webgl 中呈现您的 div 检查https://github.com/PixelsCommander/HTML-GL

为什么可见性变化会触发布局?
2021-05-07 16:49:16
谢谢!这是一个很好的资源👍
2021-05-09 16:49:16
这是正确答案。Opacity 0 解决了大部分问题
2021-05-12 16:49:16
@gaurav5430 因为特定浏览器是如何实现的,以了解哪个属性更改会触发绘制/布局/合成,请在此处csstriggers.com
2021-05-20 16:49:16

这是来自各种答案的经过验证的信息的汇编。

这些 CSS 属性中的每一个实际上都是独一无二的。除了使元素不可见之外,它们还具有以下附加效果:

  1. 折叠元素通常占用的空间
  2. 响应事件(例如,单击、按键)
  3. 参加taborder
                     折叠事件标签
不透明度:0 否 是 是
可见性:隐藏 否 否 否
可见性:折叠 * 否 否
显示:无 是 否 否

* 在表格元素内是,否则否。

来自链接

display:none将隐藏整个元素并将其从布局空间中删除,而visibility:hidden隐藏一个元素但占用与以前相同的空间。
如果要创建透明度或淡入淡出效果,可以使用不透明度。