html - 为什么 Flex box 从网格中堆叠元素

标签 html css flexbox

我正在使用 masonry.js创建图片网格。

我的html是这样的:

<div class="new-starter-grid">
    <div class="new-starter-grid-item"></div>
    <div class="new-starter-grid-item"></div>
    <div class="new-starter-grid-item"></div>
    <div class="new-starter-grid-item"></div>
    <div class="new-starter-grid-item"></div>
    <div class="new-starter-grid-item"></div>
    <div class="new-starter-grid-item"></div>
    <div class="new-starter-grid-item"></div>
    <div class="new-starter-grid-item"></div>
    <div class="new-starter-grid-item"></div>
    <div class="new-starter-grid-item"></div>
    <div class="new-starter-grid-item"></div>
    <div class="new-starter-grid-item"></div>
    <div class="new-starter-grid-item"></div>
    <div class="new-starter-grid-item"></div>
    <div class="new-starter-grid-item"></div>
</div>

设置这些元素样式的 css 如下:

.new-starter-grid
{
    top: 20%;
    max-width: 60%;
}

.new-starter-grid-item
{
    float: left;
    width: 120px;
    height: 120px;
    border-radius: 3px;
    background: #D26;
    margin-bottom: 10px;
}

这非常有效,并创建了一个如下所示的网格:

Grid

我现在正尝试将网格包裹在一个容器中(这也会使屏幕变黑)并将其显示在中心。

为此,我只需用另一个 div 包裹网格元素,如下所示:

<div class="new-starter-modal">
    <div class="new-starter-grid">
        <div class="new-starter-grid-item"></div>
        <div class="new-starter-grid-item"></div>
        <div class="new-starter-grid-item"></div>
        <div class="new-starter-grid-item"></div>
        <div class="new-starter-grid-item"></div>
        <div class="new-starter-grid-item"></div>
        <div class="new-starter-grid-item"></div>
        <div class="new-starter-grid-item"></div>
        <div class="new-starter-grid-item"></div>
        <div class="new-starter-grid-item"></div>
        <div class="new-starter-grid-item"></div>
        <div class="new-starter-grid-item"></div>
        <div class="new-starter-grid-item"></div>
        <div class="new-starter-grid-item"></div>
        <div class="new-starter-grid-item"></div>
        <div class="new-starter-grid-item"></div>
    </div>
</div>

然后我使用以下样式尝试将新 div 中的网格居中:

.new-starter-modal
{
    position: fixed;
    display: flex;
    justify-content: center;
    left: 0;
    top: 0;
    width: 100%;
    height: 100%;
    background-color: rgba(0, 0, 0, 0.9);
    transition: visibility 0s linear 0.25s, opacity 0.25s 0s, transform 0.25s;
    z-index: 9999 !important; /* To make sure no pesky components decide to go on top of the this modal */
}

网格在技术上是居中的,但它最终会像这样堆叠所有元素:

Flex box grid

我显然不希望这种情况发生,并且理想情况下希望网格保持与图片一相同,只是水平居中(这就是我使用 flex box 的原因)。

有人可以向我解释为什么会发生这种情况,以及我该如何解决它吗?

最佳答案

尝试在 new-starter-grid 上将 max-width 更改为 width。那,或者添加 flex:1 与最大宽度一起工作。否则,您的网格元素没有指定它应该有多宽并且可能导致折叠。 此外,在 .new-starter-grid-item 上使用 float 似乎会影响砌体功能。

关于html - 为什么 Flex box 从网格中堆叠元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53734086/

相关文章:

javascript - 使用 jQuery 清除表单历史记录

svg - 如果容器为 display flex,为什么 SVG 宽度为 0?

javascript - 在 Angularjs 中完成页面加载后调用函数

html - Bootstrap - 无法更改 CSS 中的导航栏标题

javascript - 选择一个 div 内的第一个 div,但前提是有 10 个 div

html - Flexbox 填充剩余窗口高度不起作用

html - 3 图像布局 - 中心图像更大和更高的 z-index

Javascript/AJAX 汽车品牌/型号形式

javascript - HTML 不显示已解码的 %3C?

javascript - GoogleSearch 如何预渲染图像?