【问题标题】:Bootstrap grid: vertical alignment issue in columns引导网格:列中的垂直对齐问题
【发布时间】:2020-09-30 22:43:48
【问题描述】:

我在我目前正在开发的网站的页脚中使用了 Bootstrap 的网格系统。

我希望有 2 列彼此相邻(因此我对它们中的每一列都使用 col-6 类),但是由于某些元素太大,文本会换行到第二行并且列会增长垂直有足够的地方给他们。 这使得另一列也垂直增长,并在它和下一个元素之间放置一个空格。

What is happening

What I want

我看到了一个类似的问题,该问题已解决,但解决方案是将右列的元素和左列的下一行元素放在同一行中,这解决了问题,但这不是一个可行的选择当我处理相当多的条目时。

Mentioned post

这是这些元素的 HTML:

<div class="col-lg-5 col-sm-12">
<p class="footer-title">NOS SOCIÉTÉS</p>
<div class="row no-gutters">

    <div class="col-lg-6 col-sm-12"><p><a href="#">Holding Stihlé Frères (Siège)</a><span> - Turckheim</span></p></div>
    <div class="col-lg-6 col-sm-12"><p><a href="#">Stihlé SAV Centre</a><span> - Logelbach</span></p></div>
    <div class="col-lg-6 col-sm-12"><p><a href="#">Stihlé Frères 68</a><span> - Wihr-au-Val</span></p></div>
    <div class="col-lg-6 col-sm-12"><p><a href="#">Stihlé SAV Sud</a><span> - Sausheim</span></p></div>
    <div class="col-lg-6 col-sm-12"><p><a href="#">Jaenicke</a><span> - Guebwiller</span></p></div>
    <div class="col-lg-6 col-sm-12"><p><a href="#">Stihlé SAV Nord</a><span> - Illkirch-Graffenstaden</span></p></div>
    <div class="col-lg-6 col-sm-12"><p><a href="#">René Graf</a><span> - Colmar</span></p></div>
    <div class="col-lg-6 col-sm-12"><p><a href="#">Stihlé Accessibilité</a><span> - Turckheim</span></p></div>
    <div class="col-lg-6 col-sm-12"><p><a href="#">Graf Services Plus</a><span> - Colmar</span></p></div>
    <div class="col-lg-6 col-sm-12"><p><a href="#">Alsace Home Service</a><span> - Colmar / Sausheim / Vieux-Thann / Illkirch-Graffenstaden</span></p></div>
        <div class="col-lg-6 col-sm-12"><p><a href="#">Philippe</a><span> - Sainte-Marie-aux-Mines</span></p></div>
    <div class="col-lg-6 col-sm-12"><p><a href="#">Vivale</a><span> - Turckheim</span></p></div>
    <div class="col-lg-6 col-sm-12"><p><a href="#">Stihlé Sud Alsace</a><span> - Hésingue</span></p></div>
    <div class="col-lg-6 col-sm-12"><p><a href="#">Stihlé Frères 67</a><span> - Illkirch-Graffenstaden</span></p></div>

</div>

如果您需要任何其他信息,请随时询问,我可能忘记了一些有用的信息。

【问题讨论】:

  • 欢迎来到 StackOverflow。我有两个问题 1:为什么不能只使用 2 列?如果我们了解您想要做什么的原因,它可以帮助我们为您提供合适的解决方案。 2:您可以控制项目出现的顺序,例如它们会始终按此顺序输出(即 column1、column2、column1、column2)还是可以更改?
  • 您好,感谢您的回答!我没有展示它也没有谈论它,但是这两列并不是我页脚中唯一的。我有 4 个专栏,我在帖子中谈到的专栏是第二个。在这一列中,我创建了另一行并通过放置 col-6 来创建另外 2 列,如您所见。我不能把 4 列的全部代码放在这里,但是如果你需要它,我会用它来回复我的帖子。对于你的第二个问题,不,我可以更改顺序的唯一方法是重新排列我自己的 HTML
  • 据我所知,如果项目具有不同的高度,没有其他方法可以从左到右显示它们以看起来像图像,除非您要寻求更复杂的解决方案,例如砖石.js。我可以给你一个可以达到你想要的外观的答案,但它们的顺序会不同 - 它会从 col1、col2、col1、col2 变为 col1、col1、col1,直到一半,然后是 col2、col2 等. 如果您以不同的顺序需要它们,则需要重新排列 HTML。这样好吗?
  • 我被告知要尽可能少地使用外部资源,所以我怀疑在这里使用 masonry.js 是否适合我的导师,但我一定会在我的下一个项目中牢记这一点: ) 另一方面,我很想看到您的解决方案重新安排订单,我对这部分没有任何限制,所以如果可行,那就完美了。
  • 好的,我稍后会发布一个答案...我现在有一些工作要做:)

标签: html wordpress twitter-bootstrap bootstrap-grid


【解决方案1】:

如果可以更改 HTML 项目的顺序(您可以这样做),那么有两种方法可以做到这一点。

1.使用 2 列而不是多列

创建 2 列,将一半的项目放在第一列,一半放在第二列。这就是您链接到的答案的方式,并且您说您不能这样做,但如果您想使用网格,这是唯一的方法。

运行 sn-p 以查看它的实际效果:(注意:我已将 'col-sm-12' 更改为 col-sm-6,以便您可以运行sn-p看看效果)

.row.no-gutters p { background:#eee; }
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" rel="stylesheet" />

<p class="footer-title">NOS SOCIÉTÉS</p>
<div class="row no-gutters">
    <div class="col-lg-6 col-sm-6">
        <p><a href="#">Holding Stihlé Frères (Siège)</a><span> - Turckheim</span></p>
        <p><a href="#">Stihlé SAV Centre</a><span> - Logelbach</span></p>
        <p><a href="#">Stihlé Frères 68</a><span> - Wihr-au-Val</span></p>
        <p><a href="#">Stihlé SAV Sud</a><span> - Sausheim</span></p>
        <p><a href="#">Jaenicke</a><span> - Guebwiller</span></p>
        <p><a href="#">Stihlé SAV Nord</a><span> - Illkirch-Graffenstaden</span></p>
        <p><a href="#">René Graf</a><span> - Colmar</span></p>
    </div>
    <div class="col-lg-6 col-sm-6">
        <p><a href="#">Stihlé Accessibilité</a><span> - Turckheim</span></p>
        <p><a href="#">Graf Services Plus</a><span> - Colmar</span></p>
        <p><a href="#">Alsace Home Service</a><span> - Colmar / Sausheim / Vieux-Thann / Illkirch-Graffenstaden</span></p>
        <p><a href="#">Philippe</a><span> - Sainte-Marie-aux-Mines</span></p>
        <p><a href="#">Vivale</a><span> - Turckheim</span></p>
        <p><a href="#">Stihlé Sud Alsace</a><span> - Hésingue</span></p>
        <p><a href="#">Stihlé Frères 67</a><span> - Illkirch-Graffenstaden</span></p>
    </div>
</div>

2。使用 CSS 列。

将所有项目放在一个 div 中,并将以下 CSS 添加到该 div 的类中。

此 CSS 将在 column-count 的列数中显示内容(即此处为 2):

-webkit-column-count: 2;
-moz-column-count: 2;
column-count: 2;

这会设置列之间的间隙 - 您使用的是 no-gutter,所以我在这里将其设置为 0。

-webkit-column-gap: 0;
-moz-column-gap: 0;
 column-gap: 0;

最后,这设置了列的最小宽度。在这里,我们将其设置为 200。

-webkit-column-width: 200px;
-moz-column-width: 200px;
column-width: 200px;

这将创建 2 列,而容器至少为 400 像素(即 2 列 x 200 像素)。如果容器小于 400 像素,则它不能再容纳 2 列,因此它将在单个列中显示所有内容。

运行 sn-p 以查看它的实际效果:

/* Just for the demo */
.mycolumns p {background:#eee;}
.mycolumns {
    /* specify number of columns */
    -webkit-column-count: 2;
    -moz-column-count: 2;
    column-count: 2;

    /* specify min width for columns */
    -webkit-column-width: 200px;
    -moz-column-width: 200px;
    column-width: 200px;

    /* specify the gap between columns */
    -webkit-column-gap: 0;
    -moz-column-gap: 0;
     column-gap: 0;
}
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" rel="stylesheet" />

    <p class="footer-title">NOS SOCIÉTÉS</p>
    <div class="mycolumns">
        <p><a href="#">Holding Stihlé Frères (Siège)</a><span> - Turckheim</span></p>
        <p><a href="#">Stihlé SAV Centre</a><span> - Logelbach</span></p>
        <p><a href="#">Stihlé Frères 68</a><span> - Wihr-au-Val</span></p>
        <p><a href="#">Stihlé SAV Sud</a><span> - Sausheim</span></p>
        <p><a href="#">Jaenicke</a><span> - Guebwiller</span></p>
        <p><a href="#">Stihlé SAV Nord</a><span> - Illkirch-Graffenstaden</span></p>
        <p><a href="#">René Graf</a><span> - Colmar</span></p>
        <p><a href="#">Stihlé Accessibilité</a><span> - Turckheim</span></p>
        <p><a href="#">Graf Services Plus</a><span> - Colmar</span></p>
        <p><a href="#">Alsace Home Service</a><span> - Colmar / Sausheim / Vieux-Thann / Illkirch-Graffenstaden</span></p>
        <p><a href="#">Philippe</a><span> - Sainte-Marie-aux-Mines</span></p>
        <p><a href="#">Vivale</a><span> - Turckheim</span></p>
        <p><a href="#">Stihlé Sud Alsace</a><span> - Hésingue</span></p>
        <p><a href="#">Stihlé Frères 67</a><span> - Illkirch-Graffenstaden</span></p>
    </div>

请注意,无论您如何执行此操作,都需要更改项目的顺序以适合。

如果不了解您正在经历的差距,就无法轻松实现以可变高度项目“横向和向下”显示它们(即 col 1、col 2、col 1、col 2 等)。它们必须“向下和交叉”显示(即先填充第 1 列,然后填充第 2 列)以克服间隙。

【讨论】:

  • 再次您好,非常感谢您的详细回答。现在我无法在真实条件下测试你的解决方案,但我明天会测试它们。我几乎从项目开始就一直被这个问题困扰,所以我真的很高兴你能帮助我。一旦我尝试过,我会让你知道它是如何实现的 :)
  • 嘿,我想让你知道我现在有了我想要的视觉效果,非常感谢!我使用了第一个解决方案
猜你喜欢
  • 2016-02-28
  • 1970-01-01
  • 2019-08-11
  • 1970-01-01
  • 2018-11-17
  • 2016-12-31
  • 1970-01-01
  • 1970-01-01
  • 2011-02-26
相关资源
最近更新 更多