11

我有一个带有一堆自动流动网格项目的 CSS 网格。有时网格项目是一个 1 x 1 轨道,有时它们是 2 x 2 轨道,所以我从源顺序不知道哪些项目将在网格中的某些位置。这意味着样式与:nth-child()将不可靠。

我想为某些网格列(主要是最后一列)中的项目添加样式。是否有一个 CSS 选择器可以让我设置这些项目的样式?

例如,在这个演示中,我将如何设置框 3、5 和 9 的样式(此处为 codepen)?

.grid-container {
        display:grid;
        grid-template-columns: 1fr 1fr 1fr;
        grid-column-gap: 1em;
        grid-row-gap: 1em;
    }

    .grid-item {
        background-color: #aea;
        text-align:center;
        font-size:3em;
        min-height:3em;
        line-height: 3em;
    }

    .grid-item.double {
        grid-column-start: span 2;
        grid-row-start: span 2;
    }
<body>
<div class="grid-container">

    <div class="grid-item">1</div>
    <div class="grid-item">2</div>
    <div class="grid-item">3</div>
    <div class="grid-item">4</div>
    <div class="grid-item double">5</div>
    <div class="grid-item">6</div>
    <div class="grid-item">7</div>
    <div class="grid-item">8</div>
    <div class="grid-item">9</div>
    <div class="grid-item">10</div>
</div>
</body>

编辑:代码最终会出现在 CMS 中,并且将来可能会发生变化。

4

2 回答 2

5

当使用 CSS 渲染网格时,没有用于匹配某些网格位置中的元素的选择器。Selectors 4 中引入的网格结构选择器仅匹配基于以文档语义表达的网格结构的元素,例如 HTML 中的表格(这也意味着当它们是使用任何一种呈现的非表格元素时,它们无法匹配基于网格语义的元素display: table-*) .

flexbox 也存在类似的问题:没有选择器可以根据它们的布局来匹配特定的 flex 项目。一般来说,没有选择器根据 CSS 管理的布局匹配元素。选择器仅根据文档语义(源顺序等)匹配元素。

要设置所需元素的样式,您将需要使用其他方式来识别它们,例如客户端脚本,或一些根据网格位置用类标记元素的后端逻辑(如果在后端配置了网格布局) . 你如何做到这一点超出了这个问题的范围。

于 2017-05-24T15:23:31.447 回答
0

我最近发布了一个 NPM 包,self-aware-grid用于帮助解决这类问题。它确定哪些元素位于哪一列和哪一行,并相应地应用 CSS 类,以便您可以为这些元素设置您认为合适的样式。

我没有在具有不同大小的孩子的网格上测试它,所以我希望除非出于某种偶然的意外,否则只支持相同大小的孩子。

如果您想尝试一下:

于 2021-08-31T16:51:04.187 回答