【发布时间】:2011-06-14 18:15:23
【问题描述】:
我目前有一个带有 width:auto 的 div 来填充整个屏幕宽度,但我想在右侧放置一个侧边栏。 当我将 width:auto div 向左浮动并将宽度 div 向右浮动时,它会改为下方。 我基本上是在寻找类似于 reddit 的东西,在右侧宽度的搜索栏中,内容会自动调整到页面宽度。 谢谢
【问题讨论】:
我目前有一个带有 width:auto 的 div 来填充整个屏幕宽度,但我想在右侧放置一个侧边栏。 当我将 width:auto div 向左浮动并将宽度 div 向右浮动时,它会改为下方。 我基本上是在寻找类似于 reddit 的东西,在右侧宽度的搜索栏中,内容会自动调整到页面宽度。 谢谢
【问题讨论】:
你可以这样:
假设您在父容器中有这 2 个 div,它会展开以适应页面:
<div id="container">
<div id="autowidth">text expands her...</div>
<div id="fixed">This is a fixed column</div>
</div>
在您的 CSS 中:
#container {
width:100%;
border:1px solid black;
padding-right:200px;
}
#autowidth{
width:100%;
background-color:red;
float:left;
}
#fixed{
width:200px;
background-color:green;
float:right;
margin-right:-200px;
}
基本上,父容器将所有东西放在一起。它有 200px 的填充(右列的宽度),因此它的内容不会超出该点。反过来,右边的 col 有 -200px 的边距,因此它强制由父填充强加的边界并将自己始终放置在最右边。实际上,另一个 div 现在只有父容器提供的空间,受其填充限制,所以它的 100% 实际上是 (100% - (父填充))。你可以在这里看到这个的工作结果:jsfiddle.
我很确定可能会有更优雅的解决方案,所以请耐心等待。
如果你想给出一个背景,比如 2 列,你可以选择经典的“人造列”背景(参见 a list apart 的示例)
【讨论】:
您并不需要一个容器 div。为了简洁起见,我做了 css inline。
<div style="float:right; width:14em; background-color:#CCC;">
<p>This div is fixed-width.</p>
</div>
<div style="background-color:#EEE; margin-right:14.5em;">
<p>This div is auto-width.</p>
</div>
【讨论】:
答案对我不起作用,我认为它已经过时了。现在您必须指定 box-sizing:border-box 用于填充以计算宽度,但感谢您的灵感。这是我的解决方案。
#autowidth {
float:left;
width:100%;
padding-right:200px;
box-sizing:border-box;
}
#fixed {
float:right;
width:200px;
margin-left:-200px;
}
【讨论】: