刘勇虎的官方网站
网站内容包含大前端、服务器开发、Python开发、iOS开发、Android开发、网站维护等技术文章。专注于分享技术经验,职业心得体会,IT优秀文章与教程创作。
Stay hungry,Stay foolish,Stay young
visibility
和 display
都能实现元素的显示和隐藏,但它们在具体的行为上有显著的不同。opacity
则主要用于控制元素的透明度。
**display: none;
**:隐藏元素,元素不占用文档流中的空间。
**display: block;
**:显示元素,元素作为块级元素显示。
**display: inline;
**:显示元素,元素作为行内元素显示。
**display: inline-block;
**:显示元素,元素作为行内块级元素显示。
**visibility: hidden;
**:隐藏元素,元素仍然占用文档流中的空间。
**visibility: visible;
**:显示元素。
**opacity: 0;
**:元素视觉上消失,透明度为 0,但仍然占用文档流中的空间,浏览器会解析该元素。
display: none;
**:切换显示时,页面会产生回流(回流:当页面中的一部分元素需要改变规模尺寸、布局、显示隐藏等,页面重新构建,此时就是回流)。回流会导致页面重新渲染,影响性能。visibility: hidden;
**:切换显示时,不会引起回流,因为元素仍然存在于文档流中,只是不可见。opacity: 0;
**:不会引起回流,因为元素仍然存在于文档流中,只是透明度为 0。display: none;
**:元素彻底消失,不在文档流中占位,浏览器也不会解析该元素。visibility: hidden;
**:元素视觉上消失,但仍然占据文档流中的空间,浏览器会解析该元素。opacity: 0;
**:元素视觉上消失,但仍然占据文档流中的空间,浏览器会解析该元素。display: none;
**:transition
对于 display
是无效的,无法实现平滑的显示/隐藏过渡效果。visibility: hidden;
**:transition
对于 visibility
是无效的,无法实现平滑的显示/隐藏过渡效果。opacity: 0;
**:transition
对于 opacity
是有效的,可以实现平滑的透明度过渡效果。display: none;
**:元素在页面上已经不存在,所以在它上面绑定的事件无法触发。visibility: hidden;
**:元素虽然占据一定空间,但在它上面绑定的事件是无法触发。opacity: 0;
**:元素仍然存在并占据空间,所以在它上面绑定的事件可以触发。display: none;
**:不会被子元素继承,给子元素设置 display: block;
子元素不会显示。visibility: hidden;
**:会被子元素继承,可以通过设置子元素 visibility: visible;
让子元素显示出来。opacity: 0;
**:会被子元素继承,给子元素设置 opacity: 1;
子元素不会显示。display: none;
display: none;
。display: none;
,然后在需要时显示。visibility: hidden;
visibility: hidden;
。visibility: hidden;
。opacity: 0;
opacity
结合 transition
。opacity
。visibility: hidden;
或 opacity: 0;
,以减少页面回流的影响。opacity: 0;
而不是 display: none;
或 visibility: hidden;
。visibility
和 opacity
时,注意子元素的继承问题,必要时进行显式设置。visibility
、display
和 opacity
在实现元素的显示和隐藏方面各有特点。display: none;
适用于需要完全移除元素的场景,visibility: hidden;
适用于需要保留元素位置的场景,opacity: 0;
适用于需要实现透明度过渡效果的场景。希望本文对您有所帮助!