【问题标题】:Floated DIV width = 100% - widths of two other floated divs浮动 DIV 宽度 = 100% - 其他两个浮动 div 的宽度
【发布时间】:2014-06-09 22:37:03
【问题描述】:

好的,这是我的问题,

我需要在一行中有四个DIVs。前三个是float:left,第四个是float:right。容器具有指定的宽度。

我需要第三个div 来填充从向左浮动的第二个div 到向右浮动的第四个div 的所有空间。

编辑: DIV #1、#2 和 #4 也具有动态宽度...它们具有一定的填充,并且内容定义了宽度。

【问题讨论】:

  • 我们可以假设 div #1、#2 和 #4 具有指定的宽度(% 或 px)吗?
  • 显示您的代码 - 您尝试过什么?
  • 您是否关心您的 div 的顺序,例如,在源代码中 div #3 可以出现在 div #4 之前吗?
  • @MarcAudet 好吧,如果它有效,那么订单对我没有任何影响
  • 你是在%中定义的?

标签: css html layout css-float


【解决方案1】:

为什么不转过头来,确定如何创建您想要的布局——在这种情况下,最简单的方法可能是:

Demo Fiddle

HTML

<div class='table'>
    <div class='cell'>fit</div>
    <div class='cell'>fit</div>
    <div class='cell'>expand</div>
    <div class='cell'>fit</div>
</div>

CSS

.table {
    display:table;
    width:100%; /* <-- will make the divs align across the full browser width */
    height:50px;
}
.cell {
    display:table-cell;
    border:1px solid red;
    width:1%; /* <-- will make 1, 2, 4 only fit their content */
}
.cell:nth-child(3) {
    width:100%; /* <-- will make 3 expand to the remaining space */
}

【讨论】:

  • 虽然我通常会说使用表格进行布局是不好的做法,但此解决方案的简单性以及您没有立即使用 javascript 方法这一事实非常棒。来自我的 +1!
  • @MatthewR。 - 完全同意在 99% 的情况下避免使用表格进行布局
  • 是的 +1 来自我的衷心感谢
  • 是的,这可能是我唯一一次想到“哇,这是使用表格的绝佳解决方案!”
  • 使用 CSS 表格与使用 HTML 表格标签不同,因此表格布局问题不是这里的一个因素。这种方法的优点是您可以保持内容的顺序,并且无论页面宽度如何,子元素都将保持在一行上。这通常是响应式设计中的考虑因素。
【解决方案2】:

使用浮动元素的解决方案

这是使用浮点数的一种方法。

按如下方式排列您的 HTML:

<div class="panel-container">
    <div class="panel p1">Panel 1 - and a word</div>
    <div class="panel p2">Panel 2 - Done. </div>
    <div class="panel p4">Panel 4 - End!</div>
    <div class="panel p3">Panel 3</div>
</div>

并应用以下 CSS:

.panel-container {
    width: 600px;
    border: 1px dotted blue;
    overflow: auto;
}
.panel {
    background-color: lightgray;
    padding: 5px;
}
.p1 {
    float: left;
}
.p2 {
    float: left;
}
.p3 {
    background-color: tan;
    overflow: auto;
}
.p4 {
    float: right;
}

诀窍是将浮动元素(.p1.p2..p4)放置在流入内容(.p3)之前。

在父容器上使用overflow: auto,以防止浮动的子元素影响父元素之外的布局。

我在.p3 上添加了overflow: auto,以便填充包含在包含块中。

参见小提琴:http://jsfiddle.net/audetwebdesign/9G8rT/

评论

这种方法的一个缺点是改变了内容的顺序,即.p3在代码顺序中出现在.p4之后。

在响应式设计中可能需要的另一个副作用是,随着父容器宽度变小,子元素将换行到 2 行或更多行。

如果您需要在 HTML 代码中保留内容顺序,CSS table-cell 解决方案是一个不错的选择。

表格单元解决方案将子元素保持在一行,而不管父容器的宽度。

浮动元素解决方案的最后一个优势是,它比 CSS 表格单元解决方案更向后兼容,但随着我们的发展,这变得越来越少 一个令人信服的论点。

【讨论】:

  • 这种方法的问题是,当添加更多内容时,内容和子元素不会保留在一行上,它会进入下一行,看看你的小提琴jsfiddle.net/9G8rT/1
  • 浮动解决方案可能并不总是最好的,请参阅我上面关于表格单元选项的 cmets。这两个选项都适用于某些情况,具体取决于您的 cmets 中隐含的内容的性质。
猜你喜欢
  • 2012-12-13
  • 2012-11-25
  • 1970-01-01
  • 1970-01-01
  • 2011-11-12
  • 1970-01-01
  • 2011-07-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多