调整<ul>在表格单元格中
Sizing an <ul> in a table cell
我正在构建一个由<table>
组成的HTML视图,每个单元格只包含一个<ul>
元素,其编号为<li>
。出于可读性的原因,我的行有一个min-width: 100px;
,但根据<ul>
的内容进行扩展。但在其他细胞中(其中<li>
的数量较低)。我希望我的<ul>
使用单元格高度的100%。目前,它们保持100px的高度,并垂直居中。
我的观点可以概括为:
<table>
<tr>
<td>
<ul>...</ul>
</td>
<td>
<ul>...</ul>
</td>
<td>
<ul>...</ul>
</td>
</tr>
<tr>
<td>
<ul>...</ul>
</td>
<td>
<ul>...</ul>
</td>
<td>
<ul>...</ul>
</td>
</tr>
</table>
我这样做的原因是,每个<li>
都可以被拖动&在每个<ul>
之间丢弃,但它们没有调整大小的事实使丢弃在空列表上有点危险,因为你看不到它们,必须猜测它们在哪里。如果他们使用完整的单元格尺寸,这会容易得多。
我使用开发工具做了很多尝试,但没有找到CSS和Javascript的正确组合。
技术先决条件:
- Javascript DOM操作还可以,我已经用它来调整表的大小了。我使用ExtJS,但我可以移植jQuery或纯JS代码
- 必须与IE8兼容(75%的最终用户都在IE上。一定要热爱企业界…)
谢谢你的建议!
编辑:这是一个Fiddle,它尽可能地代表我的代码(NDA阻止我共享原始代码)
若要使height: 100%
按预期工作,容器必须设置其height
。我在下面有一个解决方案,它使用JavaScript来设置所有ul的高度,如果需要,它可以用作每次更改时运行的函数:
function fixDimensions() {
var table = document.getElementById('table');
var trs = table.getElementsByTagName('tr');
for(var i = 0; i < trs.length; i++){
var tds = trs[i].getElementsByTagName('td');
for(var g = 0; g < tds.length; g++){
var ul = tds[g].getElementsByTagName('ul')[0];
ul.style.height = (tds[g].clientHeight - 12) + 'px';
}
}
}
高度上的- 12
用于填充和边框。JSFiddle。
您可以使用td自己绘制边界:http://jsfiddle.net/P5h8d/2/
table {
width: 100%;
background:black;
border-spacing:1px;
}
tr {
min-height: 50px;
width: 100%;
}
tbody th, tbody td {
border: 3px dotted red;
}
th, td {
width: 20%;
background:white;
}
如果:,您可能不需要表格
- 使用CCD_ 13而不是CCD_ 14将CCD_
演示
<section>
<div>
<ul>
<li> itelm</li>...
</ul>
<ul>
<li> itelm</li>...
</ul>
<ul>
<li> itelm</li>...
</ul>
</div>
<div>
<ul>
<li> itelm</li>...
</ul>
<ul>
<li> itelm</li>...
</ul>
<ul>
<li> itelm</li>...
</ul>
</div>
</section>
CSS
section {
display:table;
border-spacing:5px;
}
section > div {
display:table-row;
}
section>div>ul {
display:table-cell;
background:red;
min-width:100px;
}
- 您使用display:flex
演示
使用的基本CSS:
tr {
display:flex;/* reset display:defaut*/
}
td {background:gray;
display:flex;/* here again display reset */
flex-direction:column;/* make sure we draw content from top to bottom */
margin:2px;
}
ul {
padding:0;
margin:5px;;
min-width:100px;
background:red;
flex:1;/* fills or shares whole height of its flex box*/
}
为了不污染我的第一个答案,在这里添加了拖放js
无论ul
的高度如何,li
都会下降!
这里有一种CSS方法来扩展元素周围的区域,以增加它可以捕捉鼠标事件的区域。IE8理解:before
/:after
,所以我们使用它们。并将它们设置在ul
顶部和底部的绝对位置。
演示
使用的CSS:
td {overflow:hidden;/*keep ul:pseudos inside */}
ul {
position:relative;
}
ul:before,
ul:after {
content:'';
position:absolute;
height:200px;/* whatever you need or think it is safe */
left:0;
width:100%;
}
ul:before {
bottom:100%;
}
ul:after {
top:100%;
}
添加到演示的基本HTML5拖放(属性和js),因为它从你的小提琴中丢失了。
function allowDrop(ev){ev.preventDefault();}
function drag(ev){ev.dataTransfer.setData("Text",ev.target.id);}
function drop(ev){ev.preventDefault();
var data=ev.dataTransfer.getData("Text");
ev.target.appendChild(document.getElementById(data));}
- CSS-若窗口太小,滚动条会出现在“表格”单元格上
- 区分电子表格中的空单元格和0值
- 如何将jQuery/AAJAX结果放入表格单元格
- 在谷歌电子表格中循环单元格
- 使用下拉选择菜单高亮显示一行表格单元格
- 如何通过悬停或点击谷歌电子表格中的单元格来运行自定义功能
- 使用javascript下拉菜单更改表格单元格的颜色
- 表格单元格高度与背景高度匹配
- 在表格单元格中查找超链接
- 谷歌应用程序脚本-onFormSubmit-复制到电子表格中的单元格
- 为什么谷歌应用程序的电子表格setValue函数没有在单元格中设置值
- 数据表 ..如何根据表格的单元格值更改单元格的颜色
- 如何使用单击属性和工具提示动态创建表格单元格,该工具提示将超链接到页面
- 在 DIV 中定位表格单元格
- 单击时将表格单元格从范围更改为输入
- 使用 javascript 为 HTML 表格单元格指定颜色
- 将单击表格单元格重定向到其中的
- JQuery insertAfter();移动下一个表格单元格
- 将工作表复制到新的电子表格,将单元格值添加到新电子表格名称的末尾
- 单击并用CTRL+C复制值时高亮显示html表格单元格