首页 / CSS 入门教程 / 显示与隐藏

CSS 入门教程

显示与隐藏

本教程共 44 篇 · 第 16 篇 · 更新于 2026-07-29 · 约 8 分钟阅读

displayvisibilityopacity显示隐藏

16. 显示与隐藏

本节目标:掌握 display:none、visibility:hidden、opacity:0 三种隐藏方式的区别,理解块级元素与内联元素的特性,能根据需求选择合适的显示模式。

三种隐藏方式总览

CSS 提供了三种”隐藏元素”的方法,它们看起来效果类似,但底层行为完全不同。先记住一句话:display:none 直接抹掉,visibility:hidden 占位隐身,opacity:0 只是看不见。

display:none —— 彻底消失

display:none 会把元素从文档流中完全移除,不占任何空间,页面就像它不存在一样。

<!DOCTYPE html>
<html lang="zh">
<head>
    <style>
        .box {
            width: 200px;
            height: 100px;
            background: #4CAF50;
            margin: 10px;
        }
        .removed {
            display: none; /* 彻底消失,不占位 */
        }
    </style>
</head>
<body>
    <div class="box">盒子 1</div>
    <div class="box removed">盒子 2(被隐藏)</div>
    <div class="box">盒子 3</div>
</body>
</html>

display:none 不会影响页面布局,后续元素会自动补位。

visibility:hidden —— 占位隐身

visibility:hidden 让元素不可见,但它仍然占据原来的空间,页面布局保持不变。

.hidden-box {
    visibility: hidden; /* 看不见,但位置还在 */
}

适合需要保持布局稳定的场景,比如表格单元格隐藏。

opacity:0 —— 完全透明

opacity 控制透明度,取值 0 到 1。opacity:0 让元素完全透明,但它依然占位,并且可以响应事件(比如点击)。

.fade-out {
    opacity: 0; /* 完全透明,但仍占位且可点击 */
}

三者的核心区别

属性占位响应事件适用场景
display:none完全移除元素
visibility:hidden隐藏但保留空间
opacity:0淡出动画、交互效果

块级元素与内联元素

理解 display 属性,必须先搞清楚两种基本元素类型。

块级元素(block):独占一行,可以设置宽高。比如 <div><p><h1>-<h6>

内联元素(inline):不独占一行,宽高由内容决定。比如 <span><a><strong>

/* 块级元素示例 */
div {
    display: block; /* 默认值,独占一行 */
}

/* 内联元素示例 */
span {
    display: inline; /* 默认值,同行排列 */
}

改变元素的显示类型

CSS 允许你随意切换元素的显示类型,这是布局的基础技巧。

  1. 把内联元素变成块级
span {
    display: block; /* 现在 span 会独占一行 */
}
  1. 把块级元素变成内联
li {
    display: inline; /* 导航菜单常用:让列表项横排 */
}
  1. inline-block —— 两全其美
.menu-item {
    display: inline-block; /* 同行排列,但可设宽高 */
    width: 100px;
    height: 40px;
    line-height: 40px;
    text-align: center;
}

inline-block 是最常用的显示模式之一,既有 inline 的同行特性,又有 block 的宽高控制能力。

实战:水平导航菜单

把垂直列表变成水平菜单,这是 display 最经典的应用。

<!DOCTYPE html>
<html lang="zh">
<head>
    <style>
        .nav {
            list-style: none; /* 去掉列表圆点 */
            padding: 0;
            background: #333;
        }
        .nav li {
            display: inline-block; /* 横排显示 */
        }
        .nav a {
            display: block; /* 让链接占满整个 li */
            padding: 12px 20px;
            color: white;
            text-decoration: none;
        }
        .nav a:hover {
            background: #555;
        }
    </style>
</head>
<body>
    <ul class="nav">
        <li><a href="#">首页</a></li>
        <li><a href="#">关于</a></li>
        <li><a href="#">服务</a></li>
        <li><a href="#">联系</a></li>
    </ul>
</body>
</html>

实战:下拉菜单的显示/隐藏

结合 display 和 :hover 伪类,可以实现纯 CSS 下拉菜单。

<!DOCTYPE html>
<html lang="zh">
<head>
    <style>
        .dropdown {
            position: relative;
            display: inline-block;
        }
        .dropdown-menu {
            display: none; /* 默认隐藏 */
            position: absolute;
            background: white;
            box-shadow: 0 2px 8px rgba(0,0,0,0.15);
            min-width: 120px;
        }
        .dropdown:hover .dropdown-menu {
            display: block; /* 悬停时显示 */
        }
        .dropdown-menu a {
            display: block;
            padding: 10px 16px;
            color: #333;
            text-decoration: none;
        }
        .dropdown-menu a:hover {
            background: #f5f5f5;
        }
    </style>
</head>
<body>
    <div class="dropdown">
        <button>菜单</button>
        <div class="dropdown-menu">
            <a href="#">选项一</a>
            <a href="#">选项二</a>
            <a href="#">选项三</a>
        </div>
    </div>
</body>
</html>

display:none 配合 JavaScript 的 toggle 类,是开发中显示/隐藏元素最常用的组合。

小结

  • display:none:彻底移除,不占位,不响应事件
  • visibility:hidden:隐藏但占位,不响应事件
  • opacity:0:透明但占位,可响应事件
  • block 独占一行,inline 同行排列,inline-block 两者兼顾
  • 改变 display 值是 CSS 布局的核心技巧