在说明这个问题之前,我们先来回顾一个块级元素与内联:我们知道

内联元素可以嵌套内联元素,块级元素可以嵌套部分块级元素并也能嵌套内联元素,但内联元素不能嵌套块级元素。块级元素为block,内联元素为inline,拥有“inline”特性的同时又拥有“block”的特性称为replace元素。

在实际开发中,有时会犯一个小错误:

<p>这是p元素的开始 >span元素1</span>和<span>span元素2</span></p><p>这是p元素的开始 <div>div元素1</div><div>div元素2</div>这是p元素的结束
</p>

它的效果会出乎意料:

代码中,在<p>元素中嵌套了两个<span>元素,它们按照浏览器的渲染正常显示。但当在<p>元素中嵌套两个 <div>元素时,我们会发现,<div>分别在一行显示,而此时"p元素的开始"与"p元素的结束"也在不同的一行显示,与我们想要的(这两段文字在一行显示)相反。它们也均在不同行显示。这是什么原因呢?

原来,在<p>元素中是不能嵌套<div>元素的,在<p>标签还没结束时,遇到下一个块级元素就会自动结束。即:

<p>元素的开始
<p>元素的开始

它的开始标签会被浏览器会解析为:

<p>元素的开始</p>
<p>元素的开始</p>

它的结束标签同样也会被解析为一个<p>元素。

于是前面书写的代码:

 <p>这是p元素的开始 <div>div元素1</div><div>div元素2</div>这是p元素的结束</p>

实际上被解析成了:

<p>这是p元素的开始 </p><div>div元素1</div><div>div元素2</div><p>这是p元素的结束</p>

也就是说,一个p元素会被解析成两个p元素,两个会被解析成四个。照这样依次类推下去。

我们来看浏览器把这段代码解析成的形式:

即使我们为<div>添加样式,将它变成内联元素形式:

<p>这是p元素的开始 </p><div style="display: inline">div元素1</div><div style="display: inline">div元素2</div>这是p元素的结束
</p>

它的效果还是:

我们再用JavaScript代码来检索一个页面中的p元素:

<body><p>这是p元素的开始 >span元素1</span>和<span>span元素2</span></p><p>这是p元素的开始 </p><div style="display: inline">div元素1</div><div style="display: inline">div元素2</div>这是p元素的结束</p><script>var p = document.querySelectorAll("p"); //查找p元素console.log(p.length); // 3个元素</script>
</body>

按原来的思维来说,此时应该会返回2,表示页面中有两个p元素,

但我们会惊讶地发现,代码返回了3,也就表示浏览器解析为3个p元素。

因此得出结论:

在p元素是不能嵌套Div元素的,它会被浏览器解析为页面中p元素的两倍数量,也就是开始标签被解析为一个p元素,结束标签被解析为一个p元素。

元素的三个类别

那哪些块元素里面不能放哪些块元素呢?我们可以先把所有的块元素再次划分成几个级别的,我们已经知道<html>是在最外层,<html>下一级里面只会有<head>、<body>、<frameset>、<noframes>。而我们已经知道了可视的元素只会出现在<body>里,所以我们把<body>划在第一个级里面,接着,把不可以自由嵌套的元素划在第三个级,其他的就归进第二个级。所谓的不可自由嵌套的元素就是里面只能放内联元素的,它们包括有:标题标记的<h1>、<h2>、<h3>、<h4>、<h5>、<h6>、<caption>段落标记的<p>分隔线<hr>和一个特别的元素<dt>(它只存在于列表元素<dl>的子一级)。

为什么说第二级的元素可以自由嵌套呢?我们可以把它们看成是一些容器(或者说是盒子), 这些容器的大小可以自由变化,例如我们可以把<ul>嵌在<div>里面,也可以把<div>嵌在<li>里面。

在HTML里有几个元素是比较特别的:<ul>、<ol>、<dl>、<table>,它们的子一层必须是指定元素,<ul>、<ol>的子一级必须是<li>;<dl>的子一级必须是<dt>或者<dd>;<table>的子一层必须是<caption> 或<thead>、<tfoot>、<tbody>等,而再子一层必须是<tr> (<tr>只存在于<thead>、<tfoot>、<tbody>中),之后才是可放内容的<td>或者<th>。

<img>和<input>有着其它内联元素没有的宽和高。它们在"inline"的情况下又有"black"的特性,W3C称之为replace元素。

最后总结汇总

1、块元素可以包含内联元素或某些块元素(p元素中嵌套Div元素是错误的做法) ,但内联元素却不能包含块元素,它只能包含其他的内联元素

2、p元素中是不能嵌套块级元素的。

3、重点:块状元素的三个级别

4、内联元素的img 与 input比较特殊,他们有内联元素没有的宽高,w3c定义为replace元素,将元素设置为display:inline-block,模拟的就是replace元素。

为什么p元素内不能嵌套Div元素(随笔)相关推荐

  1. p元素里面不能嵌套div元素

    p元素不能嵌套div以及其他块级元素,为什么?我百思不得其解.目前看到的一种较为可信服的说法是,加上亲身实践. 代码: <p>我是p的开始<div>我是div</div& ...

  2. CSS基础-09-布局(定位 position、浮动float,元素对其、图像对其、文本对齐、元素内内容对齐,元素堆叠)

    文章目录 1 定位 (position) 1.1 static 定位 1.2 fixed 定位 1.3 relative 定位 1.4 absolute 定位 1.5 sticky 定位 2. 浮动( ...

  3. html怎么隐藏一个元素,html怎么隐藏div元素

    html隐藏div元素的方法:1.在div标签中使用hidden属性,添加"hidden="hidden""语句即可.2.在div标签中使用style属性,添加 ...

  4. HTML 之 块级元素、行内元素和行内块元素之间的嵌套规则

    一.简介 之前对元素之间的嵌套规则没有进行系统的梳理,一直以为各种元素之间可以随意进行嵌套,但在实际敲代码的过程中发现并不是这样,大部分标签之间是可以随意嵌套的,但也存在一些特殊规则,比如:p标签内不 ...

  5. html5--1.18 div元素与布局

    1.18 div元素与布局 1.元素的分类 2.div元素与布局 1.元素的分类 块元素:主要特征是会产生换行效果,自动与其他元素分离成两行:通常可以作为容器在内部添加其他元素. 已经学过的块元素有: ...

  6. html:(39):块级元素和内联块级元素

    元素分类--内联元素 在html中,<span>.<a>.<label>. <strong> 和<em>就是典型的内联元素(行内元素)(in ...

  7. html能插入背景的行级元素,Html元素类型:块级元素、行内元素(内联元素)和行内块级元素...

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? html中的标签元素大体被分为三种不同的类型:块级元素.内联元素(又叫行内元素)和内联块级元素.事实上,我以前用的时候只 ...

  8. css块元素,内联元素,内联块元素

    一.块元素,内联元素,内联块元素 1.块元素:      也称行元素, 布局中常用的标签如:div,p, h1-h6,ul,li... 支持全部的样式 可以设置元素的大小,并且元素是独占一行显示,如果 ...

  9. HTML div元素

    div元素 div元素可以把文档分割为独立的.不同的区域,每个区域就相当于一个块级容器,其中可以放置段落.标题.表格.图片.乃至任何HTML元素. 事实上,div元素本身并没有任何特定的语义,它的真正 ...

最新文章

  1. Python 获得命令行参数的方法
  2. 深入浅出Unix IO模型
  3. PHP 10条有用的建议
  4. BeautifulSoup 根据文本内容反查标签
  5. 《移动应用开发》实验报告——轮播图
  6. Leetcode题库 15.三数之和_0(双指针 C实现)
  7. Android官方开发文档Training系列课程中文版:构建第一款安卓应用之创建用户界面
  8. 103. 二叉树的锯齿形层次遍历/102. 二叉树的层序遍历
  9. 图片上传预览 (URL.createObjectURL)
  10. 索鸟快传2.0免费局域网文件共享软件,用C++开发的基于HTTP的文件共享软件,文件下载上传、在线预览
  11. qt引入txt文件_QT 读取txt文件的几种方法
  12. C#实战之CAD二次开发005:打印pdf
  13. 计算圆柱的侧面积及体积
  14. 浙商证券显示计算机丢失,无法启动此程序,计算机丢失d3dx-942.dll,这个怎么解决啊?...
  15. BZOJ4516 [Sdoi2016]生成魔咒 后缀自动机/后缀数组
  16. 1.3 数值分析 有效数字
  17. unity之使用FPS第一人称后鼠标消失
  18. oracle修改分区表的默认空间,Oracle数据库学习_Oracle分区表的分区占用空间为什么是8M?如何修改分区的初始空间?...
  19. 使用shiro+aop实现权限控制
  20. 为什么你觉得信用卡负担越来越重了?那是你不会技巧!

热门文章

  1. 什么是网络环路问题?
  2. Vue学习之Vant图标使用及问题
  3. ilm 和dlm差异_第八章 大数据对象设计与维护
  4. 杰理之 高低速(HSB/LSB)时钟硬件模块【篇】
  5. 中国大学 MOOC Android 性能优化:冷启动优化总结
  6. java.lang.IllegalArgumentException: Failed to decrypt.
  7. 内网穿透工具-Ngrok
  8. 关于在IE8浏览器的环境下页面一直刷新的问题
  9. Binary Search Tree(二叉搜索树、二叉查找树、二叉排序树)
  10. python考研选什么专业好就业_人工智能考研专业就业怎么样 哪些院校开设人工智能专业...