block、inline 和 inline-block三者之间的区别
1. 前言
- block 和 inline 这两个概念是简略的说法,完整确切的说应该是 block-level elements (块级元素) 和 inline elements (内联元素)。block 元素通常被现实为独立的一块,会单独换一行;inline 元素则前后不会产生换行,一系列 inline 元素都在一行内显示,直到该行排满。
- 大体来说 HTML 元素各有其自身的布局级别(block 元素还是 inline 元素):
- 常见的块级元素有 DIV, FORM, TABLE, P, PRE, H1~H6, DL, OL, UL 等。
- 常见的内联元素有 SPAN, A, STRONG, EM, LABEL, INPUT, SELECT, TEXTAREA, IMG, BR 等。
- block 元素可以包含 block 元素和 inline 元素;但 inline 元素只能包含 inline 元素。要注意的是这个是个大概的说法,每个特定的元素能包含的元素也是特定的,所以具体到个别元素上,这条规律是不适用的。比如 P 元素,只能包含 inline 元素,而不能包含 block 元素。
- 一般来说,可以通过 display:inline 和 display:block 的设置,改变元素的布局级别。
2. display: block
- block 元素会独占一行,多个 block 元素会各自新起一行。默认情况下,block 元素宽度自动填满其父元素宽度。
- block 元素可以设置 width,height 属性。块级元素即使设置了宽度,仍然是独占一行。
- block 元素可以设置 margin 和 padding 属性。
3. display:inline
- inline 元素不会独占一行,多个相邻的行内元素会排列在同一行里,直到一行排列不下,才会新换一行,其宽度随元素的内容而变化。
- inline 元素设置 width,height 属性无效。
- inline 元素的 margin 和 padding 属性,水平方向的 padding-left, padding-right, margin-left, margin-right 都产生边距效果;但竖直方向的 padding-top, padding-bottom, margin-top, margin-bottom 不会产生边距效果。
- 例外: input, video 和 img 等元素设置为 inline 元素 width 和 height 是有效的其 margin 和 padding 属性竖直方向也都是有效的
4. display: inline-block
简单来说就是将对象呈现为 inline 对象,但是对象的内容作为 block 对象呈现。
与 display: inline 相比,主要区别在于 display: inline-block 允许在元素上设置宽度和高度。
同样,如果设置了 display: inline-block,将保留上下外边距/内边距,而 display: inline 则不会。
与 display: block 相比,主要区别在于 display:inline-block 在元素之后不添加换行符,因此该元素可以位于其他元素旁边。
下例展示 display: inline、display: inline-block 以及 display: block 的不同行为:
注意: IE(低版本 IE)本来是不支持 inline-block 的,所以在 IE 中对内联元素使用 display:inline-block,理论上 IE 是不识别的,但使用 display:inline-block 在 IE 下会触发 layout,从而使内联元素拥有了 display:inline-block 属性的表象。
1 |
|
5. 补充说明
一般我们会用 display:block,display:inline 或者 display:inline-block 来调整元素的布局级别,其实 display 的参数远远不止这三种,仅仅是比较常用而已。
display 所有的参数如下:
1 | /* precomposed values */ |
6. 参考文档
block、inline 和 inline-block三者之间的区别