我想要一个具有三个框(两个可选)的布局,如下所示:
[侧栏1] [主要内容
[侧栏2]。主要内容
或者
[如果不提供边箱,则主要内容占100%]
我希望主内容框跨越#load
中可用的整个高度和宽度(减去边距),除非边框在那里,那么我希望它仅跨过这些框(及其右边距)。
我的CSS:
#load {
margin: 10px;
height: 100%;
min-width: 1080px;
}
#primary,#secondaryOne,#secondaryTwo {
border-radius: 8px;
background: #f5f5f5;
border: 1px solid #ccc;
}
#primary {
float: right;
height: inherit;
width: 75%;
height:500px;
background:red;
}
#secondaryOne,#secondaryTwo {
min-width: 250px;
max-width: 300px;
height: 220px;
margin-right: 10px;
width: 20%;
clear:left;
float:left;
}
#secondaryTwo {
margin-top: 10px;
}
简单的HTML
<div id='load'>
<div id='primary'></div>
<div id='secondaryOne'></div>
<div id='secondaryTwo'></div>
</div>
JSFiddle
问题
解决方案
clear: left
和负margin-top
进行。 该解决方案可以在以下位置找到:http://jsfiddle.net/v4cvv/67/
解决方案的主要部分是:
#primary {
width: 100%;
}
#secondaryOne + #primary, #secondaryTwo + #primary {
margin-top: -221px;
width: 75%;
}
替代解决方案
我发现上述解决方案的一个问题是,它需要两个盒子且它们的高度相同。围绕此问题的一种解决方案是将这些框分组到自己的div中。该解决方案是:
HTML
<div id='load'>
<div id="sideboxes">
<div id="boxOne" class="box"></div>
<div id="boxTwo" class="box"></div>
<div id="boxThree" class="box"></div>
</div>
<div id="primary" class="box"></div>
</div>
CSS
.box {
border-radius: 8px;
background: #f5f5f5;
border: 1px solid #fff;
}
#primary {
float: right;
display:block;
height: 97%;
width: 100%;
}
#sideboxes + #primary {
width: 75%;
}
#sideboxes {
float: left;
height: 97%;
width: 23%;
margin-right: 10px;
}
#sideboxes .box {
float: left;
height: 220px;
margin-bottom: 10px;
width: 100%;
}
替代解决方案不再需要明确的说明,并且可以扩展为其他用途。现在,边箱div中可能还需要1、2、3或许多框。
谢谢大家的帮助。
最佳答案
要回答有关辅助盒不在时主盒宽度为100%的问题,您可以执行以下操作:
#primary {width:100%;}
.secondary + #primary {width:75%;}
如果将CSS代码放在样式表的底部,然后将主div标签放在第一个辅助div标签之后,则默认情况下它将为100%宽,除非存在具有
class="secondary"
的元素。这不会改变div呈现位置的任何内容,但可以解决您的问题。另外,如果您的二级div可能被隐藏而不是不存在,则可以执行以下操作:
#primary, .secondary.hidden + #primary {width:100%;}
.secondary + #primary {width:75%;}
也就是说,假设您通过
.hidden
之类的类来隐藏辅助选项卡。Here 是一个工作版本,当删除辅助副本时,其宽度变为100%,但如果前面有
.secondary
元素,则宽度仍为75%。关于html - 带有可选边箱的流体布局,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20817586/