用 css 隐藏页面元素有许多种方法 。你可以将 opacity 设为 0、将 visibility 设为 hidden、将 display 设为 none 或者将 position 设为 absolute 然后将位置设到不可见区域 。
你有没有想过 , 为什么我们要有这么多技术来隐藏元素 , 而它们看起来都实现的是同样的效果?每一种方法实际上与其他方法之间都有一些细微的不同 , 这些 不同决定了在一个特定的场合下使用哪一个方法 。这篇教程将覆盖到那些你需要记住的细小不同点 , 让你根据不同情况选择上面这些方法中适合的方法来隐藏元素 。
opacity
opacity 属性的意思是设置一个元素的透明度 。它不是为改变元素的边界框(bounding box)而设计的 。这意味着将 opacity 设为 0 只能从视觉上隐藏元素 。而元素本身依然占据它自己的位置并对网页的布局起作用 。它也将响应用户交互 。
.hide { opacity: 0;}如果你打算使用 opacity 属性在读屏软件中隐藏元素 , 很不幸 , 你并不能如愿 。元素和它所有的内容会被读屏软件阅读 , 就像网页上的其他元素那样 。换句话说 , 元素的行为就和它们不透明时一致 。
我还要提醒一句 , opacity 属性可以用来实现一些效果很棒的动画 。任何 opacity 属性值小于 1 的元素也会创建一个新的堆叠上下文(stacking context) 。
看下面的例子:
看 @SitePoint 提供的例子“用 opacity 隐藏元素”
当你的鼠标移到被隐藏的第 2 个的区块上 , 元素状态平滑地从完全透明过渡到完全不透明 。区块也将 cursor 属性设置为了 pointer , 这说明了用户可以与它交互 。
我自己是一名从事了多年开发的web前端老程序员 , 目前辞职在做自己的web前端私人定制课程 , 今年年初我花了一个月整理了一份最适合2019年学习的web前端学习干货 , 各种框架都有整理 , 送给每一位前端小伙伴 , 想要获取的可以关注我的头条号并在后台私信我:前端 , 即可免费获取 。visibility
第二个要说的属性是 visibility 。将它的值设为 hidden 将隐藏我们的元素 。如同 opacity 属性 , 被隐藏的元素依然会对我们的网页布局起作用 。与 opacity 唯一不同的是它不会响应任何用户交互 。此外 , 元素在读屏软件中也会被隐藏 。
这个属性也能够实现动画效果 , 只要它的初始和结束状态不一样 。这确保了 visibility 状态切换之间的过渡动画可以是时间平滑的(事实上可以用这一点来用 hidden 实现元素的延迟显示和隐藏——译者注) 。
.hide { visibility: hidden;}下面的例子演示了 visibility 与 opacity 有怎样的不同:
看 @SitePoint 提供的例子“用 visibility 隐藏元素”
注意 , 如果一个元素的 visibility 被设置为 hidden , 同时想要显示它的某个子孙元素 , 只要将那个元素的 visibility 显式设置为 visible 即可(就如例子里面的 .o-hide p——译者注) 。尝试只 hover 在隐藏元素上 , 不要 hover 在 p 标签里的数字上 , 你会发现你的鼠标光标没有变成手指头的样子 。此时 , 你点击鼠标 , 你的 click 事件也不会被触发 。
而在 <div> 标签里面的 <p> 标签则依然可以捕获所有的鼠标事件 。一旦你的鼠标移动到文字上 , <div> 本身变得可见并且事件注册也随之生效 。
display
display 属性依照词义真正隐藏元素 。将 display 属性设为 none 确保元素不可见并且连盒模型也不生成 。使用这个属性 , 被隐藏的元素不占据任何空间 。不仅如此 , 一旦 display 设为 none 任何对该元素直接打用户交互操作都不可能生效 。此外 , 读屏软件也不会读到元素的内容 。这种方式产生的效果就像元素完全不存在 。
任何这个元素的子孙元素也会被同时隐藏 。为这个属性添加过渡动画是无效的 , 它的任何不同状态值之间的切换总是会立即生效 。
不过请注意 , 通过 DOM 依然可以访问到这个元素 。因此你可以通过 DOM 来操作它 , 就像操作其他的元素 。
.hide { display: none;}看下面的例子:
@SitePoint 提供的例子“用 display 隐藏元素”
你将看到第二个块元素内有一个 <p> 元素 , 它自己的 display 属性被设置成 block , 但是它依然不可见 。这是 visibility:hidden 和 display:none 的另一个不同之处 。在前一个例子里 , 将任何子孙元素 visibility 显式设置成 visible 可以让它变得可见 , 但是 display 不吃这一套 , 不管自身的 display值是什么 , 只要祖先元素的 display 是 none , 它们就都不可见 。
推荐阅读
- linux SSH的几种用法
- 隔夜茶的多种用途你万万想不到
- 标签ul与css样式实现菜单特效实例
- 在线安全威胁:隐藏在SSL中的加密恶意软件
- CSS 定位详解
- CSS扩展语言sass和less应该选哪个?
- 使用CSS修改 video 标签默认样式
- 几条命令轻松开启macOS系统隐藏功能
- css实现追踪用户访问单页的停留数据
- 常用的css属性
