当浏览器窗口变小时,我想要包装到下一行的div。我还希望在div之间放置保证金,以便它们之间存在差距。我遇到的问题是,如果浏览器设置为特定大小,则中心div上的边距会导致div错误地换行。在一定的大小,你有一个div下面的2个div。请参阅下面的屏幕截图作为示例和这个小提琴:http://jsfiddle.net/uhh2jwe2/(更改窗口的宽度)
这确实需要是动态的,因为它将是用于布置不同大小的div的框架解决方案。父div将与示例类似。任何帮助都会很棒
<ul class="nav nav-tabs">
<li class="active"><a href="#home">Home</a></li>
<li><a href="#menu1">Menu 1</a></li>
<li><a href="#menu2">Menu 2</a></li>
<li><a href="#menu3">Menu 3</a></li>
</ul>
<div class="tab-content">
<div id="home" class="tab-pane fade in active">
<h3>HOME</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>
</div>
<div id="menu1" class="tab-pane fade">
<h3>Menu 1</h3>
<p>Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
</div>
<div id="menu2" class="tab-pane fade">
<h3>Menu 2</h3>
<p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam.</p>
</div>
<div id="menu3" class="tab-pane fade">
<h3>Menu 3</h3>
<p>Eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.</p>
</div>
</div>
<script>
$(document).ready(function(){
$(".nav-tabs a").click(function(){
$(this).tab('show');
});
});
</script>
&#13;
#outer {
width: 90%;
height: 90%;
margin: 5%;
overflow: auto;
background-color: red;
}
.inner1 {
float: left;
width: 150px;
height: 150px;
margin-right: 20px;
background-color: blue;
}
.inner2 {
float: left;
width: 150px;
height: 150px;
margin-right: 20px;
background-color: blue;
}
.inner3 {
float: left;
width: 150px;
height: 150px;
background-color: blue;
}
&#13;
答案 0 :(得分:2)
您可以使用媒体查询在较小的屏幕上更改css。
#outer {
width: 90%;
height: 90%;
margin: 5%;
overflow: auto;
background-color: red;
}
.inner1 {
float: left;
width: 150px;
height: 150px;
margin-right: 20px;
background-color: blue;
}
.inner2 {
float: left;
width: 150px;
height: 150px;
margin-right: 20px;
background-color: blue;
}
.inner3 {
float: left;
width: 150px;
height: 150px;
background-color: blue;
}
@media (max-width: 435px) {
#outer > div {
margin-right:auto;
margin-left:auto;
margin-bottom:15px;
float:none;
}
}
<div id="outer">
<div class="inner1">1</div>
<div class="inner2">2</div>
<div class="inner3">3</div>
</div>
答案 1 :(得分:2)
使用媒体查询,如下所示:
#outer div:last-child {
margin-bottom: 0;
}
@media screen and (max-width:570px) {
.inner1, .inner2, .inner3 {
margin-bottom: 5px;
}
}
@media screen and (max-width:411px) {
.inner1, .inner2, .inner3 {
float: none;
margin: auto;
margin-bottom: 5px;
}
}
#outer {
width: 90%;
height: 90%;
margin: 5%;
overflow: auto;
background-color: red;
}
.inner1 {
float: left;
width: 150px;
height: 150px;
margin-right: 20px;
background-color: blue;
}
.inner2 {
float: left;
width: 150px;
height: 150px;
margin-right: 20px;
background-color: blue;
}
.inner3 {
float: left;
width: 150px;
height: 150px;
background-color: blue;
}
#outer div:last-child {
margin-bottom: 0;
}
@media screen and (max-width:570px) {
.inner1, .inner2, .inner3 {
margin-bottom: 5px;
}
}
@media screen and (max-width:411px) {
.inner1, .inner2, .inner3 {
float: none;
margin: auto;
margin-bottom: 5px;
}
}
&#13;
<div id="outer">
<div class="inner1">1</div>
<div class="inner2">2</div>
<div class="inner3">3</div>
</div>
&#13;
答案 2 :(得分:1)
我建议使用从内容元素中提取网格元素的解决方案。因此,您可以更好地控制布局,并且可以更灵活地使用要放入其中的内容。
.inner
元素用作网格元素,并将其中的内容包装到.inner-content
.inner
元素提供百分比宽度和 px-max-width 。因此,元素可以在可用宽度的33.33%,但从不超过150px。.inner
元素相互包裹,占据.outer
容器宽度的33.33%。
* {
box-sizing: border-box;
}
/* flexible outer container */
.outer {
width: 90%;
height: 90%;
margin: 5%;
overflow: hidden;
background-color: red;
}
/* remove outer gutter */
.row {
margin: 0 -10px;
}
/* .inner will take care of the width */
.inner {
width: 33.33%;
max-width: 150px;
float: left;
padding: 0 10px;
}
/* .inner-content take care of the height */
.inner-content {
height: 150px;
color: #fff;
background: blue;
}
@media (max-width: 435px) {
/* this wraps .inner elements below each other and extends width */
.outer .inner {
padding: 10px 0;
width: 100%;
max-width: 100%;
float:none;
}
}
&#13;
<div class="outer">
<div class="row">
<div class="inner">
<div class="inner-content">1</div>
</div>
<div class="inner">
<div class="inner-content">2</div>
</div>
<div class="inner">
<div class="inner-content">3</div>
</div>
</div>
</div>
&#13;
答案 3 :(得分:1)
我建议使用bootstrap的技术。在内部元素的两侧都有填充,并在容器上以负边距对其进行否定。
这将需要更多标记。虽然.row和.container可以合并在同一个元素上,但由于负边距,背景颜色会溢出到左边。
.container {
background-color: green;
width: 510px;
}
.row {
font-size: 0;
margin: 0 -15px;
}
.block {
font-size: 12px;
padding: 0 15px;
display: inline-block;
}
.content {
width: 150px;
height: 150px;
background-color: red;
}
<div class="container">
<div class="row">
<div class="block">
<div class="content">
</div>
</div>
<div class="block">
<div class="content">
</div>
</div>
<div class="block">
<div class="content">
</div>
</div>
<div class="block">
<div class="content">
</div>
</div>
<div class="block">
<div class="content">
</div>
</div>
</div>
</div>
答案 4 :(得分:0)
在您的示例中,前两个div是 170px 宽(150 + 20),第三个是 150px 宽,因为它没有边距,多数民众赞成问题。
如果您认为@media完全响应并且没有从4个项目跳到1个项目,那么请避免使用@media。
你可以通过简单地向你的最后一个元素添加一个margin-right:20来解决你的问题,但是最好这样做:
.inner1, .inner2, .inner3{
float: left;
width: 150px;
height: 150px;
margin: 2px 10px; //left & right sides to half of 20px
background-color: blue;
}
因为它会将边距分成两边,使其更加对称。
用于布置不同大小的div。
如果你所有的div都可以改变大小但保持相等,它会起作用,但是如果第一个div是70而第二个和第三个是50,那么在某一点底线上总会有两个div。
答案 5 :(得分:0)
我认为我已经找到了最简单的解决方案,而不必使用媒体查询。我只是向所有字段添加了右边距,包括最后一个字段,而不是将其添加到除最终字段之外的每个字段。
然后我将所有字段包装在另一个div中并添加一个减去边距(与间隙大小相同),以便字段在它们到达容器的一侧时将换行。这是解决方案的小提琴:http://jsfiddle.net/rahg1ky3/
#outer {
width: 90%;
height: 90%;
margin: 5%;
overflow: auto;
background-color: red;
}
#inner {
margin-right: -20px;
}
.cont {
float: left;
width: 150px;
height: 150px;
margin-right: 20px;
background-color: blue;
}
<div id="outer">
<div id = "inner">
<div class="cont">1</div>
<div class="cont">2</div>
<div class="cont">3</div>
</div>
</div>