SPAN与DIV(内嵌块)

是否有任何理由使用<div style="display:inline-block">而不是<span>来布置网页?

我可以把内容嵌套在跨度内吗? 什么是有效的,什么不是?

用这个来制作像布局一样的3×2表是可以的。

 <div> <span> content1(divs,p, spans, etc) </span> <span> content2(divs,p, spans, etc) </span> <span> content3(divs,p, spans, etc) </span> </div> <div> <span> content4(divs,p, spans, etc) </span> <span> content5(divs,p, spans, etc) </span> <span> content6(divs,p, spans, etc) </span> </div> 

根据HTML规范 , <span>是一个内联元素, <div>是一个块元素。 现在,可以使用display CSS属性进行更改,但有一个问题:就HTMLvalidation而言,不能将块元素放在内联元素中,因此:

 <p>...<div>foo</div>...</p> 

即使将<div>更改为inlineinline-block也不是严格有效的。

所以,如果你的元素是inlineinline-block使用<span> 。 如果是block级元素,请使用<div>

如果你想有一个有效的XHTML文档,那么你不能把一个div内的段落。

此外,具有属性显示的div:内联块的工作方式与跨度不同。 跨度默认是内联元素,您不能设置与块关联的宽度,高度和其他属性。 另一方面,具有属性inline-block的元素仍然会与任何周围的文本“stream动”,但是可以设置宽度,高度等属性。具有属性display:block的span 不会以相同的方式stream动作为一个内嵌块元素,但会创build一个回车,并有默认的边距。

请注意,内联块在所有浏览器中都不受支持。 例如,在Firefox 2和更less,你必须使用:

 display: -moz-inline-stack; 

其显示与FF3中的内联块元素略有不同。

这里有一篇关于创build跨浏览器内嵌块元素的好文章。

  1. 内联块是将元素的显示设置为内联或阻止的中间点。 它将元素保持在文档的内联stream中,如display:inline,但您可以使用display:block来操作元素的框属性(宽度,高度和垂直边距)。

  2. 我们不能在内联元素中使用块元素。 这是无效的,没有理由做这种做法。

我知道这个Q是旧的,但为什么不使用所有DIV而不是SPAN? 然后,一切都会一起快乐。

例:

 <div> <div> content1(divs,p, spans, etc) </div> <div> content2(divs,p, spans, etc) </div> <div> content3(divs,p, spans, etc) </div> </div> <div> <div> content4(divs,p, spans, etc) </div> <div> content5(divs,p, spans, etc) </div> <div> content6(divs,p, spans, etc) </div> </div> 

正如其他人已经回答… div是一个“块元素”(现在重新定义为stream内容 ), span是一个“内联元素”( Phrasing内容 )。 是的,您可以更改这些元素的默认显示方式,但“stream程”与“屏蔽”,“短语”与“内嵌”之间有所不同。

被分类为stream内容的元素只能在期望stream内容的情况下使用,并且在期望performance内容的情况下可以使用被分类为短语内容的元素。 由于所有短语内容都是stream内容,因此也可以在任何需要stream内容的地方使用短语单元。 规格提供了更详细的信息 。

所有的expression式元素,比如strongem只能包含其他的expression式元素:例如,你不能在table cite一个table大多数stream程内容(例如divli都可以包含所有types的stream程内容(以及短语内容),但是也有一些例外: ppreth是非短语stream程内容的示例(“block elements”) 只能包含短语内容(“内联元素”)。 当然还有正常的元素限制,如dltable只允许包含某些元素。

虽然divp都是非短语stream的内容,但div可以包含其他stream内容的子元素(包括更多divp s)。 另一方面, p可能只包含子句的内容。 这意味着你不能把一个div放在一个p ,尽pipe它们都是非句法stream元素。

现在,这是踢球。 这些语义规范与元素的显示方式无关。 因此,如果你在一个span内有一个div ,即使你的CSS中有span {display: block;}div {display: inline;} ,你也会得到一个validation错误。