前几天我偶然发现了这个 30 秒代码 网站,他们的 CSS 部分非常棒! 我查看的第一个示例代码段是这个 “浮动部分标题” 示例,再次提醒我定义列表可以是多么的 令人满意。 列表
使用这样的简单 HTML
<div class="floating-stack">
<dl>
<dt>A</dt>
<dd>Algeria</dd>
<dd>Angola</dd>
<dt>B</dt>
<dd>Benin</dd>
<dd>Botswana</dd>
<dd>Burkina Faso</dd>
<dd>Burundi</dd>
<dt>C</dt>
<dd>Cabo Verde</dd>
<dd>Cameroon</dd>
<dd>Central African Republic</dd>
<dd>Chad</dd>
<dd>Comoros</dd>
<dd>Congo, Democratic Republic of the</dd>
<dd>Congo, Republic of the</dd>
<dd>Cote d'Ivoire</dd>
<dt>D</dt>
<dd>Djibouti</dd>
<dt>E</dt>
<dd>Egypt</dd>
<dd>Equatorial Guinea</dd>
<dd>Eritrea</dd>
<dd>Eswatini (formerly Swaziland)</dd>
<dd>Ethiopia</dd>
</dl>
</div>
默认的浏览器样式 - 没有 CSS - 看起来像这样

因此,所有这些 <dt>
在这种情况下,恰好巧妙地缩进到左边,位于 <dd>
的 margin-inline-start
留出的空间内。 这意味着,我们只需使用很少的 CSS 就可以开启“粘性部分”的概念。
dt {
position: sticky;
top: 0;
background: white;
display: inline-block;
}
我喜欢它的简洁性。
现在,核心“功能”已经正常工作,其余的样式只是审美上的修饰
30 秒代码上的版本 使用 CSS 网格布局来创建列表项,这无疑更加健壮。 我只是觉得,在没有使用 CSS 网格布局的情况下,你就能如此接近目标,这很有趣。 他们还提供了一个 版本,其中 <dt>
延伸至整个宽度,也很不错。
有趣的是,“语法糖”版本实际上不起作用(iOS)。
抱歉,我的意思是审美上的修饰。 我猜这与 Safari 上的粘性支持有关。
太棒的解决方案了! 谢谢发布! 优雅。
另外值得一提的是,MDM 建议在定位为
sticky
的元素中添加will-change: transform;
以解决可访问性问题。https://mdn.org.cn/en-US/docs/Web/CSS/position#accessibility_concerns
继续努力!!
我已经使用过很多次了
在这里 http://albarran-bourdais.com/exhibitions/
以及在这里 https://asphalt-chronicles.com/story-the-heart-of-paris。
适用于访谈和表格数据。
这才是 CSS 的真正艺术!
我本以为会看到包含元素中的
position: relative
。 有什么原因导致不需要它吗?