具有流体左列和固定右列的两列 div 布局

Posted

技术标签:

【中文标题】具有流体左列和固定右列的两列 div 布局【英文标题】:Two column div layout with fluid left and fixed right column 【发布时间】:2011-08-04 11:55:36 【问题描述】:

我想使用 DIV 进行两列布局,其中右列将具有 200 像素的固定宽度,而左列将占据剩余的所有空间。

如果你使用表格,这很容易:

<table >
  <tr>
    <td>Column 1</td>
    <td >Column 2 (always 200px)</td>
  </tr>
</table>

但是 DIV 呢?有可能做到这一点吗?如果是,那么如何?

【问题讨论】:

简短回答? Yes 【参考方案1】:

CSS 解决方案

#left
    float:right;
    width:200px;
    height:500px;
    background:red;   


#right
    margin-right: 200px;
    height:500px;
    background:blue;

在http://jsfiddle.net/NP4vb/3/查看工作示例

jQuery 解决方案

var parentw = $('#parent').width();
var rightw = $('#right').width();
$('#left').width(parentw - rightw);

检查工作示例http://jsfiddle.net/NP4vb/

【讨论】:

【参考方案2】:

我最近看到这个网站使用 CSS 进行液体布局。 http://matthewjamestaylor.com/blog/perfect-multi-column-liquid-layouts(查看下面链接中的演示页面)。

作者现在提供了一个固定宽度布局的例子。退房; http://matthewjamestaylor.com/blog/how-to-convert-a-liquid-layout-to-fixed-width.

这提供了以下示例, http://matthewjamestaylor.com/blog/ultimate-2-column-left-menu-pixels.htm(我认为的两列布局像你这样)

http://matthewjamestaylor.com/blog/fixed-width-or-liquid-layout.htm(用于三列布局)。

很抱歉有这么多指向这个家伙网站的链接,但我认为这是一个很棒的资源。

【讨论】:

这就是我要找的:matthewjamestaylor.com/blog/… 但是我怎么看代码呢? :) 右键查看源码。每个页面几乎都包含必要的标记和 CSS,以实现您在该页面上看到的结果。尝试调整给定页面的浏览器大小,看看它如何影响页面。 @Silver Light 我用过的大多数现代浏览器都允许您使用 Ctrl+U 查看源代码。【参考方案3】:

这是一个解决方案(它有一些怪癖,但如果你注意到它们并且它们是一个问题,请告诉我):

<div>
    <div style="width:200px;float:left;display:inline-block;">
        Hello world
    </div>
    <div style="margin-left:200px;">
        Hello world
    </div>
</div>

【讨论】:

@Hussein inline-block 确实在 IE6 和 7 中工作,它只需要一些帮助,但是在这里我没有必要使用浮点数,并且使用浮点数时会忽略显示属性..我'我会检查一下 @clairesuzy 是的,很好。而且我也有一段时间没有做css和html的东西了,下次我会尽量少一点马虎,更好一点。 >. 不用担心,这是一个正确的解决方案 ;) - 检查后:display: inline-block 在上面的代码中不应该是必需的,但display:inline 可能对 IE6 及以下版本有用,因为双边距错误 - 如果遇到了【参考方案4】:

CSS:

#sidebar float: right; width: 200px; background: #eee;
#content overflow: hidden; background: #dad;

HTML:

<div id="sidebar">I'm 200px wide</div>
<div id="content"> I take up the remaining space <br> and I don't wrap under the right column</div>

上面应该可以工作,如果你想给它宽度和居中,你可以把代码放在包装器中,overflow:hidden 在没有宽度的列上是让它垂直包含的关键,因为不是环绕侧列(可以是左或右)

IE6 可能如果你需要它的支持,也需要在#content div 上设置zoom:1

【讨论】:

float: rightfloat: leftoverflow: hidden 是最好的解决方案,因为不需要计算在 非浮动元素 上并支持 display: none 来制作滑块! 非浮动元素也将其宽度传播到所有可用空间! +1 +1 +1【参考方案5】:

以下示例按源代码排序,即第 1 列出现在 HTML 源代码中的第 2 列之前。列出现在左侧还是右侧由 CSS 控制:

右固定

#wrapper 
  margin-right: 200px;

#content 
  float: left;
  width: 100%;
  background-color: #CCF;

#sidebar 
  float: right;
  width: 200px;
  margin-right: -200px;
  background-color: #FFA;

#cleared 
  clear: both;
<div id="wrapper">
  <div id="content">Column 1 (fluid)</div>
  <div id="sidebar">Column 2 (fixed)</div>
  <div id="cleared"></div>
</div>

左固定

#wrapper 
  margin-left: 200px;

#content 
  float: right;
  width: 100%;
  background-color: #CCF;

#sidebar 
  float: left;
  width: 200px;
  margin-left: -200px;
  background-color: #FFA;

#cleared 
  clear: both;
<div id="wrapper">
  <div id="content">Column 1 (fluid)</div>
  <div id="sidebar">Column 2 (fixed)</div>
  <div id="cleared"></div>
</div>

替代解决方案是使用display: table-cell;这会导致等高的列。

【讨论】:

另一个不错的,虽然你不需要清除 div,因为包装是浮动的,它已经清除(包含浮动列);) 是的,它就在那里,因为我有一个习惯,每当我使用浮动时都会添加 clear :) @clairesuzy:我现在明白为什么我需要清除 div...当列高不相等时,清除 div 确保以下项目(例如页脚,或者小提琴中的惊喜我按钮) 不干扰任一列。 谢谢,在这种情况下完全正确,我正在混淆我使用的另一个布局 - link - 它构建在一个包含浮动/包装器的整体中 - 上述布局可以在任一位置执行任意数量的侧边栏侧面 - 我用它作为几乎所有东西的基础;)对不起,我把它和你的混淆了 这一直有效,直到我在侧边栏内添加一个 ,然后由于某种原因,流体列向下包裹在侧边栏下方。【参考方案6】:

我认为这是一个简单的答案,这将根据父宽度将子开发者分成 50%。

 <div style="width: 100%">
        <div style="width: 50%; float: left; display: inline-block;">
            Hello world
        </div>
        <div style="width: 50%; display: inline-block;">
            Hello world
        </div>
    </div>

【讨论】:

【参考方案7】:

#wrapper 
  margin-right: 50%;

#content 
  float: left;
  width: 50%;
  background-color: #CCF;

#sidebar 
  float: right;
  width: 200px;
  margin-right: -200px;
  background-color: #FFA;

#cleared 
  clear: both;
<div id="wrapper">
  <div id="content">Column 1 (fluid)</div>
  <div id="sidebar">Column 2 (fixed)</div>
  <div id="cleared"></div>
</div>

【讨论】:

以上是关于具有流体左列和固定右列的两列 div 布局的主要内容,如果未能解决你的问题,请参考以下文章

两列布局

DIV+CSS布局,怎么实现两列高度会一致,其中左例随内容长度而定。

CSS布局奇淫技巧之-多列等高

修复了引导列内的 div [关闭]

React-Bootstrap <Row> 高度不正确

根据最大的子视图使用自动布局调整超级视图的大小