如何使CSS浮动在一行中?


216

我想在同一行上使用两个项目float: left作为左侧的项目。

我没有任何问题可以单独实现。问题是,即使您将浏览器的尺寸调整得非常小,我也希望这两项保持同一行。您知道...就像桌子一样。

我们的目标是无论包裹在右边,都不会包裹物品

如何使用CSS告诉浏览器,我宁愿拉伸包含内容而div不是包装内容,因此float: right;div在float: left; div?之下?

我想要的是:

                                   \
 +---------------+  +------------------------/
 | float: left;  |  | float: right;          \
 |               |  |                        /
 |               |  |content stretching      \   Screen Edge
 |               |  |the div off the screen  /  <---
 +---------------+  +------------------------\
                                             /

54
如果StackOverlow添加了一个小绘图小部件以便我们可以用鼠标绘制这些图表,那将有多酷?可能更适合于面向设计的SE网站……但是那还是很棒的。
JoeCool 2012年

5
@JoeCool UX SE站点实际上已经有一个工具可以在其中创建模型。meta.ux.stackexchange.com/questions/1291/...
弗兰克hadder

Answers:


77

将浮动<div>s 包装在<div>使用此跨浏览器最小宽度hack 的容器中:

.minwidth { min-width:100px; width: auto !important; width: 100px; }

可能还需要设置“溢出”,但可能不需要。

之所以有效,是因为:

  • !important声明,联合min-width原因的一切留在IE7 +同一行
  • IE6没有实现min-width,但是它有一个错误,该错误会width: 100px覆盖!important声明,导致容器宽度为100px。

这对于两个浮标效果很好,但对三个而言效果不佳。它可以工作三个吗?
tylerthemiler'4

15
唯一的问题是,它强制使用固定的最小宽度。
马特·蒙塔格

6
这不是解决方案,只是最小宽度,当您的内容变得非常小时(请参阅问题),因此在100px以下,您会遇到同样的问题。特别是对于表格单元格,这仍然是一个问题。
桑内(Sanne)2013年

绝对令人震惊-立即解决了我的问题。我一直在一个简单的两列引导程序布局中解决这个问题,它的箱式hack超过了我的名字,但这确实很不错。感谢您对为何如此有效的解释-有趣的东西,dom是。
nocarrier 2014年

这可能适用于div,但是我只是用ul / li对其进行了测试,但它不起作用:(
AsGoodAsItGets 2014年

132

另一种选择是将浮动属性nowrap设置为父div,而不是进行浮动:

.parent {
     white-space: nowrap;
}

并重置空白并使用行内块显示,以便div保持在同一行上,但您仍然可以为其设置宽度。

.child {
    display:inline-block;
    width:300px;
    white-space: normal;
}

这是一个JSFiddle:https ://jsfiddle.net/9g8ud31o/


4
绝对是我见过的最好的解决方案。它适用于我的用例,但我想知道它的支持程度如何。幸运的是,将浮点数用于一切已逐渐成为历史。
Ryan Ore

1
您能解释一下这是如何工作的吗?或至少有任何链接?
Anirudhan J 2014年

4
@AnirudhanJ不太困难。内联块使元素以内联文本正常流动(但保留了该块的某些填充/边距功能),而您实际上只是告诉CSS不要用空格包装文本:nowrap选项(应用“正常” “再次对孩子说,以避免它传播到一切事物中)
Brian

但是,如何使div在右侧浮动到屏幕右侧?这只是将两个内联块彼此相邻,不会换行。
addMitt

您还可以使用字母间距:-3px(或任何适合您的值)来删除内联块元素之间的空格。PS:比接受的答案更好
Claudiu

15

将您的浮动广告素材包裹在div中,最小宽度应大于浮动广告素材的宽度+边距之和。

无需黑客或HTML表格。


10

解决方案1:

display:table-cell(不广泛支持)

解决方案2:

桌子

(我讨厌黑客。)


8

另一种选择:不浮动右列;只要给它一个左边距就可以将其移到浮动上方。您将需要一两个hack来修复IE6,但这是基本思想。


4

您确定浮动的块级元素是此问题的最佳解决方案吗?

在我的经验中,经常会遇到CSS困难,事实证明,我看不到自己想要做的事情的原因是,我在标记方面陷入了困境(想想“我该如何做这些?元素可以做到这一点?”),而不是回过头来看看我到底需要实现什么,或者稍微修改一下html来实现这一点。


很好,它几乎适用于所有内容,并且现有的布局都基于它,我只是想解决一个问题,当您增加文本大小或调整浏览器窗口的宽度小于700px时,布局会中断
Jiaaro


2

将此行添加到浮动元素选择器

.floated {
    float: left;
    ...
    box-sizing: border-box;
}

这样可以防止将填充和边框添加到宽度中,因此即使您具有例如,元素也始终排在行中。三个元素的宽度为33.33333%


0

当用户水平减小窗口大小并导致浮动框垂直堆叠时,请移除浮动框,然后在第二个div(即浮动框)上使用margin-top:-123px(您的值)和margin-left:444px(您的值)将div放置在带有浮点的位置。这样,当窗口变窄时,右侧div会留在原处,而当页面太窄而无法包含它时,它会消失。...(对我而言)比在用户缩小浏览器窗口时将右侧div“跳转”到左侧div下方更好。


-3

我解决这个问题的方法是使用一些jQuery。我这样做的原因是因为A和B是宽度百分比。

HTML:

<div class="floatNoWrap">
    <div id="A" style="float: left;">
        Content A
    </div>
    <div id="B" style="float: left;">
        Content B
    </div>
    <div style="clear: both;"></div>
</div>

CSS:

.floatNoWrap
{
    width: 100%;
    height: 100%;
}

jQuery的:

$("[class~='floatNoWrap']").each(function () {
    $(this).css("width", $(this).outerWidth());
});

1
CSS框架?我必须使用-jquery进行所有 JavaScript搜索,并且由于完全和完全不顾质量,我们也必须开始使用-jquery显式搜索CSS吗?做对或根本不做。
约翰
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.