css中display:none与visibility:hidden的区别分析

本篇文章给大家带来的内容是关于css中display:none与visibility:hidden的区别分析,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

还记得面试时被问起”请说说display:none和visibility:hidden的区别”吗?是不是回答完display:none不占用原来的位置,而visibility:hidden保留原来的位置后,面试官就会心一笑呢?其实不止那么简单呢!本文我们将一起深究它俩的恩怨情仇,下次面试时我们可以回答得更出彩!

深入display:none

 我们都清楚当元素设置display:none后,界面上将不会显示该元素,并且该元素不占布局空间,但我们仍然可以通过JavaScript操作该元素。但为什么会这样呢?
 这个涉及到浏览器的渲染原理:浏览器会解析HTML标签生成DOM Tree,解析CSS生成CSSOM,然后将DOM Tree和CSSOM合成生成Render Tree,元素在Render Tree中对应0或多个盒子,然后浏览器以盒子模型的信息布局和渲染界面。而设置为display:none的元素则在Render Tree中没有生成对应的盒子模型,因此后续的布局、渲染工作自然没它什么事了,至于DOM操作还是可以的。
 但除了上面的知识点外,还有以下8个点我们需要注意的
1.原生默认display:none的元素
其实浏览器原生元素中有不少自带display:none的元素,如link,script,style,dialog,input[type=hidden]等.

2.HTML5中新增hidden布尔属性,让开发者自定义元素的隐藏性

/* 兼容原生不支持hidden属性的浏览器  */[hidden]{  display: none;}

3.父元素为display:none,子孙元素也难逃一劫

立即学习“前端免费学习笔记(深入)”;

.hidden{  display: none;}.visible{  display: block;}*** START ****** END ***

浏览器直接显示为

*** START ****** END ***

4.无法获取焦点
本来无一盒,何处惹焦点呢^_^即使通过tab键也是没办法的

hidden

5.无法响应任何事件,无论是捕获、命中目标和冒泡阶段均不可以
由于display:none的元素根本不会在界面上渲染,就是连1个像素的都不占,因此自然无法通过鼠标点击命中,而元素也无法获取焦点,那么也不能成为键盘事件的命中目标;而父元素的display为none时,子元素的display必定为none,因此元素也没有机会位于事件捕获或冒泡阶段的路径路径上,因此display:none的元素无法响应事件。

6.不耽误form表单提交数据
虽然我们无法看到display:none的元素,但当表单提交时依然会将隐藏的input元素的值提交上去。

    

7.CSS中的counter会忽略display:none的元素

.start{  counter-reset: son 0;}.son{  counter-increment: son 1;}.son::before{  content: counter(son) ". ";}
son1
son2
son3

结果就是:

1. son12. son3

8.Transition对display的变化不感冒

9.display变化时将触发reflow
撇开display:none,我们看看display:block表示元素位于BFC中,而display:inline则表示元素位于IFC中,也就是说display的用于就是设置元素所属的布局上下文,若修改display值则表示元素采用的布局方式已发生变化,不触发reflow才奇怪呢!

深入visibility

visibility有两个不同的作用

用于隐藏表格的行和列

用于在不触发布局的情况下隐藏元素

4个有效值

1.visible
 没什么好说的,就是在界面上显示。
2.hidden
 让元素在见面上不可视,但保留元素原来占有的位置。
3.collapse
 用于表格子元素(如tr,tbody,col,colgroup)时效果和display:none一样,用于其他元素上时则效果与visibility:hidden一样。不过由于各浏览器实现效果均有出入,因此一般不会使用这个值。
4.inherit
 继承父元素的visibility值。

对比清楚display:none和visibility:hidden

 上面我们已经对display:none列出8点注意事项,那么我们仅需对照它逐一列出visibility的不就清晰可见了吗?
1.父元素为visibility:hidden,而子元素可以设置为visibility:visible并且生效

div{  border: solid 2px blue;}.visible{  visibility: visible;}.hidden{  visibility: hidden;}

结果:

2516558939-5bb02e7f4838b_articlex.png

2.和display:none一样无法获得焦点

3.可在冒泡阶段响应事件
由于设置为visibility:hidden的元素其子元素可以为visibility:visible,因此隐藏的元素有可能位于事件冒泡的路径上因此下面代码中,将鼠标移至.visible时,.hidden会响应hover事件显示。

div{  border: solid 2px blue;}.visible{  visibility: visible;}.hidden{  visibility: hidden;}.hidden:hover{  visibility: visible;}

4.和display:none一样不妨碍form表单的提交

5.CSS中的counter不会忽略

6.Transition对visibility的变化有效

7.visibility变化不会触发reflow
由于从visible设置为hidden时,不会改变元素布局相关的属性,因此不会触发reflow,只是静静地和其他渲染变化一起等待浏览器定时重绘界面。

以上就是css中display:none与visibility:hidden的区别分析的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1612182.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月24日 02:49:31
下一篇 2025年12月24日 02:49:47

相关推荐

  • 如何使用HTML5+CSS3来创建淡入效果的提示框(附完整代码)

    当我们在浏览网页的时候经常看到一些提示工具,最常见的就是提示框样式,提示框不仅可以很明确的起到导航作用,还可以将隐藏的信息展示出来的同时不占用网页空间,所以在前端开发的过程中需要了解提示工具的编写。那么本文将向大家展示一下一个提示框的特殊效果:淡入效果的提示框。有一定的参考价值,有需要的朋友可以参考…

    好文分享 2025年12月24日
    000
  • 如何用css做form表单?css form表单制作的方法

    网页中的表单是用于搜集用户的输入,简而言之,就是表单是网页与用户交互的一个不可或缺的元素,也就是说表单是用于向服务器传输数据的,总而言之,表单在网页中是非常重要的,所以,接下来的这篇文章将给大家来介绍如何用css来制作一个form表单,话不多说,让我们来看一下用css做form表单的具体内容。 首先…

    2025年12月24日
    000
  • css3新增了哪些属性样式?css3常用的新特性介绍

    css3新增的属性样式(新特性)有哪些?本章就给大家重点介绍几种css3中常用的新增属性样式(新特性)。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。 在介绍css3新增的属性样式(新特性)前,我们要先知道什么是css3。    CSS 是层叠样式表 ( Cascading Sty…

    好文分享 2025年12月24日
    000
  • 图文详解placeholder属性的使用方法以及如何修改placeholder的默认样式

    在页面布局时经常会用到input输入框,有时为了提示用户输入正确的信息,需要用placeholder属性加以说明。这篇文章就和大家讲讲placeholder属性怎么用以及如何修改placeholder属性的样式,感兴趣的朋友可以参考一下,希望对你有所帮助! placeholder 是HTML5 中新…

    2025年12月24日
    000
  • 如何使用D3和GSAP实现一个舞动的效果(附源码)

    本篇文章给大家带来的内容是关于如何使用d3和gsap实现一个舞动的效果(附源码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 效果预览 源代码下载 https://github.com/comehope/front-end-daily-challenges 代码解读 定义 dom…

    2025年12月24日
    000
  • 如何使用CSS3实现导航下拉菜单(附完整代码)

    在当下网页结构当中,导航的菜单栏占据了一个很重要的位置,因为不仅仅可以展示示例,还可以给你对于内容最直观的印象,众所周知的是在html中 可以对菜单进行分级,那么我们可以配合css3实现导航下拉菜单。本篇文章给大家带来的内容是关于如何使用css3实现导航下拉的菜单,有一定的参考价值,有需要的朋友可以…

    2025年12月24日
    000
  • 如何使用css3实现3D的翻牌效果(附完整代码)

    最近我在学习有关css3的相关知识,真心觉得这是一门非常实用且炫酷的技术,不仅可以代替以前图片表现的图案和形状,还可以制作一些特殊的效果。比如阴影效果、渐变效果等,其中3d转换效果尤为炫酷。本篇文章给大家带来的内容是关于如何使用css3实现3d的翻牌效果,有一定的参考价值,有需要的朋友可以参考一下,…

    2025年12月24日
    000
  • 图文详解CSS文本溢出显示省略号效果(text-overflow)

    在工作中经常会遇到文本溢出,需要显示省略号的情况,那这个省略号是怎么实现的呢?这篇文章就给大家讲讲css中如何用text-overflow实现超出部分显示省略号。对css文字溢出加省略号这个知识不熟悉的小伙伴可以参考一下,希望可以帮助到你! text-overflow属性表示当文本超出包含它的元素时…

    2025年12月24日
    000
  • CSS如何设置文字间距?

    css文字与文字之间的间距怎么调整?相信有很多小伙伴都会有这样的疑问。本章就给大家介绍css设置文字间距的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。 一、css word-spacing属性设置字间距(单词的间距) word-spacing 属性增加或减少单词间的空白(即…

    2025年12月24日
    000
  • 如何使用css3实现条形进度条效果(附完整代码)

    在音乐和视频播放的时候,不止可以直接查看播放时间,也可以通过观察进度条来查看播放时间,观察进度条这种方法会更加直观的告诉用户还有多久结束,所以进度条是一种非常实用的特殊效果。本文在介绍如何使用css3实现进度条效果的基础上,重点探讨了其具体步骤,本文内容紧凑,希望大家可以有所收获。 使用css3实现…

    2025年12月24日
    000
  • 环形进度条效果怎么实现?用css3实现环形进度条效果代码示例

    上一篇文章我们介绍了如何使用css3实现条形进度条效果(附完整代码),了解到进度条的实用性,那么今天来向大家介绍一下另外一种形式的进度条:环形进度条。 这种进度条适合应用于页面加载的时候和环形计时器的页面。本篇文章给大家带来的内容是关于如何使用css3实现环形进度条效果,有一定的参考价值,有需要的朋…

    2025年12月24日
    000
  • 如何使用纯CSS实现电源开关控件(附源码)

    本篇文章给大家带来的内容是关于如何使用纯css实现电源开关控件(附源码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 效果预览 源代码下载 https://github.com/comehope/front-end-daily-challenges 代码解读 定义 dom,包含 …

    2025年12月24日
    000
  • css选择器优先级顺序是什么?css基本选择器优先级的介绍

    css的选择器有很多种,那么,自然而然的就会有优先级这一概念出现,所以,css选择器优先级顺序是怎样的呢?本篇文章将来给大家介绍css选择器优先级的排序,话不多说,我们来直接看正文内容。 在看css选择器优先级顺序前,我们先来简单说说css基本选择器有哪些? 1、标记选择器(如:body,div,p…

    好文分享 2025年12月24日
    000
  • 如何使用HTML5+css3制作出12种常用的按钮开关样式(附完整代码)

    现如今前端网页的开发越来越注重设计感,这些设计感更体现在细节处,今天向大家具体介绍一下各式各样的开关按钮是如何使用html5+css3制作出来的,希望可以帮到大家。 使用HTML5+css3制作按钮开关的原理 根据设计的要求填充各种颜色。 按钮开关的形状需要具体问题具体分析,如圆形按钮开关需要用到b…

    2025年12月24日
    000
  • 如何使用css3实现字体内发光效果(详解)

    在互联网日益发展的当今社会,人们对于网页用户体验的要求越来越苛刻,这就催生了更多的特殊效果的衍生,比如阴影效果,发光效果等,那么本文将向大家介绍一下如何使用css3实现字体发光的特殊效果,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 使用css3实现字体发光效果原理 首先我们要输入…

    2025年12月24日
    000
  • 如何使用css3实现文字的单阴影效果和多重阴影效果(附完整代码)

    最近几年在web网页开发的过程中越来越在意人机交互和用户体验,不仅颜色更加的多样化,而且各种特殊效果也是让人目不暇接。今天主要向大家介绍一下在文本里如何实现阴影的特殊效果,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 使用css3实现文本阴影效果的原理 实现阴影效果主要是用text…

    2025年12月24日
    000
  • 如何使用CSS实现滚动的图片栏(附代码)

    本篇文章给大家带来的内容是关于如何使用css实现滚动的图片栏(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 在一些网站上可以经常看到有一些图片进行持续不断的滚动,这个效果可以通过css的动画效果来实现。具体效果如下 主要原理是通过动画向左移动。 首先给出两组一样的图片(同…

    2025年12月24日
    000
  • 如何使用css实现翻转图片的效果(附代码)

    本篇文章给大家带来的内容是关于如何使用css实现翻转图片的效果(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 具体效果图如下: 主要用到的技术除了3D翻转和定位 ,还用到了一个新的属性 backface-visibility:visable|hidden; 该属性主要是用…

    2025年12月24日
    000
  • 如何用CSS制作一个三角形(附代码)

    css中的属性非常神奇,它可以制作很多我们意想不到的图形。这篇文章主要想和大家分享如何用css制作一个三角形,感兴趣的朋友可以参考一下,希望对你有所帮助。 首先我们新建一个100×100的正方形div,为了方便我们查看,设置一个背景颜色。  css代码如下: width: 100px;he…

    2025年12月24日 好文分享
    000
  • css怎么能清除浏览器默认样式?(代码)

    本篇文章给大家带来的内容是关于css怎么能清除浏览器默认样式?有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 css清除浏览器默认样式(代替 *{})  将代码放入 css 文件,使用 link 引入。 /* v2.0 | 20110126http://meyerweb.com/er…

    好文分享 2025年12月24日
    000

发表回复

登录后才能评论
关注微信