码迷,mamicode.com
首页 > 其他好文 > 详细

display:inline、block、inline-block的区别

时间:2015-04-03 23:55:34      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:

display:inline、block、inline-block的区别
block元素的特点是:
  元素另起一行;
  行宽高边距可控制;
  <div>, <p>, <h1>, <form>, <ul> 和 <li>是块元素的例子。
inline元素的特点是: 
  和其他元素都在一行上;
  高,行高及顶和底边距不可改变;
  宽度就是它的文字或图片的宽度,不可改变。
  <span>, <a>, <label>, <input>, <img>, <strong> 和<em>是inline元素的例子。
inline-block的元素特点:
  将对象呈递为内联对象,但是对象的内容作为块对象呈递。旁边的内联对象会被呈递在同一行内,允许空格。
(准确地说,应用此特性的元素呈现为内联对象,周围元素保持在同一行,但可以设置宽度和高度地块元素的属性)
但使用display:inline-block在IE下会触发layout,从而使内联元素拥有了display:inline-block属性的表症。
从上面的这个分析,也不难理解为什么IE下,对块元素设置display:inline-block属性无法实现inline-block的效果。
这时块元素仅仅是被display:inline-block触发了layout,而它本就是行布局,所以触发后,块元素依然还是行布局,而不会如Opera中块元素呈递为内联对象。
  解决方法:
  1、先使用display:inline-block属性触发块元素,然后再定义display:inline:
div {display:inline-block;} 
div {display:inline;}
  2、直接让块元素设置为内联对象呈递(设置属性display:inline),然后触发块元素的layout(如:zoom:1等)。
   div {display:inline; zoom:1;}
可以如此改写:
{
display:inline-block;
*display:inline;
*zoom:1;
}
inline-block和float的区别:
文档流(Document flow):浮动元素会脱离文档流,并使得周围元素环绕这个元素。而inline-block元素仍在文档流内。因此设置inline-block不需要清除浮动。当然,周围元素不会环绕这个元素,你也不可能通过清除inline-block就让一个元素跑到下面去。
水平位置(Horizontal position):很明显你不能通过给父元素设置text-align:center让浮动元素居中。事实上定位类属性设置到父元素上,均不会影响父元素内浮动的元素。但是父元素内元素如果设置了display:inline-block,则对父元素设置一些定位属性会影响到子元素。(这还是因为浮动元素脱离文档流的关系)。
垂直对齐(Vertical alignment):inline-block元素沿着默认的基线对齐。浮动元素紧贴顶部。你可以通过vertical属性设置这个默认基线,但对浮动元素这种方法就不行了。这也是我倾向于inline-block的主要原因。
空白(Whitespace):inline-block包含html空白节点。如果你的html中一系列元素每个元素之间都换行了,当你对这些元素设置inline-block时,这些元素之间就会出现空白。而浮动元素会忽略空白节点,互相紧贴
解决inline-block空白问题:
删除html中的空白:不要让元素之间换行,这可能比较蛋疼,但也是一种方法,特别是你元素不多的时候。
结构一:
<ul>
 <li>
 item1</li><li>
 item2</li><li>
 item3</li><li>
 item4</li><li>
 item5</li>  
</ul>
结构二:
<ul>
 <li>item1</li
 ><li>item2</li
 ><li>item3</li
 ><li>item4</li
 ><li>item5</li>  
</ul>
结构三:
<ul>
 <li>item1</li><!--
 --><li>item2</li><!--
 --><li>item3</li><!--
 --><li>item4</li><!--
 --><li>item5</li>  
</ul>
结构四:
<ul><li>item1</li><li>item2</li><li>item3</li><li>item4</li><li>item5</li></ul>
使用负边距:你可以用负边距来补齐空白。但你需要调整font-size,因为空白的,而且需要考虑多种浏览器。
jquery解决:
<ul class="removeTextNodes">
 <li>item1</li>
 <li>item2</li>
 <li>item3</li>
 <li>item4</li>
 <li>item5</li>
</ul>
ul {
 list-style: none outside none;
 padding: 10px;
 background: green;
 text-align: center;
 font-size: 12px;
}
ul li {
 display: inline-block;
 *display: inline;
 zoom: 1;
 background: orange;
 padding: 5px;
}
$(‘.removeTextNodes‘).contents().filter(function() {
return this.nodeType === 3;
}).remove();

display:inline、block、inline-block的区别

标签:

原文地址:http://www.cnblogs.com/h1359705211/p/4391244.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!