使用 display 的优点: inline-block vs float: left in CSS

通常,当我们希望一行中有多个 DIVs时,我们会使用 float: left,但是现在我发现了 display:inline-block的诀窍

示例链接 给你。 在我看来,display:inline-block是一个更好的方式,以 align DIVs排,但有什么缺点?为什么这种方法没有 float那么流行?

130763 次浏览

你可以在深度 给你中找到答案。

但是通常使用 float时,您需要注意并关注周围的元素和 inline-block简单的行元素方法。

谢谢

三个字: inline-block更好。

嵌入式块

display: inline-block方法的唯一缺点是,在 IE7及其以下版本中,如果默认情况下某个元素已经是 inline,那么它只能显示为 inline-block。这意味着不使用 <div>元素,而必须使用 <span>元素。这其实并不是一个很大的缺点,因为从语义上讲,<div>是用来划分页面的,而 <span>只是用来覆盖一个页面的跨度,所以没有很大的语义差异。display:inline-block的一个巨大好处是,当其他开发人员稍后维护您的代码时,与 inline-block0或 inline-block1语句相比,display:inline-blocktext-align:right试图完成的工作要明显得多。我最喜欢的 inline-block方法的好处是,它很容易使用 inline-block3,inline-block4和 inline-block5完美中心的元素,以一种直观的方式。我在 inline-block6上发现了一篇关于如何实现跨浏览器内联块的博客文章。这是 inline-block7。

漂浮

使用 float方法不适合页面布局的原因是因为 float CSS 属性 最初的目的只是让文字包围图像(杂志风格),而且从设计上来说,它不是最适合一般页面布局目的的。稍后更改浮动元素时,有时会出现定位问题,因为它们是 不在页面流中。另一个缺点是,它通常需要一个清除,否则它可能会破坏页面的方面。Clearfix 需要在浮动元素之后添加一个元素,以停止它们周围的 父母免于崩溃,这跨越了将样式与内容分离的语义线,因此是 Web 开发中的反模式

上面链接中提到的任何空白问题都可以通过 white-space CSS 属性轻松解决。

编辑:

SitePoint 是一个非常可靠的网页设计建议来源,他们似乎有同样的意见,我做:

如果您是 CSS 布局的新手,那么您的这种想法是可以理解的 以富有想象力的方式使用 CSS 浮点是技巧的高度 已经消耗了尽可能多的 CSS 布局教程,因为你可以找到,你可能 假设掌握花车是一种成人仪式,你会眼花缭乱的 创造力,复杂性,你会得到一种感觉 当你终于明白彩车是如何工作的时候。

别傻了,你被洗脑了。

Http://www.sitepoint.com/give-floats-the-flick-in-css-layouts/

2015年更新-Flexbox 是 现代浏览器的一个很好的替代品 :

.container {
display: flex; /* or inline-flex */
}


.item {
flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
}

更多信息

2016年12月21日更新

Bootstrap 4正在删除对 IE9的支持,因此正在从行中删除浮点数,转而使用完整的 Flexbox。

请求号码21389

如果您想使 div的像素精确对齐,那么使用 float。inline-block似乎总是要求你去掉几个像素(至少在 IE 中)

虽然我同意一般来说 inline-block更好,但是在创建一个响应式网格(或者如果你想要像素完美的宽度)时,还有一件额外的事情需要考虑到 如果使用百分比宽度:

如果对总宽度为100% 或接近100% 的网格使用 inline-block,则需要确保 HTML 标记包含 柱子之间没有空白

对于浮点数,这不是您需要担心的事情——列在列之间的任何空格或其他内容上浮动。这个问题的答案有一些很好的技巧,关于如何在不使代码难看的情况下删除 HTML 空白.

如果由于某种原因您无法控制 HTML 标记(例如限制性 CMS) ,您可以尝试这里描述的技巧,或者您可能需要妥协并使用 float 而不是 inline-block。也有丑陋的 CSS 技巧,应该只在极端情况下使用,如 然后在每个列中重新应用字体大小

例如:

但是,内联块有一个特征可能不是直截了当的。也就是说,CSS 中垂直对齐的默认值是基线。这可能会导致一些意外的对齐行为。看看这篇文章。

Http://www.brunildo.org/test/inline-block.html

相反,当执行 float: left 时,div 彼此独立,可以轻松地使用页边距对齐它们。