大河弯弯:CSS 文档流与三大元素显示模式
文章目录
- 参考
- 环境
- 文档流
- 概念
- 三大显示模式
- 内联元素
- 概念
- 常见的内联元素
- 宽高由内容决定
- 块级元素
- 概念
- 常见的块级元素
- 宽度受容器影响,高度受内容影响
- 内联块级元素
- 概念
- 常见的内联块级元素
- 折中方案
- 设置元素的显示模式
- display 属性
- 内联元素与块级元素的切换
- 为什么要通过 display 来修改元素的显示模式?
参考
项目 | 描述 |
---|---|
搜索引擎 | Bing、Google |
AI 大模型 | 文心一言、通义千问、讯飞星火认知大模型、ChatGPT |
MDN | MDN Web Docs |
W3School | 在线教程 |
环境
项目 | 描述 |
---|---|
Chrome | 118.0.5993.88(正式版本) (64 位) |
操作系统 | Windows 10(专业版) |
文档流
概念
文档流是指网页上元素的 默认布局顺序
。想象你有一本书
,这本书中的内容是 从上到下
,从左到右
顺序阅读的。同样的,HTML文档的元素默认也是从上到下,块级元素会垂直排列,内联元素会水平排列。
在不使用 CSS
的情况下,浏览器会 按照文档流的规则来摆放元素
。当我们使用CSS 中的 float
、position
、flexbox
、grid
等属性时,元素可能会 脱离标准的文档流
,形成一个新的布局方式。但为了理解这些高级布局技巧,首先要掌握基本的文档流概念。
三大显示模式
在 CSS 中,显示模式
指的是 HTML 元素在文档流中 如何被渲染和布局的一种特性
,不同的显示模式决定了元素如何占据空间以及与其他元素相互交互的方式。CSS 中存在 三种十分常见的显示模式
,即块级元素,内联元素,内联块级元素。
内联元素
概念
想象你正在读 一本书
,你的目光滑过每一个字母、每一个词,连续不断。内联元素就像这些字词,它们排成一行,直到遇到 边界(页面边缘)
才会换行。内联元素之间没有自动的换行,它们的 宽高由内容决定
,并不接受我们设置的宽高值。
常见的内联元素
内联元素可以嵌套在块级元素中,或者与其他内联元素一起使用
,每个元素都有其特定的语义和样式,可以根据需要自由组合以创建所需的网页内容。
内联元素 | 功能描述 |
---|---|
<a> | 创建超链接,用于导航到其他页面或资源。 |
<span> | 常用于对内联元素进行分组(便于通过 CSS 设置样式)或用于放置文本。 |
<img> | 用于插入图像。 |
<br> | 起换行作用。 |
<sub> | 用于标记需要作为下标的文本,通常用于化学式和数学公式。 |
<sup> | 用于标记需要作为上标的文本,通常用于指数和脚注。 |
宽高由内容决定
在 CSS 中,内联元素的宽度和高度通常由其包含的内容决定
,这是因为内联元素的主要特点是在文本中水平排列,不会独占一行,并且 只占据其包含的内容所需的空间
。这种自动适应内容的行为使内联元素在 包围文本等内容
时非常灵活。元素会随着内容的变化而自动调整大小而 不需要手动指定固定的宽度和高度
,这 在处理不同长度的文本或可变内容时非常有用
。
举个栗子
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>宽高由内容决定</title>
</head>
<body><!-- 由于使用内联元素包裹文本,故多个内联元素将显示在一行中,仅在当前行已满才发生换行。--><a href="https://baike.baidu.com/item/%E4%B9%9F%E6%98%AF%E5%BE%AE%E4%BA%91/3056682">《也是微云》</a><span>也是微云,</span><span>也是微云过后月光明。</span><span>只不见去年得游伴,</span><span>也没有当日的心情。</span><!-- 尝试通过行内元素设置元素的宽高,由于行内元素无法设置宽高,故 style 属性中的与宽高相关的 CSS 样式将不会生效--><span style="width: 100px;height: 100px;background-color: dodgerblue;">不愿勾起相思,</span><span>不敢出门看月。</span><span>偏偏月进窗来,</span><span>害我相思一夜。</span></body>
</html>
执行效果
在浏览器中访问上述 HTML 文档,将得到如下类似内容:
块级元素
概念
想象一个 书柜
,每一个格子代表一个块级元素。每一个格子独立占据空间,从左到右,从上到下。块级元素通 常用于构建页面的主体结构
,它们会 自动填满(当然你也可以显示设置此类元素的宽度)
它们所在的 容器宽度(父元素宽度)
,而 高度则由内容或设定的样式所决定
。
常见的块级元素
块级元素 | 功能 |
---|---|
<div> | 常用于元素的分组(便于布局控制及样式设置)。 |
<p> | 用于文本段落。 |
<h1~6> | 用于创建标题,数字越小,级别越高。 |
<section> | 表示文档中的一个区域或部分,有语义化的作用。 |
<article> | 表示文档中的独立内容,通常是文章或新闻等。 |
<header> | 用于定义文档或区域的页眉,通常包含标题和导航。 |
<footer> | 用于定义文档或区域的页脚,通常包含版权信息等。 |
<nav> | 用于包含导航链接,通常位于页眉或页脚中。 |
<aside> | 用于定义侧边栏内容,通常与主要内容分开显示。 |
宽度受容器影响,高度受内容影响
块级元素通常会 自动扩展以填充其容器的可用宽度
。如果你 不显式地设置块级元素的宽度
,它将占据其容器的全部可用宽度。这意味着块级元素的宽度受到其父容器的宽度限制。如果你将块级元素放入一个较窄的容器,它的宽度将 收缩以适应容器
,而如果放入一个更宽的容器,它的宽度将 扩展以填满容器
。
块级元素的高度 通常由其内部内容的高度决
定。这意味着块级元素的高度将根据其包含的文本、其他元素、内边距和边框等内容的高度来 自动调整。如果没有显式设置高度,块级元素的高度将根据内容动态调整
。
举个栗子
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>宽度受容器影响,高度受内容影响</title>
</head>
<body><!-- 位于最外侧的容器 --><div id="container" style="width: 120px;"><!-- 包裹实际内容的 div 标签 --><div><div><a href="https://baike.baidu.com/item/%E4%B9%9F%E6%98%AF%E5%BE%AE%E4%BA%91/3056682">《也是微云》</a></div>也是微云,也是微云过后月光明。只不见去年得游伴,也没有当日的心情。不愿勾起相思,不敢出门看月。偏偏月进窗来,害我相思一夜。</div></div></body>
</html>
执行效果
内联块级元素
概念
内联块级元素 既有块级元素的特点
,允许你设置宽和高;同时也 有内联元素的特性
,它们并排显示,并在必要时换行。因此,内联块级元素为我们提供了一种灵活的布局方式,兼具块级和内联元素的优点
。
常见的内联块级元素
元素 | 功能描述 |
---|---|
<img> | 用于在网页中嵌入图片 |
<button> | 创建一个点击按钮 |
折中方案
内联块级元素是内联元素与块级元素之间的一种 折中方案
,该元素既允许同内联元素一般 并排显示,在必要时换行
,还允许为这些元素 设置样式以规定其宽高
。
举个栗子
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>这种方案--内联块级元素</title>
</head>
<body><!-- 并排显示 --><button>H</button><button>e</button><button>l</button><button>l</button><button>o</button><button> </button><button>W</button><button>o</button><button>r</button><button>l</button><button>d</button><!-- 必要时换行 --><div style="width: 120px;"><button>H</button><button>e</button><button>l</button><button>l</button><button>o</button><button> </button><button>W</button><button>o</button><button>r</button><button>l</button><button>d</button></div><!-- 可设置宽高 --><button style="width: 30px;height:50px;">H</button><button>e</button><button>l</button><button>l</button><button>o</button><button> </button><button style="width: 30px;height:50px;">W</button><button>o</button><button>r</button><button>l</button><button>d</button></body>
</html>
执行效果
设置元素的显示模式
display 属性
在 CSS 中,display 属性用于 控制 HTML 元素在页面中的显示方式
,可以使元素以不同的方式进行显示。
display 的常用属性值
属性值 | 描述 | 示例元素 |
---|---|---|
block | 元素将以块级元素的方式呈现,通常占据父容器的整个宽度,独占一行。 | <div> , <p> , <h1> |
inline | 元素以内联元素的方式呈现,不会强制换行,仅占据其内容所需的宽度。 | <span> , <a> , <strong> |
inline-block | 元素以内联元素的方式呈现,但允许设置宽度、高度、内外边距等。 | 通常用于创建水平排列的块级元素,例如 导航菜单项 。 |
none | 元素将于页面中消失,不占据页面空间。 | 常用于通过 JavaScript 来控制元素的显示与隐藏。 |
内联元素与块级元素的切换
通过为 HTML 元素设置 display 属性将能够控制 HTML 元素的显示模式,如 将内联元素以块级元素的显示方式进行渲染
。对此,请参考如下示例:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>宽高由内容决定</title><!-- 通过 style 标签将带有 block ID 属性的元素以块级元素的显示方式进行渲染--><style>#block {display: block;width: 200px;height: 50px;background-color: salmon;}</style></head>
<body><a id="block" href="https://baike.baidu.com/item/%E4%B9%9F%E6%98%AF%E5%BE%AE%E4%BA%91/3056682">《也是微云》</a><span>也是微云,</span><span>也是微云过后月光明。</span><span>只不见去年得游伴,</span><span>也没有当日的心情。</span><span style="width: 100px;height: 100px;background-color: dodgerblue;">不愿勾起相思,</span><span id="block">不敢出门看月。</span><span id="block">偏偏月进窗来,</span><span id="block">害我相思一夜。</span></body>
</html>
执行效果
通过为 span
标签设置 display: block;
样式,即使是内联元素也具有了块级元素的特性。
为什么要通过 display 来修改元素的显示模式?
在 CSS 中,虽然你可以通过使用具有特定显示模式的元素来达成目标,但 display
属性提供了更大的 灵活性
与 可维护性
。
优点 | 描述 |
---|---|
简化样式控制 | 使用 display 属性,可以轻松地在同一个元素上切换不同的显示模式,而 不必创建多个具有不同显示模式的元素 。 |
使元素符合语义要求 | HTML 应该关注文档的结构和语义,而不应过多地关注样式和布局 。通过使用 display 属性,可以确保 HTML 保持语义上的清晰,因为元素的 显示方式可以在样式表中进行控制,而不是通过元素来实现样式 。 |
相关文章:

大河弯弯:CSS 文档流与三大元素显示模式
文章目录 参考环境文档流概念三大显示模式 内联元素概念常见的内联元素宽高由内容决定 块级元素概念常见的块级元素宽度受容器影响,高度受内容影响 内联块级元素概念常见的内联块级元素折中方案 设置元素的显示模式display 属性内联元素与块级元素的切换为什么要通过…...
第六章:函数(中)
函数的参数 1.位置参数 位置参数是指函数调用时,参数的位置与函数定义中参数的位置对应,从而确定参数的值。 def fight(x,y,z):return .join((z,y,x)) fight(八神庵,打败了...

Top 10 数据恢复工具,可从iPhone 和 iPad 恢复数据
您是否正在寻找最好的 iPad 恢复软件,但不知道哪个选项最好?没有什么可担心的。本文将为您提供有关根据文件类型、设备兼容性和数据丢失原因等因素选择合适的 iPad 恢复软件的提示。此外,前 10 名提到的恢复软件是安全可靠的。 第 1 部分、iP…...
【C++程序员必修第一课】C++基础课程-14:C++ 函数(上)
1 本课主要内容: 函数是什么?函数的声明、定义和调用;函数返回值,函数参数,参数默认值函数参数不同类型的调用方式:传值、指针、数组、常量引用、引用等 2 主要知识点: 函数是什么? …...

android studio打开flutter项目报红
一、android studio打开flutter项目报红,如下图: 二、解决方法: 2.1 在这个build.gradle添加以下代码,如图: 2.2 在build.gradle最顶部添加如下代码: def localProperties new Properties() def localPr…...

julia笔记:字符和字符串
1 字符 Char类型的值代表单个字符 ca #a: ASCII/Unicode U0061 (category Ll: Letter, lowercase)typeof(c) #Char 将 Char 转换为其对应的整数值,即 Unicode 代码 cInt(c) c #97typeof(c) #Int64 将一个整数值(Unicaode)转回 Char Cha…...
组合数(递推版)的初始化
初始考虑为将第一列数和斜对角线上的数进行初始化。 橙色方块由两个绿色方块相加而来,一个为1,一个为0,所以斜对角线都为1,可以通过计算得来,不需要初始化,需要与码蹄集盒子与球 第二类Stirling数…...

Apache JMeter 安装教程
下载: 注意事项:使用JMeter前需要配置JDK环境 下载地址 下载安装以后,打开安装的bin目录 D:\software\apache-jmeter-5.4.1\apache-jmeter-5.4.1\bin,找到jmeter.bat,双击打开 打开后的样子 语言设置: 1…...

【unity小技巧】实现无限滚动视图和类似CSGO的开箱抽奖功能及Content Size Fitter组件的使用介绍
文章目录 一篇一句前言素材一、无限滚动视图1. 绘制视图2. Content Size Fitter是布局控件(1)在文本框中使用(2)控制Scroll View(Scroll Rect组件)控件下Content的大小 3. 控制视图无限滚动4. 向右拉无限滚动5. 修复滚动视图一卡一…...

Mybatis的SqlRunner执行流程
Mybatis的SqlRunner执行流程 SqlRunner exec new SqlRunner(connection); Map<String, Object> row exec.selectOne("SELECT * FROM PRODUCT WHERE PRODUCTID ?", "FI-SW-01");connection.close();assertEquals("FI-SW-01", row.ge…...

Zookeeper、Kafka集群与Filebeat+Kafka+ELK架构、部署实例
Zookeeper、Kafka集群与FilebeatKafkaELK架构、部署实例 一、Zookeeper1.1、Zookeeper 定义1.2、Zookeeper 工作机制1.3、Zookeeper 特点1.4、Zookeeper 数据结构1.5、Zookeeper 应用场景1.5、Zookeeper 选举机制1.5.1、 第一次启动选举机制1.5.2、 非第一次启动选举机制 二、Z…...
leetcode做题笔记198. 打家劫舍
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的…...
【编解码格式】DV
DV DV是指用于存储数位影片(英语:Digital video)的一种编解码器和录像带格式系列,由索尼和松下为首的摄像机制造商联盟于1995年推出。20世纪90年代末和21世纪初,DV与从模拟到数字的桌面式视频制作的过渡密切相关&…...
Flink之常用处理函数
常用处理函数 处理函数概述 基本处理函数ProcessFunction介绍使用示例 按键分区处理函数KeyedProcessFunction介绍定时器Timer和定时服务TimerService使用示例其他 窗口处理函数ProcessWindowFunction介绍ProcessAllWindowFunction介绍使用示例 流的合并处理函数CoProcessFunct…...

【C语言】善于利用指针(三)
💗个人主页💗 ⭐个人专栏——C语言初步学习⭐ 💫点击关注🤩一起学习C语言💯💫 目录 导读:1. 函数指针1.1 什么使函数指针1.2 用函数指针变量调用函数 2. 返回指针值的函数3. 函数指针数组3.1 实…...

ant design vue Message 用法以及内容为 html片段情况
ant design vue 的 Message 用法 全局展示操作反馈信息 何时使用 # 可提供成功、警告和错误等反馈信息。顶部居中显示并自动消失,是一种不打断用户操作的轻量级提示方式。 全局配置: // main.ts// 进行全局配置 message.config({top: 0.7rem,//高度…...
HotSpot算法细节实现——安全点
OopMap 垃圾回收时,如何找到垃圾? 在可达性分析算法中从GC Roots集合找引用链分析对象是否可达。 固定可作为GC Roots的节点主要在全局性的引用(例如常量或类静态属性)与执行上下文(例如栈帧中的本地变量表…...

杂谈:DC对Verilog和SystemVerilog语言的支持
DC对Verilog和SystemVerilog语言的支持 设计语言用哪种?Design Compiler对二者的支持简单的fsm电路测试测试结果对比写在最后 设计语言用哪种? 直接抛出结论:先有电路,后为描述。设计端而言,没有语言的高低好坏&#…...
网络安全评估(网络安全评估)
讨论了基于互联网的网络安全评估和渗透测试的基本原理,网络安全服务人员,安全运营人员,通过评估来识别网络中潜在的风险,并对其进行分类分级。 黑客通常采取的攻击方式如下: 突破目标外围系统,比如主站拿…...

offsetof宏计算某变量相对于首地址的偏移量
宏:offsetof的使用 //offsetof (type,member) //type是结构体的类型名,member是结构体中的成员名。struct Student {char name[5]; // 姓名int age; // 年龄float score; // 成绩 };int main() {struct Student s;printf("%zd\n", off…...

(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...

UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...

【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...