如何包装项目以在最后一行中始终至少有 2 个项目?

How to wrap items to always have min 2 items in the last row?

提问人:Stélios Filippidis 提问时间:4/13/2023 最后编辑:j08691Stélios Filippidis 更新时间:4/18/2023 访问量:49

问:

图片的问题

当然,我的客户希望以响应式方式在他的网站上列出车辆。但是所有已知的技术(flex、grid)都会将最后一项包装到下一行。

我尝试用图片做什么

但在英雄身上,这是极其丑陋的。客户希望:

  • 每行最多 5 个项目
  • 每行最少 2 个项目

棘手的部分是项目的数量必须是动态的。通常在 4 到 6 辆车之间

我知道我可以选择像这样的最后两个项目

.item:nth-last-child(-n+2) {
  order: 2; /* set order to 2 for the last two items */
}

但我不能强迫他们包装。有什么想法吗?

HTML CSS scss-lint

评论

0赞 Miss Skooter 4/13/2023
请将您的实际尝试作为最小的可重现示例发布。说明您在实现所需行为时面临哪些问题,以便我们帮助您调试和改进它
0赞 jcobo1 4/14/2023
如果没有 Stackblitz 或您的代码上的可重现示例,就不容易理解您已经尝试过的内容,但也许您可以通过 css 的代码 instea 来实现相同的结果,将最后 2 个元素始终放在单独的 div 上。

答:

0赞 Stélios Filippidis 4/18/2023 #1

事实证明,我必须事先获取项目数并将类注入列表中以控制显示

<ul class="{{ 'SENARIO_' + numberOfItem + '_ITEMS' }}">

...

.SENARIO_4_ITEMS {
    .container {
        width: 268px;
    }
    @media #{$larger-down} {
        a {
            flex-basis: 50%;
            display: flex;
            justify-content: center;
            .container {
                width: 268px;                   
            }
        }
    }
} 
.SENARIO_5_ITEMS {
    .container {
        width: 270px;
    }
    @media #{$xxlarge-down} {
        a {
            flex-basis: 33%;
            display: flex;
            justify-content: center;
            .container {
                width: 300px;                   
            }
        }
    }
}
.SENARIO_6_ITEMS {
    a {
        flex-basis: 33%;
        display: flex;
        justify-content: center;
        .container {
            width: 300px;                   
        }
    }
    @media #{$xxlarge-down} {
        .container {
            width: 300px;                   
        }
    }
}