包装它们之间有间隙的div

时间:2017-08-16 11:25:17

标签: html css

当浏览器窗口变小时,我想要包装到下一行的div。我还希望在div之间放置保证金,以便它们之间存在差距。我遇到的问题是,如果浏览器设置为特定大小,则中心div上的边距会导致div错误地换行。在一定的大小,你有一个div下面的2个div。请参阅下面的屏幕截图作为示例和这个小提琴:http://jsfiddle.net/uhh2jwe2/(更改窗口的宽度)

这确实需要是动态的,因为它将是用于布置不同大小的div的框架解决方案。父div将与示例类似。任何帮助都会很棒

enter image description here



<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;
&#13;
&#13;

6 个答案:

答案 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;
    }
}

&#13;
&#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;
}

#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;
&#13;
&#13;

答案 2 :(得分:1)

我建议使用从内容元素中提取网格元素的解决方案。因此,您可以更好地控制布局,并且可以更灵活地使用要放入其中的内容。

  • 将您的.inner元素用作网格元素,并将其中的内容包装到.inner-content
  • 将所有内部包裹成一排以摆脱外沟
  • .inner元素提供百分比宽度 px-max-width 。因此,元素可以在可用宽度的33.33%,但从不超过150px。
  • 我为小屏幕添加了一些调整,因此.inner元素相互包裹,占据.outer容器宽度的33.33%。
  • 检查代码:http://jsfiddle.net/uhh2jwe2/5/

&#13;
&#13;
* {
  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;
&#13;
&#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>