我有以下问题:
我必须在网页上列出几个具有多个属性的项目。列表在两个HTML表格中完成。一个表格用于标题,一个表格用于项目。需要进行这种分离,以便只能滚动列表。 (在标题部分有一个滚动条会很奇怪)。 AFAIK只有一种在HTML列表中滚动的方法是div溢出属性。
问题是我需要在整个列表中设置列(元素)的宽度,即在标题和元素列表中。以下是现在如何完成的简化示例:
<table width="98%">
<tr>
<td>1</td> <td>2</td> <td>3</td> <td>4</td>
</tr>
<div style="width: 100%; height: 300px; overflow-y:scroll">
<table>
<tr>
<td>123456789101112</td> <td>2</td> <td>3</td> <td>4</td>
</tr>
</table>
</div>
</table>
问题是,由于列表中的元素可能有很长(我的意思是很多字符)值,因此即使使用了width属性,浏览器也会扩展单元格。由于标题在一个单独的列中,其列的长度将与div的列不同。
到目前为止,我试图让浏览器呈现列表中的列,然后获取这些计算出的样式并将它们应用到标题列中,但似乎标题列并没有得到那个宽度。我在项目的其他地方遇到了同样的问题,但由于文本宽度是常数,我使用宽度的像素,FF和IE8中的不同长度,但现在问题是 - 我认为 - 更复杂。
如何在两个表中使列具有相同的宽度?
答案 0 :(得分:2)
您的示例是无效的HTML。我根本不建议使用这种方式。
使所有列具有相同宽度(没有JavaScript的帮助)的唯一方法实际上是将它们放在同一个表中。
结帐this question。我没有对它们进行过测试,但是有些答案看起来像是使用thead
和tbody
元素只使用一个表元素来提供所需的功能。
答案 1 :(得分:0)
我没有对它进行过多次测试,但这似乎有效:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><title></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css"><!--
tbody{
width: 100%;
height: 300px;
overflow-y:scroll;
}
--></style>
</head>
<body>
<table width="98%">
<thead>
<tr>
<td>1</td> <td>2</td> <td>3</td> <td>4</td>
</tr>
</thead>
<tbody>
<tr>
<td>123456789101112</td> <td>2</td> <td>3</td> <td>4</td>
</tr>
<tr>
<td>123456789101112</td> <td>2</td> <td>3</td> <td>4</td>
</tr>
<tr>
<td>123456789101112</td> <td>2</td> <td>3</td> <td>4</td>
</tr>
<tr>
<td>123456789101112</td> <td>2</td> <td>3</td> <td>4</td>
</tr>
<tr>
<td>123456789101112</td> <td>2</td> <td>3</td> <td>4</td>
</tr>
<tr>
<td>123456789101112</td> <td>2</td> <td>3</td> <td>4</td>
</tr>
<tr>
<td>123456789101112</td> <td>2</td> <td>3</td> <td>4</td>
</tr>
<tr>
<td>123456789101112</td> <td>2</td> <td>3</td> <td>4</td>
</tr>
<tr>
<td>123456789101112</td> <td>2</td> <td>3</td> <td>4</td>
</tr>
<tr>
<td>123456789101112</td> <td>2</td> <td>3</td> <td>4</td>
</tr>
<tr>
<td>123456789101112</td> <td>2</td> <td>3</td> <td>4</td>
</tr>
<tr>
<td>123456789101112</td> <td>2</td> <td>3</td> <td>4</td>
</tr>
<tr>
<td>123456789101112</td> <td>2</td> <td>3</td> <td>4</td>
</tr>
<tr>
<td>123456789101112</td> <td>2</td> <td>3</td> <td>4</td>
</tr>
<tr>
<td>123456789101112</td> <td>2</td> <td>3</td> <td>4</td>
</tr>
<tr>
<td>123456789101112</td> <td>2</td> <td>3</td> <td>4</td>
</tr>
<tr>
<td>123456789101112</td> <td>2</td> <td>3</td> <td>4</td>
</tr>
<tr>
<td>123456789101112</td> <td>2</td> <td>3</td> <td>4</td>
</tr>
<tr>
<td>123456789101112</td> <td>2</td> <td>3</td> <td>4</td>
</tr>
<tr>
<td>123456789101112</td> <td>2</td> <td>3</td> <td>4</td>
</tr>
</table>
</body>
</html>
更新:它似乎只适用于Firefox。
答案 2 :(得分:0)
以下示例使用JavaScript设置标题单元格的宽度:
<head>
<style>
#headerTable {
background-color: #a0f0a0;
font-size: 18px;
font-weight: bold;
}
#headerTable td {
text-align: center;
}
#itemsDiv {
height: 300px;
overflow:auto
}
#itemsTable {
background-color: #e0e0b0;
font-size: 14px;
}
#itemsTable td {
padding: 5px;
text-align: right;
}
</style>
<script>
function ResizeHeaderTable () {
var headerTable = document.getElementById ("headerTable");
var itemsTable = document.getElementById ("itemsTable");
// resize header cells
if (headerTable.rows.length > 0 && itemsTable.rows.length > 0) {
var firstHeaderRow = headerTable.rows[0];
var firstItemsRow = itemsTable.rows[0];
var colsNum = Math.min (firstHeaderRow.cells.length, firstItemsRow.cells.length);
for (var i = 0; i < colsNum; i++) {
var cellWidth = firstItemsRow.cells[i].offsetWidth;
firstHeaderRow.cells[i].style.width = cellWidth + "px";
}
}
// set the width of itemsDiv
var itemsDiv = document.getElementById ("itemsDiv");
itemsDiv.style.width = itemsTable.offsetWidth + "px";
// if the vertical scrollbar of itemsDiv is displayed, itemsDiv must be wider
var scrollWidth = itemsTable.offsetWidth - itemsDiv.clientWidth;
if (scrollWidth > 0) {
itemsDiv.style.width = itemsTable.offsetWidth + scrollWidth + "px";
}
}
</script>
</head>
<body onload="ResizeHeaderTable ()">
<table id="headerTable" cellpadding="0px" cellspacing="0px" border="0px">
<tr>
<td>1</td> <td>2</td> <td>3</td> <td>4</td>
</tr>
</table>
<div id="itemsDiv">
<table id="itemsTable" cellpadding="0px" cellspacing="0px" border="0px">
<tr>
<td>123456789101112</td> <td>2938547</td> <td>34534546</td> <td>42222221134</td>
</tr>
<tr>
<td>123</td> <td>29385</td> <td>34534546444446232</td> <td>42222221</td>
</tr>
<tr>
<td>123456789101112</td> <td>2938547</td> <td>34534546</td> <td>42222221134</td>
</tr>
<tr>
<td>123</td> <td>29385</td> <td>34534546444446232</td> <td>42222221</td>
</tr>
<tr>
<td>123456789101112</td> <td>2938547</td> <td>34534546</td> <td>42222221134</td>
</tr>
<tr>
<td>123</td> <td>29385</td> <td>34534546444446232</td> <td>42222221</td>
</tr>
<tr>
<td>123456789101112</td> <td>2938547</td> <td>34534546</td> <td>42222221134</td>
</tr>
<tr>
<td>123</td> <td>29385</td> <td>34534546444446232</td> <td>42222221</td>
</tr>
<tr>
<td>123456789101112</td> <td>2938547</td> <td>34534546</td> <td>42222221134</td>
</tr>
<tr>
<td>123</td> <td>29385</td> <td>34534546444446232</td> <td>42222221</td>
</tr>
<tr>
<td>123456789101112</td> <td>2938547</td> <td>34534546</td> <td>42222221134</td>
</tr>
<tr>
<td>123</td> <td>29385</td> <td>34534546444446232</td> <td>42222221</td>
</tr>
<tr>
<td>123456789101112</td> <td>2938547</td> <td>34534546</td> <td>42222221134</td>
</tr>
<tr>
<td>123</td> <td>29385</td> <td>34534546444446232</td> <td>42222221</td>
</tr>
<tr>
<td>123456789101112</td> <td>2938547</td> <td>34534546</td> <td>42222221134</td>
</tr>
<tr>
<td>123</td> <td>29385</td> <td>34534546444446232</td> <td>42222221</td>
</tr>
<tr>
<td>123456789101112</td> <td>2938547</td> <td>34534546</td> <td>42222221134</td>
</tr>
<tr>
<td>123</td> <td>29385</td> <td>34534546444446232</td> <td>42222221</td>
</tr>
<tr>
<td>123456789101112</td> <td>2938547</td> <td>34534546</td> <td>42222221134</td>
</tr>
<tr>
<td>123</td> <td>29385</td> <td>34534546444446232</td> <td>42222221</td>
</tr>
<tr>
<td>123456789101112</td> <td>2938547</td> <td>34534546</td> <td>42222221134</td>
</tr>
<tr>
<td>123</td> <td>29385</td> <td>34534546444446232</td> <td>42222221</td>
</tr>
<tr>
<td>123456789101112</td> <td>2938547</td> <td>34534546</td> <td>42222221134</td>
</tr>
<tr>
<td>123</td> <td>29385</td> <td>34534546444446232</td> <td>42222221</td>
</tr>
<tr>
<td>123456789101112</td> <td>2938547</td> <td>34534546</td> <td>42222221134</td>
</tr>
<tr>
<td>123</td> <td>29385</td> <td>34534546444446232</td> <td>42222221</td>
</tr>
<tr>
<td>123456789101112</td> <td>2938547</td> <td>34534546</td> <td>42222221134</td>
</tr>
<tr>
<td>123</td> <td>29385</td> <td>34534546444446232</td> <td>42222221</td>
</tr>
</table>
</div>
</body>
加载页面后,将调用ResizeHeaderTable方法。 ResizeHandlerTable方法使用offsetWidth属性来检索,使用style.width属性来设置单元格的宽度。最后,它设置包含项目表格的div的宽度。
如果您需要有关offsetWidth属性的更多详细信息,以下链接将非常有用: