如何在页面中实现显示和隐藏呢?

966 阅读3分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

路难行,行路难,一身汗水,满心长。脚下百里路,头顶艳阳天。坚定如磐石,信念似火烧。好男儿,人穷志不缺,天道也酬勤。四方走,走四方,一身是胆,豪气壮。前方坎坷途,千难万般阻。心若有明灯,身似般若行。好男儿,大志存高远,四海皆为家。

显示与隐藏

HTML 所有的元素默认情况下都是显示的,但通过 CSS 提供的相关属性可以将指定元素进行隐藏,或者改变该元素的类型,例如将一个块级元素的显示效果改变为内联元素。

  • display 属性:用来设置 HTML 元素的显示类型。
  • visibility 属性:用来设置显示或隐藏 HTML 元素。

display 属性

CSS display 属性用来设置 HTML 元素的显示类型,例如将 HTML 页面中某个元素设置为块级元素、内联元素或者行内块级元素的显示类型。当然,display 属性也可以将某个元素隐藏,在运行该 HTML 页面时,用户是看不到这个元素的效果的。

  • block:表示将某个元素的显示类型设置为块级元素。
  • inline:表示将某个元素的显示类型设置为内联元素。
  • inline-block:表示将某个元素的显示类型设置为行内块级元素。
  • none:表示将某个元素进行隐藏,不显示在 HTML 页面中。

当为某个元素设置 display 属性的值为 none 时,表示关闭了该元素在 HTML 页面中的显示。这种情况下,由于隐藏的元素不再在 HTML 页面中占用任何区域,所以会导致该元素后的所有兄弟元素的布局显示位置。并且,该元素的所有后代元素也同样会被关闭显示效果。

当将某个元素通过 display 属性值设置为 none 后,该元素的所有后代元素同样也会被隐藏。

当为某个元素设置了 display 属性值为 none 后,会影响该元素后面的所有兄弟元素在 HTML 页面的布局位置。

<!DOCTYPE html>
<html lang="en"><head>
  <meta charset="UTF-8">
  <title>display属性</title>
  <style>
    .example-element {
      width: 200px;
      height: 100px;
      border: 2px solid lightcoral;
​
      display: none;
    }
​
    .box {
      width: 200px;
      height: 100px;
      background-color: lightcoral;
      margin-top: 10px;
    }
  </style>
</head><body>
  <div class="example-element">这个元素会被隐藏</div>
  <div class="box"></div>
  <div class="box"></div>
</body></html>

50gMVO.png

如上述显示效果所示,当为第一个 div 元素设置 display: none; 时,会导致后面的两个兄弟元素在 HTML 页面的布局位置整体向上移动。如果不为第一个 div 元素设置 display:none; 时显示的效果如下图所示:

50gGRA.png display 属性除了可以隐藏元素的显示之外,还可以改变元素的显示类型,例如将元素的显示类型设置为块级元素、内联元素或者行内块级元素。

visibility 属性

CSS visibility 属性用来设置 HTML 元素显示或者隐藏,而不更改 HTML 页面的布局。

  • visible:表示将某个元素设置为显示。
  • hidden:表示将某个元素设置为隐藏。

如果将某个元素的 visibility 属性值设置为 hidden,但其子级元素的 visibility 属性值设置为 visible 的话,则其子级元素依旧会显示在 HTML 页面中。

总结

  • display 属性设置元素为隐藏时,不会占用 HTML 页面的区域,导致后面的兄弟元素在 HTML 页面的布局位置发生改变。并且,设置为隐藏的元素的所有后代元素同样会被隐藏。
  • display 属性不仅可以设置元素为隐藏还是显示,还可以改变元素的显示类型,例如设置元素的显示类型为块级元素、内联元素或者行内块级元素。
  • visibility 属性设置元素为隐藏时,依旧会占用 HTML 页面的区域,这是与 display 属性不同的一点。再有,如果为该元素的后代元素设置 visibility: visible; 的话,则后代元素依旧会显示。