【问题标题】:Why is Flexbox creating unnecesary spacing?为什么 Flexbox 会创建不必要的间距?
【发布时间】:2019-11-20 22:36:25
【问题描述】:

所以我正在编写一个代码,我需要在使用 flex 时将卡片均匀地排成一行。但是,我在右侧有一些间距,无法找出发生这种情况的原因。我尝试检查元素,但它只是显示整个卡片向右延伸,但它这样做的背后没有真正的原因。我滚动浏览了 CSS 代码,右侧没有额外的宽度。

<section id="jobs">
    <!--Employing cards-->
    <div class="container-fluid container-fluid-shorter bg-white">

        <!--Assistant card-->

        <div class="row">
            <div class="col-md-6 col-lg-4 my-3">
                <div class="card width-37">
                    <div class="card-body d-flex align-items-center justify-content-between">
                        <h6 class="card-title font-weight-lighter pb-3">Custom units</h6>
                        <p class="card-text">
                        <h4 class="text-grey font-weight-light text-capitalize pb-3 pt-3">home page hero</h4>
                    </div>
                </div>
            </div>
            <div class="col-md-6 col-lg-4 my-3">
                <div class="card width-37">
                    <div class="card-body d-flex align-items-center justify-content-between">
                        <h5 class="card-title font-weight-lighter pb-3">Vlastní jednotky</h5>
                        <p class="card-text">
                        <h4 class="text-grey font-weight-light text-capitalize pb-3 pt-3">home page hero</h4>
                    </div>
                </div>
            </div>
            <div class="col-md-6 col-lg-4 my-3">
                <div class="card width-37">
                    <div class="card-body d-flex align-items-center justify-content-between">
                        <h5 class="card-title font-weight-lighter pb-3">Vlastní jednotky</h5>
                        <p class="card-text">
                        <h4 class="text-grey font-weight-light text-capitalize pb-3 pt-3">home page hero</h4>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <!--End of employing cards section-->
</section>

我对 CSS 所做的调整:

.width-37{
    max-width: 37.5vh;
}
.card-body{
    padding-left: 0; !important;
    padding-right: 0; !important;
}

我试图将所有项目放置在每个项目之间有小间距的行中,并且当您为不同的屏幕尺寸设置大、中、小行时,所有项目都会创建行。出于某种原因,弹性项目在每个项目的右侧做间距。它是 480 像素宽和 180 像素高。我希望它是 180 x 180 像素,所以高度和宽度相同。有人知道为什么会这样吗?

【问题讨论】:

  • 请提供MCVE
  • 你为什么使用 37.5vh?
  • 当然会做饥饿之星!
  • Zim 的完美宽度。
  • 您将卡片的宽度设置为视口高度的 37.5%。我不确定你想这样做。如果高度非常小,一切都会开始溢出。列类提供的宽度有什么问题?卡片是否太宽?

标签: html css bootstrap-4


【解决方案1】:
.width-37{
    max-width: 37.5vh;
}

这导致右侧的间距。此外,!important

之前不应有 ;

【讨论】:

  • 我已将宽度更改为“37vh”并删除了“;”之前!重要。仍然没有结果,但感谢您的尝试!
  • @TH3R34LS3V3NF1V3S1XN1N3 max-widthwidth 不是这里的问题。
【解决方案2】:

这是由于块级元素的呈现方式,而不是 Flexbox 特定的问题。块级元素总是占据包含元素的整个宽度。如果你在块级元素上设置了宽度,并且它没有填充包含元素,剩​​余的空间将被margin填充。

示例

div {
  min-height: 24px;
}

div:nth-child( 1 ) {
  width: 100px;
  background-color: rebeccapurple;
}

div:nth-child( 2 ) {
  max-width: 200px;
  background-color: gold;
}

div:nth-child( 3 ) {
  width: 20vw;
  background-color: silver;
}
<div></div>
<div></div>
<div></div>

默认的内容流向是从左到右,以及为什么元素是向左。每个元素右侧的所有空间都是边距。这就是 Bootstrap 列元素内部发生的情况。

【讨论】:

  • 就是这样!谢谢!
【解决方案3】:

这就是原因 *行是列的包装器。每列都有水平填充(称为装订线),用于控制它们之间的空间。然后在具有负边距的行上抵消此填充。这样,列中的所有内容在视觉上都在左侧对齐。 Documentation here

为了移除排水沟上的填充,您可以将类 no-gutters 添加到您的行中。

【讨论】:

  • 我不确定这是一个排水沟问题。见this JSFiddle
  • 我刚刚检查过了。将 .no-gutters 添加到父行会删除每个子列两侧的 15px。
  • OP 限制了一列的块级内容的大小,从而在该元素的右侧创建大量空间(边距)。删除排水沟会删除该空间的一小部分,并且不能解释为什么所有空间都出现在目标元素的右侧 - 这是最初的问题。
猜你喜欢
  • 2012-08-13
  • 1970-01-01
  • 1970-01-01
  • 2020-09-09
  • 2021-10-23
  • 1970-01-01
  • 1970-01-01
  • 2019-10-26
  • 1970-01-01
相关资源
最近更新 更多