目录
目录
前面的话
定义
属性
display
JS
transition
API
DEMO
首页 web前端 html教程 深入理解CSS元素可见性visibility - 小火柴的蓝色理想

深入理解CSS元素可见性visibility - 小火柴的蓝色理想

May 21, 2016 am 08:54 AM

前面的话

  visibility属性常见于与display属性的比较中。但实际上,该属性有自己的一些有趣的用途。本文将就visibility属性作详细整理和说明

 

定义

visibility

  值: visible | hidden | collapse | inherit

  初始值: visible

  应用于: 所有元素

  继承性: 有

 

属性

  visible: 元素可见

  hidden:元素不可见,但元素还是会影响文档的布局

  [注意]可以将一个hidden元素的后代元素置为visible,这会使该后代元素正常出现

 collapse:在表格中

或中使用,表示该列或列组的所有单元格不显示。如果用于非表格元素,collapse与hidden含义相同

  [注意]webkit内核浏览器不支持给

或 元素使用collapse属性

 

display

  visibility:hidden与display:none作为隐藏元素的两种方式,常常被人们拿来比较。其实区别很简单,前者不脱离文档流,保留隐藏之前元素占据的物理区域;而后者则脱离文档流,如果重新显示则需要页面的重新绘制。还有一点区别却很少人提到,如果父级设置display:none;子级设置display:block也不会显示;而如果父级设置visibility:hidden;子级设置visibility:visible时子级会显示出来

 

JS

  当元素通过设置visibiliy:hidden之后,虽然还占据物理区域,但已经不可以接受js效果

  //js效果:当鼠标移入元素时,父级的背景颜色变成黑色;移出时背景颜色恢复初始值

 

transition

  其实visibility是离散步骤,在0到1数字范围之内,0表示隐藏,1表示显示。visibility:hidden可以看成visibility:0;visibility:visible可以看成visibility:1。于是,visibility应用transition等同于0~1之间的过渡效果。实际上,只要visibility的值大于0就是显示的。由于这个现象,我们可以利用transition实现元素的延时显示隐藏

<span style="color: #800000;">#oShow</span>{<span style="color: #ff0000;">
    visibility</span>:<span style="color: #0000ff;"> visible</span>;<span style="color: #ff0000;">
    transition</span>:<span style="color: #0000ff;"> visibility 0.2s  0.5s</span>;
}<span style="color: #800000;">
#oShow:hover</span>{<span style="color: #ff0000;">
    visibility</span>:<span style="color: #0000ff;"> hidden</span>;
}
登录后复制

  visibility配合opacity和transtion可以实现真正的元素淡入淡出。如果只用opacity时,即使最后元素opacity变为0,但实现上该图片还是可以覆盖其他元素以及可以接受js效果。所以使用visibility可以实现元素真正的隐藏

<span style="color: #800000;">#oShow</span>{<span style="color: #ff0000;">
    visibility</span>:<span style="color: #0000ff;"> visible</span>;<span style="color: #ff0000;">
    opacity</span>:<span style="color: #0000ff;"> 1</span>;<span style="color: #ff0000;">
    transition</span>:<span style="color: #0000ff;"> 1s</span>;
}<span style="color: #800000;">
#oShow:hover</span>{<span style="color: #ff0000;">
    visibility</span>:<span style="color: #0000ff;"> hidden</span>;<span style="color: #ff0000;">
    opacity</span>:<span style="color: #0000ff;"> 0</span>;
}
登录后复制

 

API

  当前浏览器大部分都是多tab页(多标签页)的模式,但这些页面性能却参差不齐。对于某些性能很差的页面,当用户从其他tab页切换回来时,有可能出现由于页面性能差出现页面错乱、页面卡死甚至浏览器卡死的情况

  HTML5新增了页面可见性API。该API有两个属性,一个事件

  [注意]IE9-和safari浏览器不支持。所以可以通过document.hidden !== 'undefined'来做浏览器的识别

  document.hidden: 表示当前页面是否可见

    当前tab页处于激活态时,document.hidden的属性值是false,否则是true

  document.visibilityState: 返回当前页面的可见状态

<span style="color: #000000;">hidden: 当浏览器最小化、切换tab、电脑锁屏时
visible: 用户正在查看当前页面时
prerender: 文档加载离屏或者不可见
unloaded: 当文档将要被unload时</span>
登录后复制

  [注意]prerender和undloaded不是所有浏览器都支持,用的也不多

  visibilitychange事件: 当document.visibilityState状态变化时触发该事件

应用场景

  [1]当页面属性是hidden时,停止页面中选项卡的定时器或页面中的动画等,减少内存占用

  [2]当通过页面状态的切换,来控制音乐或视频的播放或停止

  [3]...

 

DEMO

【1】页面为非激活页时,暂停页面中的动画;重新激活时,继续动画效果

<span style="color: #800000;">.box</span>{<span style="color: #ff0000;">
    width</span>:<span style="color: #0000ff;"> 500px</span>;<span style="color: #ff0000;">
    background-color</span>:<span style="color: #0000ff;"> lightgreen</span>;<span style="color: #ff0000;">
    border</span>:<span style="color: #0000ff;"> 1px solid black</span>;
}<span style="color: #800000;">
@keyframes loop</span>{<span style="color: #ff0000;">
    0%{
        width</span>:<span style="color: #0000ff;"> 100px</span>;
    }<span style="color: #800000;">
    100%</span>{<span style="color: #ff0000;">
        width</span>:<span style="color: #0000ff;"> 500px</span>;
    }<span style="color: #800000;">
}
#div</span>{<span style="color: #ff0000;">
    width</span>:<span style="color: #0000ff;"> 100px</span>;<span style="color: #ff0000;">
    height</span>:<span style="color: #0000ff;"> 100px</span>;<span style="color: #ff0000;">
    background-color</span>:<span style="color: #0000ff;"> pink</span>;<span style="color: #ff0000;">
    animation</span>:<span style="color: #0000ff;"> loop 200s alternate infinite linear</span>;
}    
登录后复制
<span style="color: #0000ff;"><span style="color: #800000;">div </span><span style="color: #ff0000;">class</span><span style="color: #0000ff;">="box"</span><span style="color: #0000ff;">></span>
    <span style="color: #0000ff;"><span style="color: #800000;">div </span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="div"</span><span style="color: #0000ff;">></span><span style="color: #800000;">div</span><span style="color: #0000ff;">></span>
<span style="color: #0000ff;"></span><span style="color: #800000;">div</span><span style="color: #0000ff;">></span></span></span>
登录后复制
<span style="color: #0000ff;">function</span><span style="color: #000000;"> getCSS(obj,style){
    </span><span style="color: #0000ff;">if</span><span style="color: #000000;">(window.getComputedStyle){
        </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> getComputedStyle(obj)[style];
    }
    </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> obj.currentStyle[style];
};
</span><span style="color: #0000ff;">var</span> oTimer = setInterval(<span style="color: #0000ff;">function</span><span style="color: #000000;">(){
    document.title</span>=div.innerHTML = parseInt(getCSS(div,'width'<span style="color: #000000;">));
},</span>100<span style="color: #000000;">);
document.addEventListener(</span>'visibilitychange',<span style="color: #0000ff;">function</span><span style="color: #000000;">(){
    </span><span style="color: #0000ff;">if</span><span style="color: #000000;">(document.hidden){
        div.style.animationPlayState </span>= 'paused'<span style="color: #000000;">;
    }</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{
        div.style.animationPlayState </span>= 'running'<span style="color: #000000;">;
    }
    
},</span><span style="color: #0000ff;">false</span>);
登录后复制

【2】页面切换来控制音乐的播放和暂停

<span style="color: #0000ff;"><span style="color: #800000;">audio </span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="audio"</span><span style="color: #ff0000;"> src</span><span style="color: #0000ff;">="http://7xpdkf.com1.z0.glb.clouddn.com/myocean.mp3"</span><span style="color: #ff0000;"> controls </span><span style="color: #0000ff;">></span><span style="color: #800000;">audio</span><span style="color: #0000ff;">></span></span>
登录后复制
<span style="color: #0000ff;">var</span><span style="color: #000000;"> mark;
document.addEventListener(</span>'visibilitychange',<span style="color: #0000ff;">function</span><span style="color: #000000;">(){
    </span><span style="color: #0000ff;">if</span><span style="color: #000000;">(document.hidden){
        </span><span style="color: #008000;">//</span><span style="color: #008000;">如果用户在切换页面前,自己点了暂停</span>
        <span style="color: #0000ff;">if</span><span style="color: #000000;">(audio.paused){
            mark </span>= <span style="color: #0000ff;">false</span><span style="color: #000000;">;
        }</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{
            audio.pause();
            mark </span>= <span style="color: #0000ff;">true</span><span style="color: #000000;">;
        }    
    }</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{
        </span><span style="color: #008000;">//</span><span style="color: #008000;">当暂停是因为页面切换造成的,则返回当前页面时,继续播放</span>
        <span style="color: #0000ff;">if</span><span style="color: #000000;">(mark){
            audio.play();
        }    
    }
},</span><span style="color: #0000ff;">false</span>);
登录后复制

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1675
14
CakePHP 教程
1429
52
Laravel 教程
1333
25
PHP教程
1278
29
C# 教程
1257
24
HTML:结构,CSS:样式,JavaScript:行为 HTML:结构,CSS:样式,JavaScript:行为 Apr 18, 2025 am 12:09 AM

HTML、CSS和JavaScript在Web开发中的作用分别是:1.HTML定义网页结构,2.CSS控制网页样式,3.JavaScript添加动态行为。它们共同构建了现代网站的框架、美观和交互性。

HTML,CSS和JavaScript的未来:网络开发趋势 HTML,CSS和JavaScript的未来:网络开发趋势 Apr 19, 2025 am 12:02 AM

HTML的未来趋势是语义化和Web组件,CSS的未来趋势是CSS-in-JS和CSSHoudini,JavaScript的未来趋势是WebAssembly和Serverless。1.HTML的语义化提高可访问性和SEO效果,Web组件提升开发效率但需注意浏览器兼容性。2.CSS-in-JS增强样式管理灵活性但可能增大文件体积,CSSHoudini允许直接操作CSS渲染。3.WebAssembly优化浏览器应用性能但学习曲线陡,Serverless简化开发但需优化冷启动问题。

HTML的未来:网络设计的发展和趋势 HTML的未来:网络设计的发展和趋势 Apr 17, 2025 am 12:12 AM

HTML的未来充满了无限可能。1)新功能和标准将包括更多的语义化标签和WebComponents的普及。2)网页设计趋势将继续向响应式和无障碍设计发展。3)性能优化将通过响应式图片加载和延迟加载技术提升用户体验。

HTML与CSS vs. JavaScript:比较概述 HTML与CSS vs. JavaScript:比较概述 Apr 16, 2025 am 12:04 AM

HTML、CSS和JavaScript在网页开发中的角色分别是:HTML负责内容结构,CSS负责样式,JavaScript负责动态行为。1.HTML通过标签定义网页结构和内容,确保语义化。2.CSS通过选择器和属性控制网页样式,使其美观易读。3.JavaScript通过脚本控制网页行为,实现动态和交互功能。

HTML与CSS和JavaScript:比较Web技术 HTML与CSS和JavaScript:比较Web技术 Apr 23, 2025 am 12:05 AM

HTML、CSS和JavaScript是构建现代网页的核心技术:1.HTML定义网页结构,2.CSS负责网页外观,3.JavaScript提供网页动态和交互性,它们共同作用,打造出用户体验良好的网站。

HTML:是编程语言还是其他? HTML:是编程语言还是其他? Apr 15, 2025 am 12:13 AM

HTMLISNOTAPROGRAMMENGUAGE; ITISAMARKUMARKUPLAGUAGE.1)htmlStructures andFormatSwebContentusingtags.2)itworkswithcsssforstylingandjavascript for Interactivity,增强WebevebDevelopment。

超越HTML:网络开发的基本技术 超越HTML:网络开发的基本技术 Apr 26, 2025 am 12:04 AM

要构建一个功能强大且用户体验良好的网站,仅靠HTML是不够的,还需要以下技术:JavaScript赋予网页动态和交互性,通过操作DOM实现实时变化。CSS负责网页的样式和布局,提升美观度和用户体验。现代框架和库如React、Vue.js和Angular,提高开发效率和代码组织结构。

&lt; strong&gt;,lt; b&gt;有什么区别标签和lt; em&gt;,&lt; i&gt;标签? &lt; strong&gt;,lt; b&gt;有什么区别标签和lt; em&gt;,&lt; i&gt;标签? Apr 28, 2025 pm 05:42 PM

本文讨论了HTML标签,和和关注其语义与表现用途及其对SEO和可访问性的影响之间的差异。

See all articles