【发布时间】:2021-04-09 23:31:42
【问题描述】:
我想在 html 表格中创建可点击的行。每一行都应该是一个指向不同页面的链接。我当然可以添加 onclick 处理程序,但这会创建一种糟糕的 UI - 可访问性差,没有键盘导航,没有右键/中键...
我找到了更好的方法。不要使用普通的table 元素,而是通过css display 规则强制divs 充当不同的表格标签。对于行,使用 a-s,并带有适当的 href 属性。
这就是我的意思:
.table {
display: table;
border-collapse: collapse;
font-family: sans-serif;
width: 100%;
}
.thead {
display: table-header-group;
}
.tbody {
display: table-row-group;
}
.td, .th {
display: table-cell;
padding: 5px 10px;
text-align: center;
}
.tr {
display: table-row;
}
.thead > .tr {
background: #ccc;
color: #555;
}
a.tr {
text-decoration: none;
color: black;
}
a.tr:hover {
background: #eee;
cursor: pointer;
}
<div class="table">
<div class="thead">
<div class="tr">
<div class="th">ID</div>
<div class="th">Name</div>
</div>
</div>
<div class="tbody">
<a class="tr" href="524.html">
<div class="td">524</div>
<div class="td">John Smith</div>
</a>
<a class="tr" href="331.html">
<div class="td">331</div>
<div class="td">Miles Corner</div>
</a>
</div>
</div>
请注意行是如何可点击的,您可以通过标签浏览它们,并且有一个很好的工具提示显示您将转到的链接。比 onclick 好多了。
如果我使用像 React 这样的框架,我什至不必用 div-s 替换所有元素。我可以添加<a> 标签而不是<tr>s,它会起作用。
我的问题是,有什么问题?我错过了什么?是否有一些可访问性、浏览器兼容性或其他不这样做的原因?
【问题讨论】:
-
这类问题有codereview.stackexchange.com,仅供参考,我没有看到任何关于解决代码中的问题的真正问题。
-
感谢您的提示。我会交叉发布。
-
有很多问题!例如,我无法在屏幕阅读器中使用箭头键在单元格之间导航,因为这不是表格。此外,不存在列标题或行标题,因此如果您有两个以上的“列”(在实际表中,您会听到“第 2 行,ID 524,姓名 John Smith”。)您可能会发现 this answer I gave涵盖了可点击行的一些要点,如果您还有其他问题,请告诉我,我可以将它们扩展为答案。就目前而言,我能给出的唯一建议是“请不要这样做!”
-
@GrahamRitchie 谢谢,这是一个非常好的答案。
标签: html css dom frontend accessibility