【发布时间】:2011-07-14 15:59:11
【问题描述】:
考虑以下 2 cols html 结构:
<div id="container">
<div class="left">some text</div>
<div class="right">some text</div>
</div>
CSS:
#container { overflow: hidden; }
.left { float: left; width: 200px; background: red; }
.right { overflow: hidden; background: green; }
jsFiddle 中的相同代码 - http://jsfiddle.net/vny2H/
所以我们有 2 列。左边的列宽是固定的,右边的宽度是液体。 如果我们从 html 中删除左列,右列会拉伸到父级#container 宽度的 100%。
问题是:我们可以改变左右列的顺序吗? (我需要它来进行 SEO)
<div id="container">
<div class="right"></div>
<div class="left"></div>
</div>
谢谢。
添加
有一种有趣的方法可以达到我想要的效果,但固定列变得不可移动。该方法基于负边距。 http://jsfiddle.net/YsZNG/
HTML
<div id="container">
<div id="mainCol">
<div class="inner">
<p>Some text</p>
<p>Some text</p>
<p>Some text</p>
<p>Some text</p>
</div><!-- .inner end -->
</div><!-- .mainCol end -->
<div id="sideCol">
<p>Some text</p>
<p>Some text</p>
<p>Some text</p>
<p>Some text</p>
</div><!-- .sideCol end -->
</div><!-- #container end -->
CSS
#container { overflow: hidden; width: 100%; }
#mainCol { float: right; width: 100%; margin: 0 0 0 -200px; }
#mainCol .inner { margin: 0 0 0 200px; background: #F63; }
#sideCol { float: left; width: 200px; background: #FCF; }
所以我们有两种方法:
- 对固定列使用“float”,对液体使用“overflow: hidden”。固定柱变得可移动。但液体在代码中排在第二位。
- 使用负边距。液体列在代码中排在第一位。但固定的不可拆卸。
是否有第三种方法,当固定柱是可移动的并且液体柱是代码中的第一个时?
添加
@lnrbob 建议半决定。主要思想 - 使用类似表格的 div。 http://jsfiddle.net/UmbBF/1/
HTML
<div id="container">
<div class="right">some text</div>
<div class="left">some text</div>
</div>
СSS
#container { display: table; width: 100%; }
.right { display: table-cell; background: green; }
.left { display: table-cell; width: 200px; background: red; }
此方法适用于在站点右侧放置固定列的情况。但是如果我们需要它在左边 - 这似乎是不可能的。
【问题讨论】:
-
我不确定这是否是您需要的,但这是新的,不适用于旧版浏览器。 quirksmode.org/css/multicolumn.html
-
这是一件了不起的事情,但它似乎只是对一个块的修改。所以它不适合网站栏结构。
-
毕竟“网站栏结构”本身就在 div 或 body 中。我相信它是专门为网站结构而设计的。它会更好地融入浏览器,因此会更可靠:) 它比管理浮动 div 和所有内容要容易得多:D 我使用它,我花了大约 5 分钟来理解和实现它
-
好的,但是我没有看到任何示例,当每列中有多个 div 块时,如何形成多列。请你写这样的例子好吗?
-
我没有看到复杂性.. :O 像你一样简单地写,将一列视为一个单独的 div :) 正如你所说的那样,它只是结构正确的浮动 div。将单列视为单独的 div,你应该很好