css元素隐藏

元素隐藏方法:

1.display:none;

2.opacity:0;

3.visibility:hidden;

4.position:absolute;left:无穷大

方法1,2,3的区别:

1.空间占据

  display:none  隐藏后不会占据额外的空间,但是它会产生回流和重绘

  opacity:0,visibility:hidden  隐藏后仍然会占据着空间,只会产生页面重绘

2.子元素继承

  display:none  不会被子元素继承,但是父元素已经消除了,子元素也就无法显示了

  visibility:hidden  会被子元素继承,可以通过设置子元素的visibility来显示

  opacity:0  会被子元素继承,但是不能通过设置子元素的opacity来显示

3.事件绑定

  display:none  元素已经不存在了,因此无法触发绑定的事件

  visibility:hidden  绑定的事件无法触发

  opacity:0  可以触发绑定的事件

4.过渡动画

  transition对display是无效的

  transition对visibility也是无效的

  transition对opacity是有效的  

拓展:回流和重绘

  1.回流(重排):回流是指浏览器为了重新渲染部分或者全部文档而重新计算文档中元素的位置和几何构造的过程,因为回流可能导致整个dom树的重新构造,所以会印象性能。

  2.重绘:当元素的一部分属性发生改变,如外观、背景、颜色等一系列不会引起布局变化的改变,只需要浏览器根据元素的新属性重新绘制,使元素呈现新的外观。

引起重排的场景和属性

1.添加、删除可见的dom

2.元素的位置改变

3.元素的尺寸改变(外边距、内边距、边框厚度、宽高、等几何属性)

4.页面渲染初始化

5.浏览器窗口大小改变

6.设置style属性

7.改变文字大小

8.添加、删除样式表

9.激活伪类,如:hover

10.操作class属性

11.内容的改变(圆弧在输入框中写入内容也算)

减少重绘重排

(1)不要一条一条地修改 DOM 的样式。可以先定义好 css 的 class,然后修改 DOM 的 className。

(2)不要把 DOM 结点的属性值放在一个循环里当成循环里的变量。

(3)为动画的 HTML 元件使用 fixed 或 absoult 的 position,那么修改他们的 CSS 是不会 reflow 的。

(4)千万不要使用 table 布局。因为可能很小的一个小改动会造成整个 table 的重新布局。(table及其内部元素除外,它可能需要多次计算才能确定好其在渲染树中节点的属性,通常要花3倍于同等元素的时间。这也是为什么我们要避免使用table做布局的一个原因。)

(5)不要在布局信息改变的时候做查询(会导致渲染队列强制刷新)

(6)用translate替代top改变

(7)用opacity替代visibility(在独立图层下优化重绘)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值