一、简介

之前对元素之间的嵌套规则没有进行系统的梳理,一直以为各种元素之间可以随意进行嵌套,但在实际敲代码的过程中发现并不是这样,大部分标签之间是可以随意嵌套的,但也存在一些特殊规则,比如:p标签内不能再嵌套p标签和div标签等块级标签。
这篇博客就是为了彻底搞清楚不同类型元素之间的嵌套规则。

常见块级元素

<div><p><h1> ~ <h6><ul><li><table><form><section><header>等。

MDN块级元素列表

常见行内元素

<span><strong><i><a><button><em>等。

MDN行内元素列表

补充: 在MDN中将行内块元素归属在行内元素里面了。

常见行内块元素

<img><input><textarea><button><audio><video>等。

二、具体规则

1、块级元素嵌套规则

① 特殊的<p><h1> ~ <h6><dt>块级元素

这几个元素具有特殊规则:这些标签内部不能嵌套任何块级元素,只能嵌套行内元素或行内块元素,就算我们给块级元素设置display: inline,也是不行的。
如果我们在这些特殊元素内嵌套了块级元素,那么浏览器会将元素的前后两个标签解析成两对标签。那此时我们给该元素设置的样式就无法作用到嵌套的元素身上。

<p>为例:

  <p>p标签内包裹文本</p><p>p标签内包裹行内元素 <strong>strong</strong></p><p>p标签内包裹行内元素 <span>span</span></p><p>p标签内包裹行内块元素img <img src="./image/img.png" alt="" style="width: 60px;height: 60px"></p><p>p标签内包裹行内块元素audio<audio src="./image/起风了.mp3" style="width: 300px;height: 60px" controls="controls"></audio></p><p><div>p标签内包裹块级元素div</div></p><p><div>p标签内包裹块级元素div(并设置display: inline;)</div></p><p><p>p标签内包裹块级元素p</p></p>

浏览器解析结果:

② 其他块级元素

除了前面几个特殊元素,其他块级元素内部可以嵌套任何元素。
div为例:

  <div>div标签内包裹文本</div><div>div标签内包裹行内元素 <strong>strong</strong></div><div>div标签内包裹行内元素 <span>span</span></div><div>div标签内包裹行内块元素img <img src="./image/img.png" alt="" style="width: 60px;height: 60px"></div><div>div标签内包裹行内块元素audio<audio src="./image/起风了-买辣椒也用券.mp3" style="width: 300px;height: 60px" controls="controls"></audio></div><div><div>div标签内包裹块级元素div</div></div><div><div style="display:inline">div标签内包裹块级元素div(并设置display: inline;)</div></div><div><p>div标签内包裹块级元素p</p></div>

浏览器解析结果:

2、行内元素嵌套规则

按照MDN来看,行内元素只能包含数据和其他行内元素、行内块元素。但经过实验,发现行内元素内也可以嵌套块级元素,但在给内部的块级元素设置宽高时,无法影响到父级行内元素的宽高,且父级行内元素也会受到块级元素的影响,出现独占一行的情况。

<span>为例:

  <span>span标签内包裹文本</span><span>span标签内包裹行内元素 <strong style="width: 100px;height: 50px">strong</strong></span><span>span标签内包裹行内元素 <i>i</i></span><span>span标签内包裹行内块元素img <img src="./image/img.png" alt="" style="width: 60px;height: 60px"></span><span>span标签内包裹行内块元素audio<audio src="./image/起风了-买辣椒也用券.mp3" style="width: 300px;height: 60px" controls="controls"></audio></span><span><div style="width: 250px;height: 50px">span标签内包裹块级元素div</div></span><span>一个普通的sapn</span><span><span style="display: block">span标签内包裹行内元素span(并设置display: block;)</span></span><span><p>span标签内包裹块级元素p</p></span>

浏览器解析结果:

页面展示效果:


补充:
如果我们在行内元素内嵌套了块级元素,那么这个行内元素通过offsetHeight获取的实际高度,是内嵌的块级元素的高度 + 上一行元素中高度最高那个元素的高度 + 下一行元素中高度最高那个元素的高度的和,但这个高度并不会影响页面展示效果,占据的空间还是按照内嵌元素的高度来。

  <span id="1">测试用的span</span><a href="#" id="2"><div id="3" style="width: 300px;height: 80px;">这是a标签内嵌套了div标签</div></a><span id="4">测试用的span2</span>
</body>
<script>(function() {let a = document.getElementById('1')let b = document.getElementById('2')let c = document.getElementById('3')let d = document.getElementById('4')console.log(a.offsetHeight); // 实际22.5 但offset向上取整 变为23console.log(b.offsetHeight); // 22.5 + 22.5 + 80 = 125console.log(c.offsetHeight);// 80console.log(d.offsetHeight);// 实际22.5 但offset向上取整 变为23console.log(a.offsetHeight + c.offsetHeight + d.offsetHeight === b.offsetHeight);})()
</script>

页面效果:
上一行的高度:

当前元素的高度:

下一行的高度

执行结果:


这里之所不相等是因为,span的高度是22.5,但是但offset取值时,向上取整 变为了23。

3、行内块元素嵌套规则

行内块元素大部分都是单标签,内部不会嵌套其他元素,但也有像<button>这样的双标签,再其内部即可以嵌套行内元素也可以嵌套块级元素,如果是内嵌块级元素,则父级行内块元素的宽高会跟随内嵌块级元素的宽高变化,但不会独占一行。如果是内嵌行内元素,则没什么变化。
<button>为例:

  <button>button标签内包裹普通文本</button><button><span>button标签内包裹行内元素span</span></button><button><span style="display: block;width: 400px;height: 50px;">button标签内包裹行内元素span(并设置display: block;)</span></button><button><div style="width: 300px;height:100px">button标签内包裹块级元素div</div></button>

浏览器解析结果:

页面展示效果:

HTML 之 块级元素、行内元素和行内块元素之间的嵌套规则相关推荐

  1. 5、HTML块级元素及行内元素

    在 HTML 中,标签(tag)通常又被称作元素(element).例如 <a> 标签又叫做 <a> 元素,<p> 标签也叫作 <p> 元素. HTML ...

  2. 网页编程技术二(块级元素和行内标签)

    1.块级元素 顾明思义,块级标签在网页中显示为块:块级标签一般独占一行,新的块级标签将从新的一行开始排列,它可以容纳其他块级元素和内联元素. 常见的会计标签: 1.1标题标签:<h1>&l ...

  3. html 图片行内剧中,HTML入门(转义字符、行内样式和块级元素、定位、锚点、跑马灯标签、图片标签、表格标签的讲解)...

    一.转义字符 由特殊字符包裹的文本 会当做标签去解析 对应不换行空格  对应全角空格 em是字体排印学的计量单位,相当于当前指定的点数.其占据的宽度正好是1个中文宽度,而且基本上不受字体影响. < ...

  4. html 盒子模型添加图片,[HTML/CSS]盒子模型,块级元素和行内元素

    目录 概述 在div+css中,了解块级元素和行内元素还是非常有必要的,比如:对行内元素使用width属性就会失效.虽然自己不是做前端的,但是,在项目中,曾经也弄过从前端布局,也吃过这方面的亏.今天, ...

  5. HTML基础知识(一):行内元素,块级元素,行内块元素

    文章目录 一.html元素分类 二.块元素 三.行内元素 四.行内块元素 五.替换元素和非替换元素 六.元素转换 七.总结 一.html元素分类 html元素:行内元素.块元素.行内块元素 二.块元素 ...

  6. Web行内和块级元素 及表格应用

    一.转义字符 由<> 包裹的文本 会当做标签去解析   空格 &emsp: ? < .gt < > "我认为这些电影对我来说非常特别.这是令人难以置信的 ...

  7. CSS中块级元素,行内块元素,行内元素的特点

    CSS自学笔记 目录 一.什么是元素显示模式 二.CSS的元素显示模式 1.块元素 2.行内元素 3.行内块元素 前言 网页的标签非常多,在不同地方会用到不同类型的标签,了解他们的特点可以更好的布局我 ...

  8. 详解块级元素、行内元素、行内块级元素类型、区别及相互转化

    1)块级元素 特点: 1.总是从新的一行开始 2.高度.宽度都是可控的 3.宽度没有设置时,默认为100% 4.块级元素中可以包含块级元素和行内元素 5.块级文字元素中不能放入其他块级元素 6.块级大 ...

  9. HTML行内元素和块级元素

    1 常见的行内元素和块级元素   特点 注意 块级元素 div h1~h6 p ul ol li 比较霸道:自己独占一行 高度,宽度.外边距以及内边距都可以控制 宽度默认是容器(父级宽度)的100% ...

最新文章

  1. Spring 中的代理选择原则
  2. BHO插件操作IE浏览器,js调用C#方法
  3. Android系统中通过shell命令实现wifi的连接控制
  4. iOS:Core Data 中的简单ORM
  5. 每天一个小异常——Excel的导出报类型转换异常
  6. java transient 应用场景_关于java:transient关键字的用途是什么以及何时使用它?...
  7. Video-Swin-Transformer (二)
  8. 使用Timer的缺陷
  9. JDK8的LocalDateTime用法
  10. Python 使用while循环实现打印9x9乘法表
  11. 阶段3 2.Spring_07.银行转账案例_5 编写业务层和持久层事务控制代码并配置spring的ioc...
  12. ImportError: No module named _internal
  13. Ruby在Windows下安装
  14. python定时备份为知笔记数据
  15. 2020博客之星年度总评选TOP200名单已出,感谢老铁们的支持目前排名TOP77
  16. Count UVA - 1645
  17. AStar路径规划算法
  18. 简单的蜜罐以及开源蜜罐HFish的安装与配置
  19. python朴素贝叶斯对wine_基于朴素贝叶斯对Wine数据集分类
  20. ubuntu 查看mysql数据库_ubuntu mysql查看数据库

热门文章

  1. 并行编程,绝不是你想的那么简单
  2. DateTime日期差
  3. 一分钟了解矩阵、方阵、对角矩阵、单位矩阵之间的关系
  4. Java学习者的25个目标
  5. 中标麒麟5.0安装(内含安装包)-小白手把手史上最全教程!
  6. HBase --------- 深入了解HBase架构(架构组建及HBase工作原理)
  7. LeetCode解析------111. 二叉树的最小深度-深度优先搜索
  8. 相对舒适的爬虫入门系列(一):手快尝鲜【requests库】
  9. absolute、relative详解
  10. Scratch3.0----数据类型