【问题标题】:How do I delete the left/right padding of row start/end?如何删除行开始/结束的左/右填充?
【发布时间】:2018-12-04 17:58:48
【问题描述】:

我有一排特定大小的卡片,它们之间有一个排水沟。问题是,排水沟也适用于每张卡片的开始和结束行的两侧。我需要开始和结束都与父容器的边框对齐。我找不到合适的词来查询这个。我得到的最接近的是生成静态网格并为第一个孩子添加 css 的人。我的网格理论上可以是 0-99999999 结果之间的任何地方。我需要每行中的第一个(左填充)和最后一个(右填充)没有相应的填充。

示例代码

<div class="container">
    <div class="row">
        <div class="col-md-4" ng-repeat="tile in tiles">
            <div class="card mb-4 box-shadow">
                <img ng-src=" {{ tile.image }} ">
                <p>{{ tile.title }}</p>
           </div>
        </div>  
    </div> 
</div>

结果

| [card] [card] [card] |
| [card] [card] [card] |

期望的结果

|[card] [card] [card]|
|[card] [card] [card]|

【问题讨论】:

  • 我猜是它的 padding 而不是 margin,你需要在 CSS 中为 row 类的 left 和 right 设置 padding:0px
  • 在容器内排 .. 并使用容器流体
  • 默认情况下,列间距为 30px,列之间为 15px,两端为 一半。你希望开始和结束都是 0px?
  • @TemaniAfif 这不会删除连续最后一个项目的边距,它只会改变容器的行为。
  • @RudyvanSloten - Bootstrap 中列周围的间距(gutter)是使用 padding 而不是边距创建的。这就是为什么说“删除边距”不清楚的原因。列也应该放在row,而不是container

标签: css bootstrap-4


【解决方案1】:

了解如何创建网格间距。来自 Bootstrap 文档:

"行是列的包装。每列都有水平填充 (称为排水沟)用于控制它们之间的空间。这个填充 然后在具有负边距的行上抵消..."

因此,将容器左填充设置为 0,然后像这样调整列填充...

.col-md-4:nth-child(3n) {
    padding-right: 0;
}

@media (max-width:768px) {
    .col-md-4 {
        padding-right: 0;
    }
}

演示:https://www.codeply.com/go/dvPRr13Wev

<div class="container pl-0">
    <div class="row">
        <div class="col-md-4" ng-repeat="tile in tiles">
            <div class="card mb-4 box-shadow">
                <img src="//placehold.it/500x200">
            </div>
        </div>
        ...
    </div>
</div>

【讨论】:

  • 不需要和第n个孩子一起玩。将装订线设置为两侧的负边距是解决方法。
  • 然后向我们展示并回答您自己的问题。它行不通。它会溢出并导致水平滚动条,否则右侧仍有空格。
  • 如果您向上滚动,您可以看到我做到了,但是在接受我自己的答案时有一个等待计时器。它已经有效,您可以在 zalando.nl 上查看任何产品网格视图,这是我获得代码的地方。父容器(Bootstrap 类 .container 不是浏览器宽度)的左右两侧已经有一个空格,因为该站点不是浏览器的全宽,除非是移动设备(在这种情况下卡片垂直堆叠)
【解决方案2】:

如果总是连续出现三张卡片,您可以使用 CSS 轻松定位第一张和第三张卡片。但是,如果您有一个容器,您可以在同一个容器中放置许多卡片,并且行之间没有分隔线,那么您的 CSS 就必须稍微复杂一些。

// This selector targets every third card starting with the first card.
.card:nth-child(3n-2) {
  margin-left: 0;
}

// This selector targets every third card starting with the third card.
.card:nth-child(3n) {
  margin-right: 0;
}

Here's a good resource explaining the :nth-child() pseudo selector in more detail.

【讨论】:

  • 它应该应用于上层
  • 不,窗口变薄时每行的卡片数会减少。
【解决方案3】:

添加边距:0 -15px 0 -15px;容器是解决方案。这就是流行的服装店 Zalando 解决这个问题的方式。

【讨论】:

  • @Zim 的回答似乎更合适,使用像素确实不利于网站的响应性。
  • @AIMEURAmin Zim 的答案没有达到预期的结果,所以我不能凭良心接受它作为当前答案的答案。当有人发布一个改进的工作答案时,我很乐意将其标记为这样。此外,gutter 是一个 30px 的值,因此这基本上使 Bootstrap 对响应性不利。 -15 只是抵消了这个硬编码的 30px 值。
猜你喜欢
  • 1970-01-01
  • 2021-03-19
  • 2017-04-18
  • 2019-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多