本文由99根据Steven Bradley的《Should You Use Inline-Blocks As A Substitute For Floats?》所译,整个译文带有咱们本身的理解与思想,若是译得很差或不对之处还请同行朋友指点。如需转载此译文,需注明英文出处:http://www.vanseodesign.com/css/inline-blocks/,以及做者相关信息 css
做者:Steven Bradley html
译者:99 浏览器
CSS布局建立网站,浮动绝对占据了很大的比例.大块区域如主内容及侧边栏,以及在其中的小块区域,均可以看到浮动的影子.这里浮动是惟一的解决方案吗? 布局
浮动一般表现正常,但有时候搞起来会很纠结。特别是处理内部容器中的浮动,好比对一排图片使用浮动后对齐出现问题。Inline-block是咱们的另外一种选择。使用这种属性能够模拟部分浮动的特征,而不须要处理一些浮动带来的问题。 学习
Inline-block不是什么新鲜话题了,估计你也用过。不过我最近才是用到这个属性。以前的几个站点上,有展现一系列照片的需求,我就用inline-block代替了浮动。 网站
Inline-block是元素display属性的一个值。这个名字的由来是由于,display设置这个值的元素,兼具行内元素( inline elements)跟块级元素(block elements)的特征。 ui
若是你考虑了上面这些东东,你能够了解到,inline-block元素跟元素设置浮动后的表现差异并非很大。对盒子设置浮动后,一样会水平排列。虽然他们实现的原理不一样,但内部表现为块级元素,水平排列这种需求,浮动跟inline-block都适合实现。 spa
虽然设置浮动跟设置inline-block有些特征相似,但二者的区别仍是很是明显的: .net
如今咱们对块级元素设置了display:inline-block,图片左侧,元素之间出现空白。若是咱们移除元素之间的空白(换行),就获得了图片右侧的效果。这是惟一的区别。(详细介绍能够参阅如何解决inline-block元素的空白间距) 翻译
解决空白问题
你如今估计已经跃跃欲试了,不过估计不想让那些空白出现。这里有一些方法来去掉空白:
何时使用,取决于你的设计稿跟解决方法。若是你须要文字环绕容器,那浮动是不二选择。若是你须要居中对齐元素,inline-block是个好选择。
最终,这能够归结为float跟inline-block的两种属性做用后的区别,你须要对其做出选择。
上图,把一系列元素设置了浮动,由于盒子二号宽度的关系,能够发现盒子五号被挤进去了(这些元素都脱离了文档流),这是图片排列中很常见的问题。
浮动、inline-block和图像排列
我使用inline-block主要是为了处理垂直对齐问题。我想这也是不少人使用这个属性的缘由。我制做的不少站点都不可避免的带有一些图片列表。
若父元素中的图片等高,设置浮动就会工做正常。但一旦有一列图片比较高时,图片的排列就会出现问题。这是由于浮动后,图片脱离了文档流。
而inline-block因为未脱离文档流,不会出现这个问题。若是你想再建立一列图片时,不会受到上一列图片inline:block的影响。而你在使用时须要时刻注意清除浮动,当内容不断变化时这很容易产生bug。
这里有个更明显的例子来体现inline-block跟float的区别:
我制做了一个demo来展现一下两个写法效果的区别
上面的块级元素被设置了inline-block。因为他们没有脱离文档流,因此元素不会被某个过长的列挤上来。
inline-block导航
另外一种inline-block的适用场景:横向导航栏。一般,咱们通常会设置a元素display:block而后进行浮动来制做。有时候我会直接经过对列表元素设置display:inline来制做。若是在制做中,你须要设置不一样的display属性来处理浮动,那么inline-block不失为一种更好的解决方案。
当你须要将元素排列成一行或者多行时,更倾向于考虑使用inline-block代替float。固然,直接使用table也是一种方法,他毕竟是专门用来处理横向与纵向排列的元素的。
若是你须要建立一个很复杂的包含行列的布局,table是你的最佳选择,不过你一样也能够考虑inline-block
咱们常用浮动,但浮动并非惟一的解决方案。有时候inline-block会更好,特别是你想排列一些图片,或者横向排列连接时。
Inline-block元素带有一些行内元素的特征(横向排列),同时内部也拥有块级元素的属性。这个跟浮动很相似,只不过有些区别。
这些区别决定了你该使用哪一种方案。若是你很纠结垂直对齐问题或者横向排列元素,不妨使用inline-block。若是你须要对一个元素跟围绕他的一些元素进行更多控制,你须要浮动。
固然,table也是你处理一些问题的最佳方案。
一样我想说的,这不是什么新东西,但我会经过这篇文档还有demo来介绍一些应该使用但有些人还没有使用inline-block的场景。
很是感谢你阅读此文,但愿这篇文章能够真正在你学习使用css的时候帮到你。固然有意见跟建议你也能够提出来~
译者手语:整个翻译依照原文线路进行,并在翻译过程略加了我的对技术的理解。若是翻译有不对之处,还烦请同行朋友指点。谢谢!
如需转载烦请注明出处: