CSS display 属性

CSS display 语法

在 CSS 中,display 属性用于设置元素的显示类型。它决定了元素是如何生成其盒模型以及如何参与布局。

语法:

display: 关键字;

说明:

display 的取值有非常多,常用的如下表所示。

display 属性取值
取值 说明
none 将元素隐藏
inline 将元素显示为 “行内元素”
block 将元素显示为 “块级元素”
inline-block 将元素显示为 “行内块元素”
flex 将元素显示为 “弹性容器”
inline-flex 将元素显示为 “行内弹性容器”
grid 将元素显示为 “网格容器”
inline-grid 将元素显示为 “行内网格容器”
table 将元素显示为块级表格
inline-table 将元素显示为行内表格
table-cell 将元素显示为表格单元格
table-row 将元素显示为表格行
list-item 将元素显示为列表项

对于 display 属性,小伙伴们要清楚以下几点。

  • display 属性是 CSS 中最重要的布局属性之一。理解不同 display 值的行为对于构建网页布局非常重要。
  • display: none; 会完全移除元素,而 visibility: hidden; 只是隐藏元素但保留其空间。
  • 每个 HTML 元素都有一个默认的 display 值。例如,div 和 p 的默认值是 block,而 span 和 a 的默认值是 inline,li 的默认值是 list-item。

CSS display 摘要

属于 CSS 盒子模型
使用频率 极高
是否继承
默认值 取决于元素类型
兼容性 查看
官方文档 查看
MDN 查看

CSS display 示例

接下来,我们通过几个简单的例子来讲解一下 CSS display 属性是如何使用的。

示例 1:inline、block 和 inline-block 的区别

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <style>
        .block-box {
            display: block;
            width: 100px;
            height: 50px;
            background-color: lightskyblue;
            margin: 10px;
        }
        .inline-box {
            display: inline;
            width: 100px;      /* 无效 */
            height: 50px;      /* 无效 */
            background-color: lightseagreen;
            margin: 10px;      /* 垂直 margin 无效 */
        }
         .inline-block-box {
            display: inline-block;
            width: 100px;
            height: 50px;
            background-color: lightcoral;
            margin: 10px;
        }
    </style>
</head>
<body>
    <div class="block-box">block</div>
    <span class="inline-box">inline</span>
    <span class="inline-box">inline</span>
    <div class="inline-block-box">inline-block</div>
    <div class="inline-block-box">inline-block</div>
</body>
</html>

页面效果如下图所示。

inline、block和 inline-block 的区别

分析:

从结果可以看出,block 元素会独占一行,并且排斥其他元素。inline 元素会与其他 inline 元素并排排列,并且忽略了宽度、高度以及垂直外边距的设置。inline-block 元素会与其他 inline、inline-block 元素并排排列,但可以设置宽度、高度和完整的内外边距。

示例 2:使用 display: none; 隐藏元素

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <style>
        .box1 {
            width: 100px;
            height: 50px;
            background-color: lightblue;
            margin: 10px;
        }
        .box2 {
            display: none; /* 完全隐藏元素 */
        }
         .box3 {
            width: 100px;
            height: 50px;
            background-color: lightgreen;
            margin: 10px;
        }
    </style>
</head>
<body>
    <div class="box1">可见元素 A</div>
    <div class="box2">隐藏元素</div>
    <div class="box3">可见元素 B</div>
</body>
</html>

页面效果如下图所示。

使用display: none; 隐藏元素

分析:

在这个例子中,我们给 box2 设置了 display: none;,这样会使得该元素及其内容完全不显示,并且在布局中不再占据任何空间。因此从页面效果可以看到,“可见元素” 后面直接跟着 “可见元素B”,中间是没有任何间隔的。

示例 3:使用 display: flex; 创建弹性布局

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <style>
        .container {
            display: flex;                    /* 设置为弹性容器 */
            justify-content:space-evenly;     /* 子元素在主轴上平均分布 */
            background-color: lightskyblue;
            padding: 10px;
            margin: 20px;
            
        }
        .item {
            width: 80px;
            height: 50px;
            background-color: hotpink;
            margin: 5px;
            text-align: center;
            line-height: 50px;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="item">首页</div>
        <div class="item">教程</div>
        <div class="item">关于</div>
    </div>
</body>
</html>

页面效果如下图所示。

使用 display: flex; 创建弹性布局

分析:

在这个例子中,我们为 .container 元素设置了 display: flex;,此时它会成为一个弹性容器,然后其内部的子元素都会成为弹性子项。

然后由于还给 .container 元素设置了 justify-content: space-evenly;,其内部子元素会按照弹性布局的规则进行平均分布。

示例 4:使用 display: grid; 创建网格布局

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <style>
        .container {
            display: grid;                            /* 设置为网格容器 */
            grid-template-columns: 100px 100px auto;  /* 定义三列的宽度 */
            grid-template-rows: 50px 50px;            /* 定义两行的高度 */
            gap: 10px;                                /* 设置网格间距 */
            padding: 10px;
            margin: 20px;
            border: 1px solid gray;
        }
        .item {
            background-color: lightcoral;
            text-align: center;
            line-height: 50px;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="item">1</div>
        <div class="item">2</div>
        <div class="item">3</div>
        <div class="item">4</div>
        <div class="item">5</div>
        <div class="item">6</div>
    </div>
</body>
</html>

页面效果如下图所示。

使用 display: grid; 创建网格布局

分析:

在这个例子中,我们为 .container 元素设置了 display: grid;,此时它会成为一个网格容器,其直接子元素会自动成为网格子项,并按照定义的网格结构进行排列。

其中 grid-template-columns 和 grid-template-rows 这两个属性用于定义网格的列和行结构,gap 属性用于设置网格项之间的间距。

提示: 弹性布局(display: flex;)和网格布局(display: flex;)的内容非常复杂,如果小伙伴们想要深入了解,建议到 “CSS 属性” 手册中把相关的每一个属性都看一遍。

示例 5:使用 display: table; 创建表格布局

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <style>
        .table-container {
            display: table;              /* 模拟表格 */
            width: 300px;
            border: 1px solid silver;
            margin: 20px;
        }
        .table-row {
            display: table-row;          /* 模拟表格行 */
        }
        .table-cell {
            display: table-cell;         /* 模拟表格单元格 */
            border: 1px solid silver;
            padding: 10px;
            text-align: center;
            vertical-align: middle;      /* 垂直居中文本 */
        }
    </style>
</head>
<body>
    <div class="table-container">
        <div class="table-row">
            <div class="table-cell">header 1</div>
            <div class="table-cell">header 2</div>
        </div>
        <div class="table-row">
            <div class="table-cell">数据 1</div>
            <div class="table-cell">数据 2</div>
        </div>
         <div class="table-row">
            <div class="table-cell">数据 3</div>
            <div class="table-cell">数据 4</div>
        </div>
    </div>
</body>
</html>

页面效果如下图所示。

使用 display: table; 创建表格布局

分析:

虽然在现代布局中,我们更推荐使用 flex 布局或 grid 布局,但有些特殊情况下使用 display: table; 及其相关值来模拟简单的表格布局也是可行的。

在这个例子中将容器设置为 display: table;,内部的子元素设置为 display: table-row; 来模拟行,行的子元素设置为 display: table-cell; 来模拟单元格。这会使得元素产生类似于 HTML 表格元素的布局行为。

上一篇: background

下一篇: box-sizing

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号