【问题标题】:CSS, Responsive, Make floating boxes stack upCSS,响应式,使浮动框堆叠起来
【发布时间】:2014-09-11 10:31:25
【问题描述】:

我想创建一个响应式布局,其中有两列,左列和右列。 在较小的屏幕上,左侧的框必须移动到某些位置。这对我的代码很有效,但问题是在大屏幕上,框之间的右侧有一个间隙。

我该如何解决?

想法和问题

JSFIDDLE

当您查看以下 jsfiddle 时,您会发现它适用于小屏幕,但问题不会在大屏幕上移动。我知道我这样做的方式是错误的,但我怎样才能使用 CSS 获得这个想要的结果?

http://jsfiddle.net/7rnum9xk/

.main{
    width:65%;
    height:125px;
    margin-bottom:10px;
    float:left;
}
.small{
    width:35%;
    height:25px;
    float:left;
    margin-bottom:5px;
}

@media screen and (max-width: 692px)   {
    .main, .small{
        width:100%;   
        float:none;
    }    
}

【问题讨论】:

  • 尝试查看 .clearfix
  • 彩色元素有固定的高度吗?
  • 不,每个元素都有一个动态高度。大盒子和小盒子。

标签: html css responsive-design


【解决方案1】:

试试这个代码DEMO

.main{
    width:65%;
    height:125px;
    margin-bottom:10px;
   float:left; 
    display: inline-block;
}
.small{
    width:35%;
    height:25px;
    /* float:left; */
    display:inline-block;
    margin-bottom:5px;
}

@media screen and (max-width: 692px)   {
    .main, .small{
        width:100%;   
        float:none;
    }

}

/* colors */
.main{background:#d0d0d0;}
.orange{background:#ecbd00;}
.green{background:#6aec00;}
.blue{background:#00c8ec;}
.purple{background:#c300ec;}
.red{background:#e93a73;}

【讨论】:

  • 哇!乍一看,您似乎是当时的英雄!
  • 这很好,+1 只是让有色元素总是小于灰色元素:jsfiddle.net/webtiki/7rnum9xk/11
  • 很好,但如果您能指出您为实现所需外观所做的更改,那就太好了。
  • @web-tiki 如果彩色元素偶尔比灰色元素大,有什么办法吗?
  • 我找到了一个related question,并且我能够做一些“一半有效”的事情,here,在 2 列中使用两个 div 会使事情变得更容易,但在选项。有趣的是,右栏中的空白对我来说不是问题。
【解决方案2】:

问题在于 html 的结构,您将主 div 放在每个小 div 之后。所以它会先打印那个 div。

我建议做的是像这样改变 html 结构;

左列左浮动,右列右浮动。

然后在周围放一个div

添加媒体 css 以便在 800px(或任何您需要的)处您可以在 .hide800display none; 这隐藏 div,然后在您当前的 html 周围添加一个 div,但放置一个显示无的内联样式。然后在 800px(或隐藏第一个 div 的任何大小)处添加 css 到 display: block !Important;

这样它就可以满足您在全宽浏览器中的需要,但是当屏幕小到足以改变结构时,您可以使用您当前的代码。

html;

<div class="hide800">
    <div class="left-col">
    <div class="main">
    </div>
    <div class="main">
    </div>
    <div class="main">
    </div>
    </div>
    <div class-right-col">
    <div class="small orange">
    </div>
    <div class="small green">
    </div>
    <div class="small blue">
    </div>
    <div class="small purple">
    </div>
    <div class="small red">
    </div>
    </div>
</div>
<div class="show800" style="display:none;">
<div class="main">
</div>
<div class="small orange">
</div>
<div class="small green">
</div>

<div class="main">
</div>
<div class="small blue">
</div>
<div class="small purple">
</div>

<div class="main">
</div>
<div class="small red">
</div>
</div>

css;

.left-col {
float: left;
}
.right-col {
float: right;
}
@media screen and(max-width:800px){
.hide800 {
display: none;
}
.show800 {
display: block !Important;
}
}

如果您需要我进一步解释,请告诉我:)

【讨论】:

  • 但这意味着我必须生成每个小元素两次?一次在 show800 中,一次在 hide800 元素中? (如果我错了,请纠正我)我希望得到一个不需要生成双重内容的解决方案。
  • 我认为复制内容也不好。我也有类似的情况。那么同位素之类的图书馆呢?
  • 好吧,没问题,对不起,我帮不上忙。
猜你喜欢
  • 2020-04-06
  • 2020-04-09
  • 2017-12-06
  • 1970-01-01
  • 2013-04-26
  • 1970-01-01
  • 2014-11-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多