display:inline-block详解

首先,了解一下什么是块元素、内联元素以及行内块元素的区别

块元素和内联元素的主要区别:

  1. 块元素会自动在末尾加一个换行,而内联元素不会,多个内联元素会自动排成一行,比如img标签或span标签插到一行文字中,他会和这行文字自动排成一行,而如果你在这行文字中插入一个块元素标签,比如div标签,那么这个div标签会自己独占一行。查看demo:http://www.css88.com/demo/inline-block/inline-and-block.html
  2. 块元素可以定义自身的高度(width)和宽度(height),而内联元素不可以。
  3. 块对象定义的自身垂直边距可以改变行高,而内联元素虽然可以定义但改变不了行高。

display:inline-block是什么呢?

将对象呈递为内联对象,但是对象的内容作为块对象呈递。旁边的内联对象会被呈递在同一行内,允许空格。这就是display:inline-block的作用,再讲的通俗一点就是,Display值为inline-block的元素内部形成一个块状盒模型,而本身形成类似一个内联的被替代元素”。即display为inline-block的元素既可以像块状元素一样定义高度宽度,又可以和内联元素(比如文字)排列在一行。

1、实例演示效果:

2、display:inline-block作用?

使用display:inline-block属性,可以使行内元素或块元素能够变成行内块元素,简单直白点讲就是不加float属性就可以定义自身的宽、高,同时又能使该元素轻松在父元素居中显示!

3、什么时候会用到display:inline-block?

在网站布局中,很多时候,子元素中使用行内元素如span或块元素li标签且标签个数不定,而我们又想让这一块不管个数有多少个(子元素的总体宽度不定),始终都能居中显示!这个时候display:inline-block就能派上用场了!

4、ie6/7支持display:inline-block这个属性吗?

在内联元素上定义display:inline-block属性,发现IE6、IE7中的显示效果同其它浏览器一致,但事实是ie7及更低版本的ie浏览器不支持display:inline-block这个属性!
正确的解释是”使用inline-block属性在IE下会触发layout,因此元素上设置的width、height是能生效的,所以也就有了同其它浏览器一致的显示效果”,而不能说IE6/7支持 display:inline-block!

5、行内元素只需定义display:inline-block,显示效果各浏览器都是一致,IE7下块元素如何实现 display:inline-block 的效果??

在IE下,display: inline-block只是触发了元素的layout。比如将display: inline-block设置到div上,只能保证这个div拥有块元素的特征(可以设置宽度,高度等),但还是会产生换行。接下来要设置display: inline,使其不产生换行。将display:inline-block;display:inline;写在同一个样式上,inline-block属性是不会触发元素的layout的,因此我们还要额外加上 zoom:1来触发layout!

6、IE7下块元素如何兼容 display:inline-block写法?

实际有效的方法共有2种:

方法1:直接让块元素设置为内联对象呈递(设置属性 display:inline),然后触发块元素的 layout(如:zoom:1 等)。兼容各浏览器的代码如下:

div {display:inline-block;*display:inline; *zoom:1;...} 

方法2:先使用 display:inline-block 属性触发块元素,然后再定义 display:inline,让块元素呈递为内联对象(两个display 要先后放在两个 CSS 样式声明中才有效果,这是 IE 的一个经典 bug ,如果先定义了 display:inline-block,然后再将 display 设回 inline 或 block,layout 不会消失)。代码如下(…为省略的其他属性内容):

div {display:inline-block;...}div {*display:inline;}

7、display:inline-block元素间会产生多余空白怎么解决?

display:inline-block元素间会产生多余空白,这是inline-block本身特性!

严格来讲不算BUG,使用font-size设置可以解决,解决display:inline-block元素间多余空白的相关文章:去掉display:inline-block元素间的多余空白

文章参考:
1、http://www.phpvar.com/archives/2211.html