在HTML中组合表和分层列表
我正在重新设计一个遗留的工具集,我正在研究如何更好地从表象和语义两方面显示一些信息 数据本质上是分层的,但其属性需要易于用户看到。所需的布局与下面的类似在HTML中组合表和分层列表,html,css,html-table,wcag,wcag2.0,Html,Css,Html Table,Wcag,Wcag2.0,我正在重新设计一个遗留的工具集,我正在研究如何更好地从表象和语义两方面显示一些信息 数据本质上是分层的,但其属性需要易于用户看到。所需的布局与下面的类似 Seq Item Name Min Max - Anything under here isn't shown 1 Identifier 1 1 (Required) 2 Name 1 1 2.1 First Name
Seq Item Name Min Max - Anything under here isn't shown
1 Identifier 1 1 (Required)
2 Name 1 1
2.1 First Name 1 1
2.2 Middle Name - - (Optional but unlimted)
2.3 Last Name 1 1
3 Age - 1 (Optional)
目前,这是一个完整的表格,序列(Seq
)编号的插入是通过插入额外的表格单元格来实现的,可以将所有内容向右突出
我面临的挑战是如何有效地显示这些信息
首先,这是表格数据吗?我会说不,因为层次结构很重要,“列”只是每个“行”中项目的属性
如果它不是表格,它是什么以及如何实现?我个人认为这是一组嵌套的UL
列表-序列号是可选的,并不总是一个数字。如果它是一组列表,那么将正确缩进子列表,但是呈现短属性的最佳方式是什么
如果它是一个表,那么在表中表示层次结构语义存在的最佳方式是什么?我认为您应该使用表。诚然,层次结构更为重要,但它也可以通过手动写下第一列来显示。但是属性min、max和item name不能像在表中那样容易地显示在列表中。我的意见:使用一个表,手动提供seq列 我将使用一个表格并通过添加到
td
标签来展示它:
<table id="myTable" class="table">
<tr>
<td data-indent="0">1</td>
<td data-indent="0">Test</td>
<td data-indent="0">Test 1</td>
</tr>
<tr>
<td data-indent="1">1.1</td>
<td data-indent="1">Another</td>
<td data-indent="0">Test 1.1</td>
</tr>
<tr>
<td data-indent="2">1.1.1</td>
<td data-indent="3">Another</td>
<td data-indent="0">Test 1.1.1</td>
</tr>
<tr>
<td data-indent="2">1.1.2</td>
<td data-indent="3">Another one</td>
<td data-indent="0">Another test 1.1.2</td>
</tr>
<tr>
<td data-indent="0">2</td>
<td data-indent="0">Test</td>
<td data-indent="0">Test 2</td>
</tr>
</table>
查看它的工作情况。我的建议是使用嵌套的有序列表来保留层次结构,然后使用描述列表来表示每行的“列” 例如,第一行的描述列表可能如下所示:
<dl>
<dt>Item Name</dt>
<dd>Identifier</dd>
<dt>Min</dt>
<dd>1</dd>
<dt>Max</dt>
<dd>1</dd>
<dt>Notes</dt>
<dd>(Required)</dd>
</dl>
table { border-collapse: collapse; }
tbody { border-bottom:1px solid #000; }
tbody .sub td { padding-left: 10px; }
项目名称
标识符
分钟
1.
马克斯
1.
笔记
(必选)
您必须使用CSS来隐藏描述术语(因为您不希望它们显示在每一行上),并将布局调整为更像一个表
这种格式的缺点是,您将在每一行上复制列标题。但从语义上讲,我认为这是最有意义的,它也应该使内容对屏幕阅读器更有意义
我已经为此做了第一次CSS尝试,因此您可以了解它是如何工作的。这可能做得不太好,但至少它会给你一些开始的东西
这里的挑战是,您想要表示的信息在一个方面是表格形式的(这是一组具有相同标签属性的项),在另一个层次结构中(项具有父项) 不幸的是,HTML中没有针对表行的嵌套分组机制:可以用于对行进行分组,但嵌套是非法的(除了在
td
中使用中间表
,这非常可怕)
这就给你留下了两个选择:
<ul>
<li>
<dl>
<dt>Seq</dt> <dd>1</dd>
<dt>Item Name</dt> <dd>Identifier</dd>
<dt>Min</dt> <dd>1</dd>
<dt>Max</dt> <dd>1</dd>
</dl>
</li>
<li>
<dl>
<dt>Seq</dt> <dd>2</dd>
<dt>Item Name</dt> <dd>Name</dd>
<dt>Min</dt> <dd>1</dd>
<dt>Max</dt> <dd>1</dd>
</dl>
<ul>
<li>
<dl>
<dt>Seq</dt> <dd>2.1</dd>
<dt>Item Name</dt> <dd>First Name</dd>
<dt>Min</dt> <dd>1</dd>
<dt>Max</dt> <dd>1</dd>
</dl>
</li>
<li>
<dl>
<dt>Seq</dt> <dd>2.2</dd>
<dt>Item Name</dt> <dd>Middle Name</dd>
<dt>Min</dt> <dd>-</dd>
<dt>Max</dt> <dd>-</dd>
</dl>
</li>
<li>
<dl>
<dt>Seq</dt> <dd>2.3</dd>
<dt>Item Name</dt> <dd>Last Name</dd>
<dt>Min</dt> <dd>1</dd>
<dt>Max</dt> <dd>1</dd>
</dl>
</li>
</ul>
</li>
<li>
<dl>
<dt>Seq</dt> <dd>3</dd>
<dt>Item Name</dt> <dd>Age</dd>
<dt>Min</dt> <dd>-</dd>
<dt>Max</dt> <dd>1</dd>
</dl>
</li>
<ul>
<dl>
<dt>
<ul> <li>Seq</li> <li>Item Name</li> <li>Min</li> <li>Max</li> </ul>
</dt>
<dd>
<ul> <li>1</li> <li>Identifier</li> <li>1</li> <li>1</li> </ul>
</dd>
<dd>
<dl>
<dt>
<ul> <li>2</li> <li>Name</li> <li>1</li> <li>1</li> </ul>
</dt>
<dd>
<ul> <li>2.1</li> <li>First Name</li> <li>1</li> <li>1</li> </ul>
</dd>
<dd>
<ul> <li>2.2</li> <li>Middle Name</li> <li>-</li> <li>-</li> </ul>
</dd>
<dd>
<ul> <li>2.3</li> <li>Last Name</li> <li>1</li> <li>1</li> </ul>
</dd>
</dl>
</dd>
<dd>
<ul> <li>3</li> <li>Age</li> <li>-</li> <li>1</li> </ul>
</dd>
</dl>
<table>
<thead>
<tr>
<th>Seq</th> <th>Item Name</th> <th>Min</th> <th>Max</th>
</tr>
</thead>
<tbody>
<tr id=100>
<td>1</th> <th>Identifier</th> <td>1</td> <td>1</td>
</tr>
<tr id=200>
<th>2</th> <th>Name</th> <td>1</td> <td>1</td>
</tr>
<tr id=210 data-parent=200 class=level-1>
<th>2.1</th> <th>First Name</th> <td>1</td> <td>1</td>
</tr>
<tr id=220 data-parent=200 class=level-1>
<th>2.2</th> <th>Middle Name</th> <td>-</td> <td>-</td>
</tr>
<tr id=230 data-parent=200 class=level-1>
<th>2.3</th> <th>Last Name</th> <td>1</td> <td>1</td>
</tr>
<tr id=300>
<th>3</th> <th>Age</th> <td>-</td> <td>1</td>
</tr>
</tbody>
</table>
在这里,我们用它来描述两件事:
表格
:
<ul>
<li>
<dl>
<dt>Seq</dt> <dd>1</dd>
<dt>Item Name</dt> <dd>Identifier</dd>
<dt>Min</dt> <dd>1</dd>
<dt>Max</dt> <dd>1</dd>
</dl>
</li>
<li>
<dl>
<dt>Seq</dt> <dd>2</dd>
<dt>Item Name</dt> <dd>Name</dd>
<dt>Min</dt> <dd>1</dd>
<dt>Max</dt> <dd>1</dd>
</dl>
<ul>
<li>
<dl>
<dt>Seq</dt> <dd>2.1</dd>
<dt>Item Name</dt> <dd>First Name</dd>
<dt>Min</dt> <dd>1</dd>
<dt>Max</dt> <dd>1</dd>
</dl>
</li>
<li>
<dl>
<dt>Seq</dt> <dd>2.2</dd>
<dt>Item Name</dt> <dd>Middle Name</dd>
<dt>Min</dt> <dd>-</dd>
<dt>Max</dt> <dd>-</dd>
</dl>
</li>
<li>
<dl>
<dt>Seq</dt> <dd>2.3</dd>
<dt>Item Name</dt> <dd>Last Name</dd>
<dt>Min</dt> <dd>1</dd>
<dt>Max</dt> <dd>1</dd>
</dl>
</li>
</ul>
</li>
<li>
<dl>
<dt>Seq</dt> <dd>3</dd>
<dt>Item Name</dt> <dd>Age</dd>
<dt>Min</dt> <dd>-</dd>
<dt>Max</dt> <dd>1</dd>
</dl>
</li>
<ul>
<dl>
<dt>
<ul> <li>Seq</li> <li>Item Name</li> <li>Min</li> <li>Max</li> </ul>
</dt>
<dd>
<ul> <li>1</li> <li>Identifier</li> <li>1</li> <li>1</li> </ul>
</dd>
<dd>
<dl>
<dt>
<ul> <li>2</li> <li>Name</li> <li>1</li> <li>1</li> </ul>
</dt>
<dd>
<ul> <li>2.1</li> <li>First Name</li> <li>1</li> <li>1</li> </ul>
</dd>
<dd>
<ul> <li>2.2</li> <li>Middle Name</li> <li>-</li> <li>-</li> </ul>
</dd>
<dd>
<ul> <li>2.3</li> <li>Last Name</li> <li>1</li> <li>1</li> </ul>
</dd>
</dl>
</dd>
<dd>
<ul> <li>3</li> <li>Age</li> <li>-</li> <li>1</li> </ul>
</dd>
</dl>
<table>
<thead>
<tr>
<th>Seq</th> <th>Item Name</th> <th>Min</th> <th>Max</th>
</tr>
</thead>
<tbody>
<tr id=100>
<td>1</th> <th>Identifier</th> <td>1</td> <td>1</td>
</tr>
<tr id=200>
<th>2</th> <th>Name</th> <td>1</td> <td>1</td>
</tr>
<tr id=210 data-parent=200 class=level-1>
<th>2.1</th> <th>First Name</th> <td>1</td> <td>1</td>
</tr>
<tr id=220 data-parent=200 class=level-1>
<th>2.2</th> <th>Middle Name</th> <td>-</td> <td>-</td>
</tr>
<tr id=230 data-parent=200 class=level-1>
<th>2.3</th> <th>Last Name</th> <td>1</td> <td>1</td>
</tr>
<tr id=300>
<th>3</th> <th>Age</th> <td>-</td> <td>1</td>
</tr>
</tbody>
</table>
归根结底,这是个人偏好和便利性的问题,但我认为
方法更好,因为它满足了“没有CSS看起来合理吗?”的经验法则,比上面的任何一种嵌套列表方法都好得多。为什么两者都不行?树状网格是表示也符合层次结构的表格数据的好方法
这是
然而,在两个非常大的项目上使用了Extjs之后,我个人的建议是,如果要生成一个大型应用程序,就不要使用Extjs。虽然这对于一次性的网格可能是好的,但我个人发现它的实现很差,并且随着项目规模的增加,可能会变得更加麻烦。但是,它的功能非常丰富,因此可能会为您提供有关网格(表)的更多想法,这些想法可能会对您有所帮助
请记住,您应该始终问自己,“我的用户试图回答哪些问题?”然后,问自己,“哪些图形设备提供了回答该问题的最清晰、最简单的途径?”
一本真正帮助我解决这些问题的书是。尽管您可能没有构建仪表板,但它有许多UX技术和理论,使我在选择适当的UI元素(与数据相关)时更加容易
希望这有助于…我认为有两种明智的方法可以在HTML中表示这一点:
- 使用
并使用自然语言明确关系/层次结构表
- 使用剖切元素(如果使用HTML 4.01,则使用相应的标题)
表
,带有解释层次结构的列
如果没有用于定义此关系的标记,则应使用文本。如果视觉表示是明确的,您可以在视觉上隐藏此文本,以便仅屏幕阅读器/文本浏览器用户可以访问它
在你的
<section class="item" id="3">
<h2>Age</h2>
<dl>
<dt>Min</dt>
<dd>1</dd>
<dt>Max</dt>
<dd>1</dd>
</dl>
</section>
<table>
<thead>
<tr>
<th id="seq">Seq</th>
<th>Item Name</th>
<th>Min</th>
<th>Max</th>
</tr>
</thead>
<tbody>
<tr>
<th id="s1" headers="seq">1</th>
<td>Identifier</td>
<td>1</td>
<td>1</td>
</tr>
</tbody>
<tbody>
<tr>
<th id="s2" headers="seq">2</th>
<td>Name</td>
<td>1</td>
<td>1</td>
</tr>
<tr class="sub">
<th id="s2_1" headers="seq s2">2.1</th>
<td>First Name</td>
<td>1</td>
<td>1</td>
</tr>
<tr class="sub">
<th id="s2_2" headers="seq s2">2.2</th>
<td>Middle Name</td>
<td>-</td>
<td>-</td>
</tr>
<tr class="sub">
<th id="s2_3" headers="seq s2">2.3</th>
<td>Last Name</td>
<td>1</td>
<td>1</td>
</tr>
<tr class="sub sub">
<th id="s2_3_1" headers="seq s2 s2_3">2.3.1</th>
<td>Last Name</td>
<td>1</td>
<td>1</td>
</tr>
<tr class="sub sub">
<th id="s2_3_2" headers="seq s2 s2_3">2.3.2</th>
<td>Last Name</td>
<td>1</td>
<td>1</td>
</tr>
</tbody>
<tbody>
<tr>
<th id="s3" headers="seq">3</th>
<td>Age</td>
<td>-</td>
<td>1</td>
</tr>
</tbody>
</table>
table { border-collapse: collapse; }
tbody { border-bottom:1px solid #000; }
tbody .sub td { padding-left: 10px; }
<tr>
<td>1</td>
<td>Identifier</td>
<td>1</td>
<td>1</td>
</tr>
<tbody>
<tr>
<td>2</td>
<td>Name</td>
<td>1</td>
<td>1</td>
</tr>
<tr class="sub">
<td>2.1</td>
<td>First Name</td>
<td>1</td>
<td>1</td>
</tr>
...
</tbody>
<tr>
<td>3</td>
<td>Age</td>
<td>-</td>
<td>1</td>
</tr>