使用媒体查询进行3列响应式设计很简单,但是如果我希望中间列保持在100%高度的中间位置,而右列位于左列,则会变得棘手。
问题出现了,因为中间列高度是可变的,因此不可能给变换后的右列提供负边距顶部。
这是css代码示例:
/* 3 columns css */
.colLeft, .colRight, .colMid{
width: 280px;
float: left;
}
.colMid{
width: 500px;
}
.colRight{
width: 240px;
}
.container{
width: 1020px;
margin: 0 auto;
}
/* Media queries */
@media screen and (max-width: 1020px) {
.container {
width: 780px!important;
}
.rightCol{
width: 280px;
}
}
HTML:
<div class="container">
<div class="leftCol">
</div>
<div class="midCol">
</div>
<div class="rightCol">
</div>
</div>
这段代码工作正常,但是中间列高度将变换后的右列向下推。 我的问题:这个问题有HTML / CSS解决方案吗?或者,当屏幕重新调整大小时,我是否必须更改HTML呈现?
谢谢,
答案 0 :(得分:0)
看起来你的float:left正在应用于你的.colRight类。这可能是导致您的右栏显示在左栏上的原因。
答案 1 :(得分:0)
我找到了解决方案,仅使用CSS / HTML。以下是解释:
我创建了一个重复的rightCol div并将其放在leftCol div中,并命名为righCol-left。
最初,rightCol-left设置为&#34; display:none&#34;
当媒体屏幕低于1020px时,隐藏rightCol(显示:无),并显示rightCol-left(显示:块)
这是CSS:
.rightCol-left{display:none;} /*duplicate div*/
@media screen and (max-width: 1020px) {
.container {
width:780px!important;
}
.rightCol{
display:none;
}
.rightCol-left{
display:block;
width:280px;
}
}
这是HTML:
<div class="leftCol">
/*Left column content*/
<div class="rightCol-left"> /* will be displayed when screen is below 1020px */
</div>
</div>
<div class="midCol">
/* mid column content */
</div>
<div class="rightCol"> /* gets hidden when screen is below 1020px */
</div>
这很有效,唯一不好的是重复的HTML代码。但这并不明显且非常小,毕竟,与JavaScript或其他任何东西相比,HTML代码对网页的负载要小得多。