基于display:inline-block的列表布局

一、用float(浮动)实现列表布局的局限

  一说起列表布局。大家首先想到的就是用浮动float。这是相当常见的也是目前最最主流的列表布局方式,所以这里就不吃咸鱼蘸酱油——多此一举了。对于浮动局部的局限性,想必同行们都知道,就是每个列表元素的高度必须要一致,否则就会像是俄罗斯方块一样,“锯齿相错”,例如一个左浮动列表布局,如果第一行有个列表高度高于其他列表,那就在第二行,第一个元素会沿着最高元素的右侧对齐,此原因是属于恶魔系的float属性破坏了inline box。如下图:

  

  浮动本身就是个魔鬼,所以,使用浮动布局还需要修复其带来的副作用——高度塌陷的问题,也就是常提到的“清除浮动”了。

二、表格实现列表布局

  在表格布局时代,基本上不用担心列表元素高度不一会错位的问题,表格中的单元格(td标签)自动会等高关联,且水平列表项还包裹在tr等标签中,所以,不可能发生错位。所以,很正常的,我们会想到利用类似table属性的样式进行一些布局,例如display:table; display:table-row; display:table-cell;等属性,如果不是受制于IE6/7对这些display属性不支持,基于display:table的CSS布局定会大放异彩的。

  如果想使用display:table的CSS布局来代替浮动布局,权衡来看,不见得有提高。好的地方在于,不要担心列表元素的高度不一,甚至自动等高。撇开兼容性不谈,其还有不足在于在后台循环输出时需要水平repeat下,然后再垂直repeat。既然这样,还不如使用浮动布局,因为在这种情况下,使用浮动也是可以不用担心高度不一的问题的。所以,基本上,使用display:table的CSS布局来代替浮动布局是完全占据下风的。

三、另外一种display属性,display:inline-block

  display:inline-block感觉与display:table-cell有些相似,例如对内部元素的包裹性。但是,由于display:inline-block最大的不同就是其没有父元素的匿名包裹特性,这使得display:inline-block属性的使用非常自由,可与文字,图片混排,可内嵌block属性元素,可以可以置身于inline水平的元素中。可谓黑白通吃,左右逢源。

  inline-block属性的元素适用于inline box模型,所以,当其中的列表元素高度不一时,是不会有错位的。一言以蔽之,就是每一行所有的inline元素和inline-block元素会共同形成一个line boxes,这个line box的高度由里面最高的元素决定。所以,即使inline-block属性的列表元素高度异常,撑开的是整个line boxes的高度,因而,不会与下一行的列表元素发生错位。如下示意图所示的:

对于IE8+以及现代浏览器,直接使用: {display:inline-block;}

对于IE6/7浏览器, *display:inline; *zoom:1;

所以兼容写法: display:inline-block; *display:inline; *zoom:1;

四、一点小阻挠:inline-block元素间的换行符空格间隙问题

在完整的展示兼容性的像素级的inline-block元素列表布局前,有必要讲讲使用display:inline-block列表布局经常会遇到的“换行符/空格间隙问题”。

如果inline-block元素间有空格或是换行产生了间隙,那是正常的,应该的。如果没有空格与间隙才是不正常的(IE6/7 block水平元素)。真正的inline-block元素,就像个图片一样。例如,两个不在一行的img标签,形成的两个图片之间就会有间隙,如下图所示:

去除inline-block间距的方法有很多。这里只用一种方便的写法: font-size:0; 。这个IE6/7/8 都是兼容的。之前倒是谷歌Chrome不兼容font-size:0;,不过现在也兼容了。

五、总结:

大盒子(big-box)里装着小盒子(litter-box)

big-box  -->     big-box {text-align:center; font-size:0;}    内部小盒子居中显示

        big-box {text-align:justify; text-justify:distribute-all-lines;}   内部小盒子两端对齐。(若内容不够一行,则不会有效果,即使你强制换行也没用)。text-justify是IE兼容写法。

        span{ display:inline-block; width:100%;} 在内部小盒子中加入一个span元素,给予这个css样式,可以规避内容不够一行的情况。

litter-box -->    litter-box {display:inline-block; *display:inline; *zoom:1; vertical-align:top;}    抛弃浮动。这里vertical-align是小盒子的对齐方式。*XXX是IE兼容写法。

  如果是多层套用。则最外层元素写text-align,下面一层层都变为内联元素。

时间: 2024-10-13 07:06:46

基于display:inline-block的列表布局的相关文章

CSS display:inline|block|inline-block差异

display:inline|block|inline-block三属性的区别和联系,block就是将元素显示为块级元素,inline就是将元素 显示为行内元素,CSS display:inline-block将对象呈递为内联对象,但是对象的内容作为块对象呈递.旁边的内联对象会被呈递在同一行内,允许空格. 详解CSS display:inline|block|inline-block的区别 ◆CSS display:block CSS display:block就是将元素显示为块级元素. blo

display:inline/block/inline-block

display:inline; 内联元素,简单来说就是在同一行显示.display:block; 块级元素,简单来说就是就是有换行,会换到第二行.display:inline-block; 就是在同一行内的块级元素. 说概念太模糊,来个真实案例吧. <a href="#" style="display:inline;width:100px;height:100px;background:#ccc;">链接一</a><a href=&qu

拜拜了,浮动布局-基于display:inline-block的列表布局——张鑫旭

一.一抹前言 没有爱的日子,时间如指尖细沙,不知不觉就流逝了.写“CSS float浮动的深入研究.详解及拓展(一)”和“CSS float浮动的深入研究.详解及拓展(二)”似乎就在不久前,然而相隔差不多有一年之久了.文章最后留下了“浮动布局更好的替代方案是什么?”后文再介绍的预告. 由于自己肚子中的货物不足以撑起一篇足够质量的文章,所以关于“浮动布局更好的替代方案是什么?”的文章一直并未动笔.好在事物总是在发展的,我也是每天都是在进步,对于列表布局的思考也愈发成熟.加上正好前不久又有人询问我“

CSS——display(Block none inline等)属性的用法

在一般的CSS布局制作时候,我们常常会用到display对应值有block.none.inline这三个值.下面我们来分别来认识和学习什么时候用什么值.这里通过CSS display知识加实例.图演示讲解方法来学习和了解DIV CSS display. 目录 CSS display使用 display的值有哪些 css display block显示 css display none隐藏 css display inline 一.CSS display使用     -   TOP 以下为DIV

display:inline、block、inline-block的区别 以及display其它的属性

display:block就是将元素显示为块级元素. block元素的特点是: 总是在新行上开始: 高度,行高以及顶和底边距都可控制: 宽度缺省是它的容器的100%,除非设定一个宽度 <div>, <p>, <h1>, <form>, <ul> 和 <li>是块元素的例子. nline和block可以控制一个元素的行宽高等特性,需要切换的情况如下: 让一个inline元素从新行开始: 让块元素和其他元素保持在一行上: 控制inline

块级元素和行内元素以及display中block、inline和inline-block的区别

块元素又名块级元素(block element),和其对应的是内联元素(inline element),都是html规范中的概念.块元素和内联元素的基本差异是块元素一般都从新行开始,相邻的块级元素将会在不同行显示.而当加入了css控制以后,块元素和内联元素的这种属性差异就不成为差异了.比如,我们完全可以把内联元素加上display:block这样的属性,让它也有每次都从新行开始的属性,即成为块元素同样我们可以把块元素加上display:inline这样的属性,让它也在一行上排列. block元素

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

display:block就是将元素显示为块级元素. block元素的特点是: 总是在新行上开始: 高度,行高以及顶和底边距都可控制: 宽度缺省是它的容器的100%,除非设定一个宽度 <div>, <p>, <h1>, <form>, <ul> 和 <li>是块元素的例子. display:inline就是将元素显示为行内元素. inline元素的特点是: 和其他元素都在一行上: 高,行高及顶和底边距不可改变: 宽度就是它的文字或图片

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

block元素的特点是: 元素另起一行: 行宽高边距可控制: <div>, <p>, <h1>, <form>, <ul> 和 <li>是块元素的例子. inline元素的特点是: 和其他元素都在一行上: 高,行高及顶和底边距不可改变: 宽度就是它的文字或图片的宽度,不可改变. <span>, <a>, <label>, <input>, <img>, <strong&

display:inline、block、inline-block

display:inline.block.inline-block的区别 display:block就是将元素显示为块级元素. block元素的特点是: 总是在新行上开始: 高度,行高以及顶和底边距都可控制: 宽度缺省是它的容器的100%,除非设定一个宽度 <div>, <p>, <h1>, <form>, <ul> 和 <li>是块元素的例子. display:inline就是将元素显示为行内元素. inline元素的特点是:  和