热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

HTML中为何P标签内不可包含DIV标签?(转)

起因:在做项目时发现原本在DW中无误的代码到了MyEclipse6.0里面却提示N多错误,甚是诧异。于是究其原因,发现块级元素P内是不能嵌

起因:在做项目时发现原本在DW中无误的代码到了MyEclipse6.0里面却提示N多错误,甚是诧异。于是究其原因,发现块级元素P内是不能嵌套DIV的。

深究:我们先来认识in-line内联元素和block-line块元素,因为HTML里几乎所有元素都属于内联元素或者块元素中的一种。

in-line这个词有很多种解释:内嵌、内联、行内、线级等,但是,它们都是表示相同的意思,在这里我们选择习惯的叫法--内联。

先看下面的例子你就能明白两者的差别:

测试一下块元素与内联元素的差别

测试一下

块元素
与内联元素的差别

                                                                                     效果如下图:

HTML中为何P标签内不可包含DIV标签? - JORTON - ★柳暗花明★

  在上面的例子中,

会自己产生一个新的行,而并没有换行,这是在没有CSS渲染的情况下才这样,同样,我们也可以通过CSS把div定义成内联元素,把span定义成块元素,但是,我们却不能在HTML里任意转化它们,块元素可以包含内联元素或某些块元素(上面的例子其实是错误的使用--->我把
放在

里面了) ,但内联元素却不能包含块元素,它只能包含其他的内联元素,再看看这个:

我喜欢在http://bbs.blueidea.com/ " >经典论坛讨论Web标准的原因。

其中

是属于块元素,而是属于内联元素,

包含是没有错误的,同样,
可以包含

,

包含也是对的,但是如果是下面这样的话,就是错误的,因为内联元素不应该包含块元素:

 

这样是错误的用法!

 

还有一些情况就是一些块元素不可以包含另一些块元素。例如这样:

测试文字

  • 现阶段是不能这样用的,要等到XHTML 2.0才可以这样用。

测试文字

而这样又是可以的。

  • 这样是可以的

为什么呢?因为我们使用的DTD中规定了块级元素是不能放在

里面的,再加上一些浏览器纵容这样的写法:

这是一个段落的开始

这是另一个段落的开始

当一个

签还没结束时,遇到下一个块元素就会把自己结束掉,其实浏览器是把它们处理成这样:

这是一个段落的开始

这是另一个段落的开始

所以刚才那样的写法会变成这样:

测试文字

  • 现阶段是不能这样用的,要等到XHTML 2.0才可以这样用。

测试文字

这也是跟刚才说第一个例子中

里面放

不合理是同一个道理。

那哪些块元素里面不能放哪些块元素呢?我知道你有这个疑问,也知道我仅仅列一张清单你不好记住它们。我们可以先把所有的块元素再次划分成几个级别的,我们已经知道是在最外层,下一级里面只会有、、、,而我们已经知道了可视的元素只会出现在里,所以我们把划在第一个级里面,接着,把不可以自由嵌套的元素划在第三个级,其他的就归进第二个级。所谓的不可自由嵌套的元素就是里面只能放内联元素的,它们包括有:标题标记的

、;段落标记的

;分隔线


和一个特别的元素
(它只存在于列表元素
的子一级)。

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