【问题标题】:Why am I getting random spaces between the image grid?为什么我在图像网格之间出现随机空间?
【发布时间】:2018-12-02 02:38:03
【问题描述】:

在阅读了一些帖子之后,我设法使用“flex”类来删除随机空格。但我什么都试过了,现在我厌倦了。我无法摆脱这些随机空间。谁能指出这里面出了什么问题?

.jumbotron {
  margin-top: 80px;
  padding-left: 40px;
  background: #0d2d60;
  color: white;
}

.image {
  width: 100%;
  height: 250px;
  background-size: cover;
  background-position: center;
}

.image1 {
  background-image: url("https://source.unsplash.com/MYlvxeye9J0");
}

.image2 {
  background-image: url("https://source.unsplash.com/KxCq-xveKcU");
}

.image3 {
  background-image: url("https://source.unsplash.com/CKQG961UaWo");
}

.image4 {
  background-image: url("https://source.unsplash.com/yySQipYW6Y4");
}

.image5 {
  background-image: url("https://source.unsplash.com/ZtTkB3LmlNw");
}

.image6 {
  background-image: url("https://source.unsplash.com/NdBsn0WQadw");
}

.image7 {
  background-image: url("https://source.unsplash.com/lIa03ti94ec");
}

.image8 {
  background-image: url("https://source.unsplash.com/k5wF1D_1rjo");
}

.image9 {
  background-image: url("https://source.unsplash.com/Jd8hr75moLc");
}

body {
  background: #081935;
}

.navbar {
  background: #0d2d60;
  color: white;
  border-bottom: 0;
}

.flex {
  display: flex;
  flex-wrap: wrap;
}

<nav class="navbar navbar-default navbar-fixed-top">
  <div class="container">
    <div class="navbar-header">
      <button aria-expanded="false" class="navbar-toggle collapsed" data-target="#bs-example-navbar-collapse-1" data-toggle="collapse" type="button"><span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span></button> <a class="navbar-brand" href="#"><span aria-hidden="true" class="glyphicon glyphicon-camera"></span> IMGS</a>
    </div>
    <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
      <ul class="nav navbar-nav">
        <li>
          <a href="#">About Us</a>
        </li>
        <li>
          <a href="#">Contact</a>
        </li>
      </ul>
      <ul class="nav navbar-nav navbar-right">
        <li>
          <a href="#">Sign Up</a>
        </li>
        <li>
          <a href="#">Login</a>
        </li>
      </ul>
    </div>
  </div>
</nav>
<div class="jumbotron container">
  <h1><span class="glyphicon glyphicon-camera"></span> The Image Gallery</h1>
  <p>A bunch of beautiful images that I didn't take</p>
</div>
<div class="container">
  <div class="row flex">
    <div class="col-lg-4 col-md-4 col-sm-6">
      <div class="thumbnail">
        <div class="image image1"></div>
      </div>
    </div>
    <div class="col-lg-4 col-md-4 col-sm-6">
      <div class="thumbnail">
        <div class="image image2"></div>
      </div>
    </div>
    <div class="col-lg-4 col-md-4 col-sm-6">
      <div class="thumbnail">
        <div class="image image3"></div>
      </div>
    </div>
  </div>
  <div class="row flex">
    <div class="col-lg-4 col-md-4 col-sm-6">
      <div class="thumbnail">
        <div class="image image4"></div>
      </div>
    </div>
    <div class="col-lg-4 col-md-4 col-sm-6">
      <div class="thumbnail">
        <div class="image image5"></div>
      </div>
    </div>
    <div class="col-lg-4 col-md-4 col-sm-6">
      <div class="thumbnail">
        <div class="image image6"></div>
      </div>
    </div>
  </div>
  <div class="row flex">
    <div class="col-lg-4 col-md-4 col-sm-6">
      <div class="thumbnail">
        <div class="image image7"></div>
      </div>
    </div>
    <div class="col-lg-4 col-md-4 col-sm-6">
      <div class="thumbnail">
        <div class="image image8"></div>
      </div>
    </div>
    <div class="col-lg-4 col-md-4 col-sm-6">
      <div class="thumbnail">
        <div class="image image9"></div>
      </div>
    </div>
  </div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js">
</script> 
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js">
</script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">
</script>

Random Space between the Images

On screen size sm and x-sm

Works perfectly If the sceen size is large

【问题讨论】:

  • 我假设您的样式表还不止这些。我还假设您在某个地方为缩略图、col-lg-4、col-md-4 或 col-sm-6 类设置了边距。图片之间的间距是样式表中设置的边距。
  • 我绝对确定我没有为任何图像添加额外的边距,并且所有使用的样式都在样式标签下。我是 bootstrap 新手,我几乎一整天都在做这件事,但我仍然无法做到这一点。
  • 不仅仅是图片。也许他们的父容器有边距或填充集?识别这些东西并不总是那么容易。 CSS 可能很困难,但底线是你有多余的边距或填充 somewhere.
  • @emsimpson92 我现在已经删除了引导样式表本身中任何额外的填充或边距。有一个 15px 的填充,但我也将其设置为零。但现在边界仍然相互接触,没有任何变化。

标签: html css twitter-bootstrap-3 flexbox


【解决方案1】:

好的,经过更多研究,我找到了解决此问题的确切方法。 @emsimpson 这与填充或边距无关。问题出在 bootsrap 12 容器网格上。 正如@August 所提到的:小尺寸(sm)的代码存在问题:col-sm-6 有3个div,它们的总和应该是12,但是3x6 = 18,这就是为什么第三张图片独立运行的原因。 但我也找到了解决方案。 Flex 解决了这个问题。

.flex
{
  display: flex;
  flex-wrap: wrap;
}

如您所见,我使用了 flex 类,但它不起作用。所以我用类 flex 将我的所有列嵌套在一行下,它解决了这个问题。 Bootstrap 会根据累积的大小知道何时将列移动到下一行。

<div class="container">
            <div class="row flex">
                <div class="col-lg-4 col-md-4 col-sm-6 col-xs-12">
                    <div class="thumbnail">
                        <div class="image image1"></div>
                    </div>
                </div>
                <div class="col-lg-4 col-md-4 col-sm-6 col-xs-12">
                    <div class="thumbnail">
                        <div class="image image2"></div>
                    </div>
                </div>
                <div class="col-lg-4 col-md-4 col-sm-6 col-xs-12">
                    <div class="thumbnail">
                        <div class="image image3"></div>        
                    </div>
                </div>
            <!-- </div> -->
    <!--        <div class="row flex"> -->
                <div class="col-lg-4 col-md-4 col-sm-6 col-xs-12">
                    <div class="thumbnail">
                        <div class="image image4"></div>
                    </div>
                </div>
                <div class="col-lg-4 col-md-4 col-sm-6 col-xs-12">
                    <div class="thumbnail">
                        <div class="image image5"></div>                                
                    </div>
                </div>
                <div class="col-lg-4 col-md-4 col-sm-6 col-xs-12">
                    <div class="thumbnail">
                        <div class="image image6"></div>                            
                    </div>
                </div>
            <!-- </div> -->
        <!--    <div class="row flex"> -->
                <div class="col-lg-4 col-md-4 col-sm-6 col-xs-12">
                    <div class="thumbnail">
                        <div class="image image7"></div>
                    </div>
                </div>
                <div class="col-lg-4 col-md-4 col-sm-6 col-xs-12">
                    <div class="thumbnail">
                        <div class="image image8"></div>                                
                    </div>
                </div>
                <div class="col-lg-4 col-md-4 col-sm-6 col-xs-12">
                    <div class="thumbnail">
                        <div class="image image9"></div>                            
                    </div>
                </div>
        <!--    </div> -->
        </div>
    </div>

【讨论】:

    【解决方案2】:

    我发现了几个问题:

    1) 不相关,加载 jquery 两次

    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js">
    </script> 
    [...]
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">
    

    2)小尺寸(sm)的代码有问题: 有 3 个带有 col-sm-6 的 div,它们的总和应该是 12 但 3x6 = 18,这就是为什么第三个图像在自己的行上。

    3) 对于宽度小于 768px 左右的分辨率,col-md-* 被应用,我认为如果你需要针对这种情况,你需要 xs cols。

    文档中的更多信息:Boostrap 3 - Grid

    【讨论】:

    • 效果很好。太感谢了。这是一个新手错误,但我知道,因为我是新手。你的答案正好在正确的地方击中目标。
    • @AjayKudva 我很高兴能帮上忙。如果您认为答案有用且合适,您也可以投票赞成。
    • 我真的很想为您的回答投票,这对我帮助很大。但可悲的是,这表明我的声望不到 15。但是你让我的脸上露出了笑容。谢谢。
    • @AjayKudva 你的评论也让我笑了;)如果你想提高你的声誉,你可以在未来投票;)
    【解决方案3】:

    我使用引导样板将您的代码放在 jsfiddle 中,并且我假设您想要删除图像之间的填充?

    默认情况下,Boostrap 的 .col- 类具有 padding-left 和 padding-right 样式。

    如果你将它添加到你的 CSS 中,它会移除填充:

     .col-lg-4, .col-md-4, .col-sm-6 {
       padding: 0px;
     }
    

    但是,这将改变整个网站的列填充。不建议为列设置全局样式。我的建议是创建一个类似“img-no-padding”的 CSS 类并将该类添加到这些列中。

    Here is a jsfiddle demonstrating this.

    【讨论】:

    • 感谢您的宝贵努力,但我得到了@August 所描绘的解决方案。不是填充问题,而是网格容器中的粗心计算错误。