首页 web前端 css教程 将选择列表项目与CSS网格一起分组

将选择列表项目与CSS网格一起分组

Mar 07, 2025 pm 04:36 PM

Grouping Selection List Items Together With CSS Grid

通过CSS Grid巧妙分组显示选中列表项,提升用户体验! 选中项分组是常见的设计策略,帮助用户快速区分选中和未选中项。例如,在待办事项列表中,已完成项会向上移动,方便用户关注剩余任务。

我们将设计一个类似的分组UI。不同于简单的重新排列选中项,我们将使用CSS Grid水平布局选中项,进一步区分选中和未选中项。

我们将探讨两种方法。一种使用auto-fill,适用于选中项未超出网格容器边界的情况,确保布局稳定;另一种使用CSS Grid的span关键字,提供更大的灵活性。

两种方法的HTML代码相同:

登录后复制
登录后复制
    <li> <li>

代码由一个无序列表(<ul></ul>)构成。我们无需额外包装元素,因为CSS Grid属性将决定项目布局。注意,我使用隐式<label></label>元素包裹,避免额外包装,但显式标签通常更受辅助技术的支持。

方法一:使用auto-fill

ul {
  width: 250px;
  display: grid;
  gap: 14px 10px;
  grid-template-columns: repeat(auto-fill, 40px);
  justify-content: center;
  /* ...其他样式... */
}
登录后复制

包含列表项的<ul></ul>元素设置为display: grid,使其成为网格容器。它在网格行和列之间设置了14px和10px的间隙。网格内容水平对齐到中心。grid-template-columns属性指定网格中列的尺寸。初始状态下,所有项目都在单列中。选中项目后,它们将移动到第一行,每个选中项目占据一列。关键在于auto-fill值。

auto-fill值用于repeat()函数的重复次数。它确保列重复,每列的轨道大小为repeat()中给定的尺寸(示例中为40px),并能适应网格容器的边界。

为了确保列表项初始状态为单列:

li {
  width: inherit;
  grid-column: 1;
  /* 等同于:grid-column-start: 1; grid-column-end: auto; */
  /* ...其他样式... */
}
登录后复制

选中项目(<input>元素被选中)时,使用:has(:checked)选择器:

li {
  width: inherit;
  grid-column: 1;
  /* ...其他样式... */
  &:has(:checked) {
    grid-area: 1;
    /* 等同于:grid-row-start: 1; grid-column-start: auto; grid-row-end: auto; grid-column-end: auto; */
    width: 40px;
    /* ...其他样式... */
  }
  /* ...其他样式... */
}
登录后复制

这使得选中项分组到列表顶部并水平排列。

方法二:使用span关键字

此方法无需grid-template-columns属性。新的<ul></ul>样式如下:

ul {
  width: 250px;
  display: grid;
  gap: 14px 10px;
  justify-content: center;
  justify-items: center;
  /* ...其他样式... */
}
登录后复制

justify-items: center有助于对齐网格项目。更新的<li>样式:

li {
  width: inherit;
  grid-column: 1 / span 6;
  /* 等同于:grid-column-start: 1; grid-column-end: span 6; */
  /* ...其他样式... */
}
登录后复制

每个项目都放置在第一列,但现在它们也跨越六个列轨道(因为有六个项目)。这确保了当网格中出现多列时,选中项目后的未选中项目仍保持单列,位于选中项目下方——未选中项目现在跨越多个列轨道。justify-items: center声明将使项目保持居中对齐。

li {
  width: inherit;
  grid-column: 1 / span 6;
  /* ...其他样式... */
  &:has(:checked) {
    grid-area: 1;
    width: 120px;
    /* ...其他样式... */
  }
  /* ...其他样式... */
}
登录后复制

选中项目的宽度已增加,以便在选中项目溢出容器时查看选择UI的布局。

选择顺序

选中和未选中项目的顺序将保持与源顺序相同。如果需要屏幕顺序与用户选择匹配,则在选中项目时动态分配递增的顺序值。

登录后复制
登录后复制
    <li> <li>

总结

CSS Grid使得两种方法都非常灵活,无需大量配置。通过使用auto-fill在任一轴(行或列)上放置项目,可以轻松地将选中项目分组到网格容器中,而不会影响同一容器中未选中项目的布局,只要选中项目不溢出容器即可。

如果项目溢出容器,使用span方法有助于保持布局,而不管选中项目在给定轴上的长度如何。UI的一些设计替代方案包括将选中项目分组到列表的末尾,或交换水平和垂直结构。

以上是将选择列表项目与CSS网格一起分组的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

VUE 3 VUE 3 Apr 02, 2025 pm 06:32 PM

它的出局!恭喜Vue团队完成了完成,我知道这是一项巨大的努力,而且很长时间。所有新文档也是如此。

使用Redwood.js和Fauna构建以太坊应用 使用Redwood.js和Fauna构建以太坊应用 Mar 28, 2025 am 09:18 AM

随着最近比特币价格超过20k美元的攀升,最近打破了3万美元,我认为值得深入研究创建以太坊

您可以从浏览器获得有效的CSS属性值吗? 您可以从浏览器获得有效的CSS属性值吗? Apr 02, 2025 pm 06:17 PM

我有人写了这个非常合法的问题。 Lea只是在博客上介绍了如何从浏览器中获得有效的CSS属性。那样的是这样。

带有粘性定位的堆叠卡和一点点的杂物 带有粘性定位的堆叠卡和一点点的杂物 Apr 03, 2025 am 10:30 AM

前几天,我发现了科里·金尼文(Corey Ginnivan)网站上的这一点,当您滚动时,彼此之间的卡片堆放集。

在CI/CD上有点 在CI/CD上有点 Apr 02, 2025 pm 06:21 PM

我说的“网站”比“移动应用程序”更合适,但我喜欢Max Lynch的框架:

比较浏览器的响应式设计 比较浏览器的响应式设计 Apr 02, 2025 pm 06:25 PM

这些桌面应用程序中有许多目标是同时在不同的维度上显示您的网站。因此,例如,您可以写作

在WordPress块编辑器中使用Markdown和本地化 在WordPress块编辑器中使用Markdown和本地化 Apr 02, 2025 am 04:27 AM

如果我们需要直接在WordPress编辑器中向用户显示文档,那么最佳方法是什么?

为什么Flex布局中的紫色斜线区域会被误认为是'溢出空间”? 为什么Flex布局中的紫色斜线区域会被误认为是'溢出空间”? Apr 05, 2025 pm 05:51 PM

关于Flex布局中紫色斜线区域的疑问在使用Flex布局时,你可能会遇到一些令人困惑的现象,比如在开发者工具(d...

See all articles