news 2026/5/28 18:35:49

display到底应该怎样理解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
display到底应该怎样理解

一个 HTML 盒子(元素)以样什么方式显示,是否独占一行,能否设置宽高,内部子元素该如何排列。全都由display这个属性决定。display是 CSS 最核心、最常用的属性之一。

而它的几个孩子也有着不同于彼此的属性。用一个表格来讲。

display 值会不会换行能否设置宽高用途
block

大容器、段落、标题
inline不会不能文字高亮、链接
inline-block不会按钮、导航、图标
none隐藏-隐藏元素
flex父控制子现代灵活布局

相信上面的表格已经让你对display这个属性有了基础的认识,下面我们通过代码和一些注意事项对他进行更深一步的认识吧。

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>盒子的display属性:控制元素的性质</title> <style> #div1 { width: 200px; height: 80px; background-color: red; border: 2px black solid; /* 隐藏元素 */ /* display: none; */ /* 强行设置为普通行内元素, 宽高不能自行设置,其宽高仅由内容撑起 */ /* display: inline; */ /* 强行设置为行内块元素,通过配置成inline-block, 宽高可以自行设置 */ /* display: inline-block; */ } #div2 { width: 200px; height: 80px; background-color: blue; border: 2px black solid; /* 行内元素,宽高不能设置,只能有默认的宽高 */ /* display: inline; */ /* 强行设置为行内块元素,通过配置成inline-block, 宽高可以自行设置 */ /* display: inline-block; */ } #div3 { width: 200px; height: 80px; background-color: green; border: 2px black solid; /* 强行设置为行内块元素,通过配置成inline-block, 宽高可以自行设置 */ /* display: inline-block; */ } #div4 { width: 200px; height: 80px; background-color: yellow; border: 2px black solid; /* 强行设置为行内块元素,通过配置成inline-block, 宽高可以自行设置 */ /* display: inline-block; */ } b { width: 200px; height: 80px; background-color: pink; border: 2px black solid; /* 强行配置为块元素,宽高可以设置 */ /* display: block; */ /* 强行设置为行内块元素,通过配置成inline-block, 宽高可以自行设置 */ /* display: inline-block; */ } </style> </head> <body> <div class="container"> <!-- 普通块元素 --> <div id="div1">盒子1</div> <div id="div2">盒子2</div> <div id="div3">盒子3</div> <div id="div4">盒子4</div> <!-- 普通行内元素 --> <b>盒子5</b> <b>盒子6</b> </div> </body> </html>

运行效果如图

这时有人会问了。为什么盒子56的行高和宽度没有变化呢?代码中的b元素不是已经给他们设置了吗?

这不 注意事项就来了!

display默认是inline(行内元素),行内元素是无法直接设置宽高的!

那我们要怎么解决呢?我们可以设置块内元素来强行控制它。

代码如下

display: block;

如此,我们便可以得到

这样整整齐齐的盒子了。而我们不仅可以让他竖着来,也可以让他横着来。

/* 强行设置为行内块元素,通过配置成inline-block, 宽高可以自行设置 */ display: inline-block;

下面,我们来介绍一下display一个比较特殊的孩子Flex。

Flex容器(父元素):给父标签加 display: flex,它就变成Flex容器,能控制所有子元素的排列方式

Flex项目(子元素):容器里的所有直接子标签,会自动遵循Flex规则排列,不再是默认的垂直流式布局

同时要记住两条轴线(所有对齐、排列都靠这两条线):

主轴:默认水平左右方向,子元素默认顺着主轴从左到右排

交叉轴:默认垂直上下方向,和主轴相互垂直

<!DOCTYPE html> <html lang="zh-CN"> <head> <!-- 【Flex 布局核心概念与机制】 Flexbox 是 CSS3 引入的一种一维布局模型,旨在提供更高效的方式来布局、对齐和分配容器内项目的空间。 其核心概念包括: 容器与项目:采用 Flex 布局的元素称为 Flex 容器,其内部的子元素称为 Flex 项目。 主轴与交叉轴:Flex 容器有两根轴,主轴由flex-direction定义,交叉轴垂直于主轴。 对齐方式:justify-content 控制主轴对齐,align-items 和 align-content 控制交叉轴对齐。 空间分配:通过 flex-basis、flex-grow 和 flex-shrink 控制项目在主轴上的初始大小、放大和缩小比例。 --> <meta charset="UTF-8"> <title>Flex布局示例1 - 基本容器(按照默认规则排列)</title> <style> .container { /* ===== Flex 容器默认规则(不写属性时的默认值)===== 1. flex-direction: row → 主轴方向:水平从左到右 → 项目会水平排列成一排 2. flex-wrap: nowrap → 不换行(默认) → 项目会被压缩以适应容器宽度(除非设置 flex-shrink: 0) → 如果想换行,需要设置: flex-wrap: wrap; 3. justify-content: flex-start → 主轴对齐方式:项目靠主轴起点(左)对齐 → 其他值: flex-end(右) | center(居中) | space-between | space-around 4. align-items: stretch → 交叉轴对齐方式:项目会拉伸填满整个交叉轴方向 → 前提:项目没有设置 height(或者 height 为 auto) → 其他值: flex-start | flex-end | center | baseline 5. align-content: normal (在单行时无效) → 多行项目在交叉轴方向的对齐方式 ===== 项目(item)的默认规则 ===== 6. flex-grow: 0 → 默认不自动放大(当容器有剩余空间时) → 如果想自动放大: flex-grow: 1; 7. flex-shrink: 1 → 默认会自动收缩(当项目总宽度超过容器时) → 注意:只有 width/flex-basis 参与收缩,margin/padding/border 不会收缩! → 如果不想收缩: flex-shrink: 0; 8. flex-basis: auto → 项目的基础尺寸,默认取 width 值 → 也可以设置为具体像素: flex-basis: 100px; */ /* 通过 display:flex 将此元素强制转换为 Flex 容器 */ display: flex; /* 下面是可自行配置的灵活规则 */ /* flex-direction: row; flex-wrap: nowrap; justify-content: flex-start; */ border: 2px solid #aaa; width: 600px; height: 300px; padding: 10px; } .item { background-color: #4CAF50; border: 3px solid red; width: 80px; height: 40px; color: white; text-align: center; } </style> </head> <body> <h3>Flex容器示例(项目按照容器默认规则排列)</h3> <div class="container"> <!-- 块元素:从上到下文档流排列 --> <div class="item">项目1</div> <div class="item">项目2</div> <div class="item">项目3</div> <div class="item">项目1</div> <div class="item">项目2</div> <div class="item">项目3</div> <div class="item">项目1</div> <div class="item">项目1</div> <div class="item">项目2</div> <div class="item">项目3</div> <div class="item">项目1</div> </div> </body> </html>

主轴对齐方式

<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>Flex布局示例3 - justify-content(主轴对齐方式)</title> <style> /* ====== justify-content 属性详解 ====== 作用:控制所有项目在主轴(水平方向)上的对齐方式和间距分布 前提:只有在主轴方向有剩余空间时才会生效 可选值: 1. flex-start → 项目靠主轴起点(左边)对齐(默认值) 2. flex-end → 项目靠主轴终点(右边)对齐 3. center → 项目在主轴方向居中对齐 4. space-evenly → 项目之间以及项目与容器边缘的间距完全相等 5. space-between → 项目之间间距相等,但首尾项目紧贴容器边缘 6. space-around → 项目两侧的外边距相等(项目之间间距是边缘间距的2倍) */ .container { display: flex; border: 2px solid #a00; padding: 10px; height: 100px; } /* ====== 项目样式 ====== 简单设置项目的尺寸和外观 */ .item { background-color: #4CAF50; border: 3px solid red; width: 80px; height: 40px; color: white; /* margin: 5px; padding: 20px; */ text-align: center; } </style> </head> <body> <h1>justify-content(控制主轴对齐方式)</h1> <!-- justify-content属性的六种取值,控制项目在主轴上的对齐方式和间距分布。 --> <h3>justify-content: flex-start 项目在容器中,以主轴起点对齐(默认值)</h3> <div class="container" style="justify-content: flex-start;"> <div class="item">项目1</div> <div class="item">项目2</div> <div class="item">项目3</div> </div> <h3>justify-content: flex-end 项目在容器中,以主轴终点对齐</h3> <div class="container" style="justify-content: flex-end;"> <div class="item">项目1</div> <div class="item">项目2</div> <div class="item">项目3</div> </div> <!-- <h3>justify-content: center 项目在容器中,以主轴居中对齐</h3> <div class="container" style="justify-content: center;"> <div class="item">项目1</div> <div class="item">项目2</div> <div class="item">项目3</div> </div> <h3>justify-content: space-evenly 项目在容器中均匀分布</h3> <div class="container" style="justify-content: space-evenly;"> <div class="item">项目1</div> <div class="item">项目2</div> <div class="item">项目3</div> </div> <h3>justify-content: space-between 项目在容器中均匀分布,但首尾项目紧贴容器边缘</h3> <div class="container" style="justify-content: space-between;"> <div class="item">项目1</div> <div class="item">项目2</div> <div class="item">项目3</div> </div> <h3>justify-content: space-around 项目在容器中均匀分布,但每个项目两侧外边距相等</h3> <div class="container" style="justify-content: space-around;"> <div class="item">项目1</div> <div class="item">项目2</div> <div class="item">项目3</div> </div> --> </body> </html>

多行项目在容器交叉轴方向上的对齐方式

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Flex布局示例6 - 多行项目在容器交叉轴方向的对齐方式(含换行控制)</title> <style> /* ====== align-content 属性详解 ====== 作用:控制多行项目在交叉轴(垂直方向)上的对齐方式 重要前提: 1. 必须先使用 flex-wrap: wrap 换行(产生多行) 2. 只有一行时,align-content 无效 3. 只有在交叉轴方向有剩余空间时才会生效 可选值: 1. flex-start → 所有行靠交叉轴起点(顶部)对齐 2. flex-end → 所有行靠交叉轴终点(底部)对齐 3. center → 所有行在交叉轴方向居中对齐 4. space-between → 行之间间距相等,首行靠顶,末行靠底 5. space-around → 行上下间距相等,整体与容器边缘也有间距 6. stretch → 默认值,行拉伸填满剩余空间(行内项目也会被拉伸) */ /* ====== flex-wrap 属性说明 ====== 可选值: 1. nowrap (默认) → 不换行,项目会被压缩以适应容器 2. wrap → 换行,项目超出容器时自动换到下一行 3. wrap-reverse → 换行,但反向显示(第一行在底部) */ /* 定义flex容器的基础样式 */ .container { /* 将容器设置为flex布局 */ display: flex; /* 容器宽度固定,控制换行效果 */ width: 500px; /* 容器高度固定,为交叉轴留出空间 */ height: 250px; /* 容器边框,方便观察整体范围 */ border: 2px solid #333; /* 容器之间的外边距,避免拥挤 */ margin: 10px; /* 强制换行:当项目总宽度超过容器时自动换行,产生多行 */ flex-wrap: wrap; } /* ====== 项目样式 ====== 注意:本示例中项目没有 margin,所以 flex-shrink 可以正常压缩 如果项目有 margin,margin 不会参与压缩,可能导致溢出 */ .item { /* 项目宽度 */ width: 160px; /* 项目高度 */ height: 40px; /* 项目边框 */ border: green solid 1px; /* 文字颜色 */ color: red; /* 文字水平居中 */ text-align: center; /* 项目外边距(注释掉,为了让 flex-shrink 正常压缩)*/ /* margin: 5px; */ } /* 标题样式 */ p { margin: 20px 0 5px 10px; } </style> </head> <body> <!-- ====== align-content vs align-items 区别 ====== 本页面展示了 align-content 的效果: 注意:由于 flex-wrap 被注释掉,项目没有真正换行! 所以本示例中 align-content 实际上不生效(只有一行)。 如果想看真正的多行对齐效果,需要取消注释 flex-wrap: wrap; 重要区别: - align-items: 作用于"单行"内的所有项目(垂直方向的对齐) - align-content: 作用于"多行"整体(多行作为一个整体在容器中的对齐) 换行相关属性: - flex-wrap: nowrap (默认) → 不换行 - flex-wrap: wrap → 换行 --> <h1>多行项目在容器交叉轴方向上的对齐方式</h1> <!-- 第一个容器没有设置 align-content,所以使用默认值 stretch 由于没有换行(flex-wrap 被注释),所以 align-content 实际不生效 --> <p>align-content: flex-start(所有行整体靠交叉轴起点/顶部)</p> <div class="container" style="align-content: flex-start;"> <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 class="item">7</div> <div class="item">8</div> </div> <!-- 2. align-content: center --> <!-- 效果:所有行作为一个整体,在容器垂直方向居中 --> <p>align-content: center(所有行整体在交叉轴中间/垂直居中)</p> <div class="container" style="align-content: center;"> <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 class="item">7</div> <div class="item">8</div> </div> <!-- 3. align-content: flex-end --> <!-- 效果:所有行靠容器底部对齐 --> <p>align-content: flex-end(所有行整体靠交叉轴终点/底部)</p> <div class="container" style="align-content: flex-end;"> <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 class="item">7</div> <div class="item">8</div> </div> <!-- 4. align-content: space-between --> <!-- 效果:第一行靠顶,最后一行靠底,行之间间距相等 --> <p>align-content: space-between(行与行之间间距相等,第一行靠顶,最后一行靠底)</p> <div class="container" style="align-content: space-between;"> <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 class="item">7</div> <div class="item">8</div> </div> <!-- 5. align-content: space-around --> <!-- 效果:每行上下间距相等,整体与容器边缘也有间距 --> <p>align-content: space-around(行上下都有相等间距,整体与容器边缘也有间距)</p> <div class="container" style="align-content: space-around;"> <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 class="item">7</div> <div class="item">8</div> </div> </body> </html>

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/28 18:34:32

人机界面与工业控制中的MKL24Z32VLK4:66 I/O Kinetis KL2 MCU应用案例解析

MKL24Z32VLK4&#xff1a;Kinetis KL2系列ARM Cortex-M0超低功耗MCU深度解析在工业自动化、人机界面设备、物联网网关以及需要丰富I/O资源的嵌入式系统中&#xff0c;微控制器的引脚数量和封装形式往往成为系统集成的关键制约因素。当应用需要连接大量传感器、执行器或通信外设…

作者头像 李华
网站建设 2026/5/28 18:34:05

别再死磕DISTINCT了!数据库内核这样自动优化,去重查询快到飞起

平时写SQL&#xff0c;DISTINCT 绝对是我们最顺手的去重工具。不管是查下拉选项、做统计去重、还是多表关联怕重复&#xff0c;随手敲个 DISTINCT 几乎成了肌肉记忆。 但只要数据量稍微一大&#xff0c;你一定遇过这种崩溃场景&#xff1a;一条加了 DISTINCT 的查询&#xff0c…

作者头像 李华
网站建设 2026/5/28 18:33:24

异构数据库同步实战:如何打通Oracle/MySQL/SQL Server的数据孤岛

大家好呀&#xff01;我是 数据库小学妹 &#x1f44b; 前几天有个朋友问我&#xff1a;"ERP在Oracle&#xff0c;CRM用MySQL&#xff0c;分析平台又是Hadoop…数据散落在不同系统里&#xff0c;怎么让他们“对话”&#xff1f; 更头疼的是&#xff0c;总部和分支机构之间…

作者头像 李华
网站建设 2026/5/28 18:32:21

如何快速掌握Python金融数据获取:pywencai的完整指南

如何快速掌握Python金融数据获取&#xff1a;pywencai的完整指南 【免费下载链接】pywencai 获取同花顺问财数据 项目地址: https://gitcode.com/gh_mirrors/py/pywencai 还在为获取金融数据而烦恼吗&#xff1f;你是不是经常遇到这些问题&#xff1a;爬虫代码复杂难维护…

作者头像 李华
网站建设 2026/5/28 18:31:55

订单 30 分钟过期 + 临界支付 完整 Java 代码实战讲解

目录 先定义核心场景 一、核心实体与常量 二、核心工具:Redis 分布式锁(解决并发竞态) 三、场景 1:订单自动过期任务(30 分钟触发) 代码逻辑(关键) 四、场景 2:用户支付接口(临界时刻核心处理) 代码逻辑(最关键) 五、场景 3:支付回调兜底(防止极端资损)…

作者头像 李华