css display的block,inline和inline-block

display显示模式常会用到,是基础中的基础。很多做前端开发的朋友可能对此会嗤之以鼻,但是如果对这个问题不能深入理解的话,工作中也会出现很多意想不到的问题。比如我今天,用到inline-block的时候我不了解他的兼容性情况,因为有的时候貌似IE6也识别了这个属性,有的时候又不识别。在网上查了以后发现,原来是自然属性是inline的元素,IE6/7是识别inline-block的。所以为了巩固一下display这方面的内容,我整理了一下这方面的知识

一下block和inline的部分来自这篇文章:

http://www.impressivewebs.com/difference-block-inline-css/

 

display:block


块状元素:块状元素有如下特点:

  • 如果宽度未被设定,会自然填充满父级容器
  • 可以拥有margin padding 属性
  • 如果高度未被设定,会自然的扩展来适应子元素的高度(假设子元素没有浮动或者特殊定位)
  • 默认会被置于上个元素下面(填满一行)(假设周围没有浮动和特殊定位元素)
  • 忽略vertical-align属性
  • 块状元素没有必要再设定width:100%, 如果设定甚至会引发一些问题。
  • 块状元素没必要设定clear,会自动“换行”。
  • 默认block的元素包括<p>, <div>, <form>, <header>, <nav>, <ul>, <li>, and <h1>

 

display:inline


行间元素特点如下:

  • 流动布局
  • 不会换行
  • 适用于white-space属性 ?(疑问原文:Is subject to white-space settings in CSS)
  • 忽略上下的margin,左右margin有效,padding均有效
  • 忽略width 和height属性
  • 如果被设置浮动,自动变成block级别元素,继承了他们的所有特性
  • 是vertical-align的主题?(疑问原文:Is subject to the vertical-align property)
  • 默认的inline元素包括<a>, <span>, <b>, <em>, <i>, <cite>, <mark>, and <code>.

理解inline可以把inline元素当作文本,按照文本的方式排布。

 

display:inline-block


inline-block元素简单的来说是可以具有宽高的inline元素,他不像block元素会强制跑到第二行去。

关于inline-block 淘宝UED做过一篇专门的研究,

inline-block 前世今生

inline-block的兼容性图表:

http://caniuse.com/inline-block

总结就是ie6,7要想兼容inline-block需要触发Haslayout属性。ie6/7其实是部分支持这个属性,所以inline-block的兼容性说起来还不错,可以多用,在一些布局的时候很有效,比如下面这个例子

来源:http://learnlayout.com/inline-block.html

这里面用inline-block取代float方法做了一个grid (网格状布局),可以少试用最后的清除浮动块,而且看起来更酷,不是吗?但是这里用的是div元素,所以ie6,7还需要激活一下他们的haslayout属性,具体的方法是这样的:

http://stackoverflow.com/questions/6544852/ie7-does-not-understand-display-inline-block

这叫做IE6,7 inline-block hack方法:

1
2
3
display: inline-block;
*display: inline;
zoom: 1;

感谢所有原文的作者,并声明此篇内容无任何版权,如果侵犯到别人请及时告知我并第一时间删除,我站在各种巨人的肩膀,谢谢各种巨人们~

posted on 2013-10-16 10:31  fishenal  阅读(254)  评论(0)    收藏  举报