-
Notifications
You must be signed in to change notification settings - Fork 3.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
第 57 题:分析比较 opacity: 0、visibility: hidden、display: none 优劣和适用场景 #100
Comments
补充: opacity 场景: 自定义图片上传按钮 |
补充:株连性 |
display: none 会回流操作 性能开销较大, |
总结一下: 继承: 性能: 联系:它们都能让元素不可见 |
|
display:none指的是元素完全不陈列出来,不占据空间,涉及到了DOM结构,故产生reflow与repaint。 visibility:hidden指的是元素不可见但存在,保留空间,不影响结构,故只产生repaint(脱离文档流),子元素可以通过设置 visibility: visible; 来取消隐藏; opacity: 0:透明度为 100%,元素仍存在,不影响结构,不和动画属性一起则不会产生repaint(不脱离文档流),子元素并不能通过 opacity: 1 来取消隐藏; |
visibility:hidden 隐藏元素,但是元素本身还是存在的 |
是的,该过来了 |
总结下 display:none: dom根本不生成 不占据空间 子元素会被株连 重新设置 会引发重绘 和 回流 |
浏览器在渲染的时候生成的layout tree并不会包含display:none的元素,为什么还会引起回流呢 |
补充: |
1、display: none 触发回流,消耗性能较大 |
transition 是支持 visibility 和 opacity 的噢,CSS animated properties可查。
|
这道题绝大多数人的答案都是
|
适用场景呢 |
我觉得上面关于 opacity 重绘说的都有问题。所以来总结下:
以上可以使用 performance 验证!!! |
打个比方
|
补充一点,使用ol+li计数时,display:none是不参与计数的,而visibility:hidden参与计数 |
他说的容易引起歧义。准确地说应该是给元素设置 display: none 之后,会导致元素脱离布局树,触发重排。如果元素本身就是 display: none 了,那么针对它的其它操作不会再触发重排。 |
三种情况各有其使用场景,重点区别在于两点,
|
opacity: 0不会被子元素继承 |
The text was updated successfully, but these errors were encountered: