搜索
首页web前端css教程设计更好的表格:使用弹出窗口获取额外数据

在处理大型数据表时,一次显示所有可用信息通常会使表格变得难以阅读。因此,隐藏次要信息并使用设计模式仅在需要时显示更多细节是很常见的。

数据表设计对于良好的用户体验 (UX) 至关重要,尤其是在处理大量或复杂的数据时。根据为什么表格设计用户体验很重要?和设计更好的数据表,对于管理这些隐藏细节的三种主要方法达成了共识:

  • 可扩展行 – 内联扩展表格行以显示更多详细信息。
  • 模态视图 – 打开包含更深入信息的模态对话框。
  • 快速查看(侧边栏) – 在可以从边缘滑入的侧边栏中显示额外的详细信息。

在本文中,我将向您展示如何灵活设置这三个选项,以便您可以在它们之间进行切换,而无需重写表格的标记。

为此,我们将使用弹出窗口,它非常适合轻松地将信息直接附加到特定行。


设置基本表

首先,我们将使用与表格样式指南中相同的标记和样式:

Designing Better Tables: Using Popovers for Extra Data

在最后一个单元格的文本内容之后,我们添加了一个简单的按钮(图标来自tabler),它将触发弹出窗口:

<button type="button" popovertarget="p1"></button>

接下来,我们在文档中的某处添加弹出窗口,以在触发时显示附加内容:

<div id="p1" popover>
  ... content ...   
</div>

设计弹出框的样式

对于弹出窗口样式,我们将使用 Adam Argyle 的 Steal this popover 代码中的模板。该模板包括弹出窗口的出现和消失的平滑过渡:

.selector {
  &, &::backdrop {
    transition: 
      display .5s allow-discrete, 
      overlay .5s allow-discrete, 
      inset .5s,
      scale .5s,
      opacity .5s;
    opacity: 0;
  }

  &::backdrop {
    background: #0002;
  }

  &:popover-open {
    opacity: 1;
    &::backdrop {
      opacity: 0.5;
    }
  }

  @starting-style {
    &:popover-open,
    &:popover-open::backdrop {
      opacity: 0;
    }
  }
}

模态视图

对于模态布局,我们将添加一个 --modal 修饰符类来定义模态的大小并将其在屏幕上居中:

&.--modal {
  block-size: calc(100dvh - 2em);
  inline-size: calc(100dvw - 2em);
  inset-block-start: 1em;
  inset-inline: 1em;
  transform-origin: 50% 50%;

  @starting-style {
    &:popover-open{
      scale: 0;
    }
  }
}

Designing Better Tables: Using Popovers for Extra Data


快速查看(侧边栏)

为了创建快速视图侧边栏,我们将向弹出窗口添加一个新的修饰符类 --inline-start。该侧边栏从视口的侧面滑入,并且可以通过平滑的动画关闭。设置如下:

&.--inline-start {
  --width: clamp(220px, 33vw, 350px);
  block-size: calc(100dvh - 2em);
  inline-size: var(--width);
  inset-block-start: 1em;
  inset-inline: 1em;

  @starting-style {
    &:popover-open {
      inset-inline: calc(0px - var(--width));
    }
  }
  &[popover]:not(:popover-open) { 
    inset-inline: calc(0px - var(--ui-width));
  }
}

通过此设置,弹出框从左侧滑入。 &[popover]:not(:popover-open) 行确保它在关闭时滑出。

Designing Better Tables: Using Popovers for Extra Data

我们可以应用类似的调整来创建从右侧或从上方和下方滑入的效果:

内联结束(--inline-end)

Designing Better Tables: Using Popovers for Extra Data

块结束(--block-end)

Designing Better Tables: Using Popovers for Extra Data


可扩展行

最后,让我们看看可扩展行。与模式和侧边栏不同,可扩展行直接集成在表格布局中。传统上,这种方法涉及隐藏的

。带有 跨越所有列,以及一个用于切换其可见性的 JavaScript 函数。

但是我们可以重用现有的弹出窗口来内联扩展行吗?不直接 - 但我们可以伪造它,通过将弹出窗口定位到该行的正下方,创建类似的效果。


首先,我们通过在

上设置锚点名称,将弹出窗口附加到表格行的左下角。并应用以下 CSS:
<button type="button" popovertarget="p1"></button>

接下来,我们需要两个功能,不幸的是,目前仅限 Chrome

<div id="p1" popover>
  ... content ...   
</div>

interpolate-size 属性允许弹出窗口平滑地动画到其最终高度,而anchor-size 让它匹配行的宽度(或高度,使用anchor-size(height))。

Designing Better Tables: Using Popovers for Extra Data

到目前为止,一切顺利 - 但展开的行覆盖了接下来的行。

我们可以通过将弹出框高度添加到展开行内表格单元格的填充块末端来解决此问题:

Designing Better Tables: Using Popovers for Extra Data

酷。幻象完成了!

为了动画高度,我们将在 CSS 中添加一些额外的声明:

.selector {
  &, &::backdrop {
    transition: 
      display .5s allow-discrete, 
      overlay .5s allow-discrete, 
      inset .5s,
      scale .5s,
      opacity .5s;
    opacity: 0;
  }

  &::backdrop {
    background: #0002;
  }

  &:popover-open {
    opacity: 1;
    &::backdrop {
      opacity: 0.5;
    }
  }

  @starting-style {
    &:popover-open,
    &:popover-open::backdrop {
      opacity: 0;
    }
  }
}

自动调整填充

为了避免手动更新填充,我们可以使用一个脚本根据弹出框的高度动态更新填充:

&.--modal {
  block-size: calc(100dvh - 2em);
  inline-size: calc(100dvw - 2em);
  inset-block-start: 1em;
  inset-inline: 1em;
  transform-origin: 50% 50%;

  @starting-style {
    &:popover-open{
      scale: 0;
    }
  }
}

此脚本侦听弹出窗口的切换事件,动态更新自定义属性 --row,以匹配打开时的弹出窗口高度。


演示

您可以在 browser.style/ui/table-expand 中查看演示,您还可以在其中找到原始表格演示样式。

以上是设计更好的表格:使用弹出窗口获取额外数据的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
揭开屏幕读取器的神秘面纱:可访问的表格和最佳实践揭开屏幕读取器的神秘面纱:可访问的表格和最佳实践Mar 08, 2025 am 09:45 AM

这是我们在形式可访问性上进行的小型系列中的第三篇文章。如果您错过了第二篇文章,请查看“以:focus-visible的管理用户焦点”。在

将框阴影添加到WordPress块和元素将框阴影添加到WordPress块和元素Mar 09, 2025 pm 12:53 PM

CSS盒子阴影和轮廓属性获得了主题。让我们查看一些在真实主题中起作用的示例,以及我们必须将这些样式应用于WordPress块和元素的选项。

使用GraphQL缓存使用GraphQL缓存Mar 19, 2025 am 09:36 AM

如果您最近开始使用GraphQL或审查了其优点和缺点,那么您毫无疑问听到了诸如“ GraphQl不支持缓存”或

使您的第一个自定义苗条过渡使您的第一个自定义苗条过渡Mar 15, 2025 am 11:08 AM

Svelte Transition API提供了一种使组件输入或离开文档(包括自定义Svelte Transitions)时动画组件的方法。

优雅且酷的自定义CSS卷轴:展示柜优雅且酷的自定义CSS卷轴:展示柜Mar 10, 2025 am 11:37 AM

在本文中,我们将深入研究滚动条。我知道,这听起来并不魅力,但请相信我,一个精心设计的页面是齐头并进的

展示,不要说展示,不要说Mar 16, 2025 am 11:49 AM

您花多少时间为网站设计内容演示文稿?当您撰写新的博客文章或创建新页面时,您是在考虑

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

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

NPM命令是什么?NPM命令是什么?Mar 15, 2025 am 11:36 AM

NPM命令为您运行各种任务,无论是一次性或连续运行的过程,例如启动服务器或编译代码。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

禅工作室 13.0.1

禅工作室 13.0.1

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