为什么要用用visibility:hidden;代替display:none;?因为后者更加消耗浏览器:

css绘制画面有两种形式:repaint 和reflow,当我们更改css属相如background时,浏览器只需repaint就行,dom节点的大小、位置均未发生改变,我理解为:原地不动只是换个颜色填充而已。这时的开销就小。

当我们操作dom节点要改变其大小和位置时,对浏览器来说就比较麻烦了,必须要进行reflow,重新定位,重新布局,只不过对于现在的电脑硬件和高版本浏览器来说这倒不是显而易见的性能问题,但作为开发人员,核心的价值和最大的满足感就是节省了内存,优化了效率。

SO,这也是本文标题的原因。visibility:hidden;对浏览器来说只需一次repaint就OK。但display:none;浏览器要进行reflow,也就是要销毁原先绘制的frame,然后还要再次重绘frame,浪费,不环保。

好,说了这么多,那么问题来了,挖掘机。。。。不!怎样才能减少浏览器开销呢?

那就要尽量改动让浏览器用repaint就能完成的属性,少改动那些要做大手术的属性。实不相瞒,对dom节点的增删改都是大手术。尤其是动画,当初年少无知,为了追求刺激,总搞一些没啥用途的大而空的乱串特效,想必浏览器也挺辛苦吧。还有少用表格,表格总是牵一发而动全身,开销更大。

以后可以这么干:对要多次修改的dom元素,尽量一步到位,我用的是先设置一个空的class如.XX{aa:num; bb:num; cc:num},然后用js直接更改其dom的classname属性为XX即可。此外,优化的方法从各个方面各个角度,还有很多很多,写这篇博客时的我目前还处于菜鸟阶段,关于优化问题总结的很多很杂,具体说不出个123来,这个知识点对我的意义就是:别拿浏览器不当干部,要尽可能的让她干的轻松(没错,是“她”),为此以后要养成时刻优化代码的习惯,不以善小而不为。

为什么要用visibility:hidden;代替display:none;?的更多相关文章

  1. 再谈visibility:hidden和display:none

    之前写过一篇有关visibility:hidden和display:none的文章:为什么要用用visibility:hidden;代替display:none;?主要是从浏览器性能方面入手,却没写两 ...

  2. 关于隐藏元素高度的问题 css visibility:hidden 与 display:none的区别

    其实这是一个老问题了,s visibility:hidden 与 display:none 共同点就是都会似的元素不可见.但是 visibility:hidden 的DOM元素是占用空间的,会挤占其他 ...

  3. What is the difference between visibility:hidden and display:none?

    What is the difference between visibility:hidden and display:none? 答案1 display:none means that the t ...

  4. visibility:hidden和display:none的区别

    大家知道,如果想让某一段代码在前台不显示,最简单的方法是用css的display:none即可,这样下边的内容就自动上移或右侧的左移来填补这个空隙. 但特殊情况下我们只需要隐藏这个元素,但它的位置不能 ...

  5. visibility: hidden 和 display: none的区别

    相同点: 两者都可以将dom元素隐藏 不同点: 1.display: none 隐藏之后不占用文档流,而visibility: hidden却会占用文档流,如果要在隐藏元素的同时获取其尺寸信息,那就可 ...

  6. css 中visibility:hidden和display:none有什么区别呢

    <div style="width:100px;height:100px;background:red;visibility:hidden"></div>/ ...

  7. 分析比较 opacity: 0、visibility: hidden、display: none 优劣和适用场景

    总结: 结构: display:none: 会让元素完全从渲染树中消失,渲染的时候不占据任何空间, 不能点击, visibility: hidden:不会让元素从渲染树消失,渲染元素继续占据空间,只是 ...

  8. visibility: hidden和 display: none的区别

    visibility: hidden----将元素隐藏,但是在网页中该占的位置还是占着. display: none----将元素的显示设为无,即在网页中不占任何的位置.

  9. display:none和visibility:hidden两者的区别

    display与元素的隐藏 如果给一个元素设置了display: none,那么该元素以及它的所有后代元素都会隐藏,它是前端开发人员使用频率最高的一种隐藏方式.隐藏后的元素无法点击,无法使用屏幕阅读器 ...

随机推荐

  1. iOS SDK Release Notes for iOS 9 iOS9 SDK 版本更新说明

    Important: This is a preliminary document for an API or technology in development. Apple is supplyin ...

  2. mysql 显示行号,以及分组排序

    建表: CREATE TABLE `my_tb` ( `id` ) NOT NULL AUTO_INCREMENT, `parent_code` ) DEFAULT NULL, `code` ) DE ...

  3. [Shell] 读取脚本路径

    以下是几种在 Shell 中读取路径的方法. 返回当前工作目录绝对路径 echo $(pwd) 返回 shell 第一个参数.如果被执行对象位于 PATH 路径中,则返回该对象绝对路径:否则返回被执行 ...

  4. SpringMVC Controller 返回值的可选类型

    spring mvc 支持如下的返回方式:ModelAndView, Model, ModelMap, Map,View, String, void. ModelAndView @RequestMap ...

  5. 移动审批App开发总结

    公司新需求要在手机上进行审批. 现在开发完成了. 总结:1.初步把公司的工作流模块做成RPC服务,公共服务可以进行调用. 2.服务分层,每个App的页面对应一个服务端的接口,作为前端控制器,用来从更低 ...

  6. Tips4:把 Inspector面板转换为Debug模式

    你知道 Inspector 的调试(debug)模式吗? 当debug模式打开后, Inspector将会把游戏物体所有的属性都显示出来,包括公有(public)和私有(private)变量. 例如, ...

  7. keepalived程序包

    keepalived自带两个程序包 1. keepalived守护进程 [root@lvs /root]# keepalived –-helpkeepalived Version 0.6.1 (06/ ...

  8. 队列的链式存储方式的实现(Java语言描述)

    链队列的结构示意图: 先进先出. QueueInterface.java//操作方法接口 package 队列的实现; public interface QueueInterface { public ...

  9. Flask模板_学习笔记

    代码尽在我的github上面:https://github.com/521xueweihan 概述:    在Flask中,Jinja2默认配置如下:        A.扩展名为.html,.htm, ...

  10. 转载:全球首个微信小程序(应用号)开发教程!通宵吐血赶稿,每日更新!

    微信应用号(小程序,「应用号」的新称呼)终于来了! 目前还处于内测阶段,微信只邀请了部分企业参与封测.想必大家都关心应用号的最终形态到底是什么样子?怎样将一个「服务号」改造成为「小程序」? 我们暂时以 ...