【玩转CSS】元素的显示与隐藏

151 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

🔥 本文由 程序喵正在路上原创,在稀土掘金首发!
💖 系列专栏:HTML+CSS
🌠 首发时间:2022年9月6日
🦋 欢迎关注🖱点赞👍收藏🌟留言🐾
🌟 一以贯之的努力 不得懈怠的人生

学习目标

能够说出显示隐藏的 2 种方式以及区别

元素的显示与隐藏

这种效果,类似于网站广告,当我们点击关闭就不见了,但是我们重新刷新界面,会重新出现

本质:让一个元素在页面中隐藏或显示出来

  • display:显示隐藏
  • visibility:显示隐藏
  • overflow:溢出显示隐藏

1. display

  • display: none; —— 隐藏对象
  • display: block; —— 除了转换为块级元素之外,同时还有显示元素的意思
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>显示隐藏display</title>
    <style>
        .peppa {
            display: none;
            width: 200px;
            height: 200px;
            background-color: pink;
        }

        .george {
            width: 200px;
            height: 200px;
            background-color: skyblue;
        }
    </style>
</head>

<body>
    <div class="peppa">佩奇</div>
    <div class="george">乔治</div>
</body>

</html>

image.png display 隐藏元素后,不再占有原来的位置

后面应用及其广泛,搭配 JS 可以做很多网页特效

2. visibility

visibility 属性用于指定一个元素应可见还是隐藏

  • visibility: visible; —— 元素可见
  • visibility: hidden; —— 元素隐藏
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>显示隐藏visibility</title>
    <style>
        .peppa {
            visibility: hidden;
            width: 200px;
            height: 200px;
            background-color: pink;
        }

        .george {
            width: 200px;
            height: 200px;
            background-color: skyblue;
        }
    </style>
</head>

<body>
    <div class="peppa">佩奇</div>
    <div class="george">乔治</div>
</body>

</html>

image.png visibility 隐藏元素后,继续占有原来的位置

如果隐藏元素想要原来位置,就用 visibility: hidden; 如果隐藏元素不想要原来位置,就用 display: none;

3. overflow

overflow 属性指定了如果内容溢出一个元素的边框(超过其指定高度及宽度)时,会发生什么

属性值描述
visible不剪切内容也不添加滚动条
hidden不显示超过对象尺寸的内容,超出的部分隐藏掉
scroll不管有没有超出内容,总是显示滚动条
auto超出自动显示滚动条,不超出不显示滚动条
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>溢出显示隐藏overflow</title>
    <style>
        .peppa {
            /* overflow: hidden; */
            /* overflow: scroll; */
            overflow: auto;
            width: 200px;
            height: 200px;
            border: 3px solid cyan;
            margin: 100px auto;
        }
    </style>
</head>

<body>
    <div class="peppa">
        小猪佩奇是一只可爱的粉色小猪,她与弟弟乔治、爸爸、妈妈快乐地住在一起。小猪佩奇最喜欢做的事情是玩游戏,打扮的漂漂亮亮,度假,以及住在小泥坑里快乐的跳上跳下。除了这些,她还喜欢到处探险,虽然有些时候会遇到一些小状况,但总可以化险为夷,而且都会带给大家意外的惊喜
    </div>
</body>

</html>

image.png 一般情况下,我们都不想让溢出的内容显示出来,因为溢出的部分会影响布局

但是如果有定位的盒子,请慎用 overflow: hidden; 因为它会隐藏多余的部分

4. 综合案例

需求:鼠标经过一个大盒子,会显示出半透明的黑色遮罩,移开则不显示

遮罩的盒子不占有位置,就需要用绝对定位和 display 配合使用

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .test {
            position: relative;
            width: 630px;
            height: 393px;
            background-color: pink;
            margin: 100px auto;
        }

        .test img {
            width: 100%;
        }

        .mask {
            position: absolute;
            display: none;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            background: rgba(0, 0, 0, .4) url(../images/arr.png) no-repeat center;
        }

        .test:hover .mask {
            display: block;
        }
    </style>
</head>

<body>
    <div class="test">
        <div class="mask"></div>
        <img src="../images/bgimg.png" alt="">
    </div>
</body>

</html>

效果如下

正常情况下

image.png

鼠标经过时

image.png