深入理解CSS元素可见性visibility - 小火柴的蓝色理想
前面的话
visibility属性常见于与display属性的比较中。但实际上,该属性有自己的一些有趣的用途。本文将就visibility属性作详细整理和说明
定义
visibility
值: visible | hidden | collapse | inherit
初始值: visible
应用于: 所有元素
继承性: 有
属性
visible: 元素可见
hidden:元素不可见,但元素还是会影响文档的布局
[注意]可以将一个hidden元素的后代元素置为visible,这会使该后代元素正常出现
collapse:在表格中
[注意]webkit内核浏览器不支持给
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>);

热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

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

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

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

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

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

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

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

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

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

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