javascript - CSS - 选择器以最大顺序定位元素?

标签 javascript html css

首先,我知道这可以通过 JS 完成(目前已经实现了这种方法),但如果可能的话我更愿意使用原生 CSS。更少的 JS、更少的 DOM 访问等等。

长话短说

是否有 CSS 选择器可以定位具有特定 CSS 属性的元素?更具体地说,以 greatest order 属性为目标的元素?

有点像...

el:greatest(property:order) {...}

设置

我有一个列表,比如...

<div class="list-container">
    <ul class="list">
        <li style="order: 0;">One</li>
        <li style="order: 1;">two</li>
        <li style="order: 2;">three</li>
        ...
        <li style="order: n;">Last</li>
    </ul>
</div>

这用作无限滚动器,因此整个列表 (ul) 在容器内滚动。细节并不是特别重要,但基本上列表项的数量是恒定的,并且会随着用户滚动而被回收。

澄清:即使列表项的数量是恒定的,但最大订单数没有限制。如果初始订单是 order=0, 1, 2, 3(四项列表),则 0->41->52->6 等。一次仅更改一个顺序 - 大于所有其他顺序(列表末尾)或小于所有其他顺序(列表开头)。

我通过将列表显示为 flex-box 并以编程方式更改列表项的顺序来完成此回收。

更相关的 CSS 是...

.list-container {
    overflow: scroll;
}

ul.list {
    display: flex;
    flex-direction: column;

    list-style: none;
}

li {
    ... other rules
    margin-bottom: 5px;
}
li:last-child {
    margin-bottom: 0;
}

每个列表项都有一个bottom-margin,它充当每个元素之间的缓冲区(纯粹是为了美观)。但!当您滚动到列表底部并且列表容器底部之前有一个不必要的边距时,它看起来很愚蠢。因此,将 last-child 设置为没有底边距。

列表最终看起来像...

Initial List

... 注意:将 BG 设置为 red,以便您可以看到填充,并且 li:last-child 将 BG 设置为 aqua,所以你可以看到哪个元素被视为最后一个

问题解决了,对吧!?

那么,问题...

(假设列表有 n 个列表项。)

在普通列表中,上面的 CSS 会很好用。当我获取顶部列表项 (order: 0;) 并重新分配订单以便将其移动到列表底部 (order: n+1;)。即使列表项可能被绘制显示在列表的底部,它仍然在 DOM 中被视为第一个 列表项。

DOM 看起来像...

<div class="list-container">
    <ul class="list">
        <li style="order: n+1;">One</li>
        <li style="order: 1;">two</li>
        <li style="order: 2;">three</li>
        ...
        <li style="order: n;">Last</li>
    </ul>
</div>

结果看起来像...

Issue List

因为列表项 order: n; 仍然是 DOM 中的 last-child,所以它的底部边距被移除,即使它下面显示了另一个列表项.

使用 margin-topli:first-child 时也会出现同样的问题。这是不可避免的!

那么,我可以...吗?

是否有原生 CSS 方法来定位具有最大订单号的元素?或者也许还有另一个 CSS-only 技巧来完成同样的事情?

非常感谢!

最佳答案

您可以通过将 ul 元素的底部边距设置为 -5px 并将溢出属性设置为来隐藏它,而不是删除最后一个 li 元素的边距隐藏。

关于javascript - CSS - 选择器以最大顺序定位元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46592804/

相关文章:

javascript - JQuery 更新外部文件中的父类

javascript - jqGrid 设置记录数

jquery - 在调整大小时对齐表格单元格内的 div 标签

html - 如果元素超过其父元素的大小,如何使用 CSS 显示指示?

php - 如何将此 php 代码放入 cloumus

jquery - 如何使用位置: absolute and have an automatic height

html - 如何覆盖用户代理 CSS

javascript - 数据未绑定(bind)在 View 中

javascript - 仅在页面提交后显示具有透明背景的加载图像

javascript - 如何将插入符位置存储在可编辑的 div 中?