我有一张桌子,里面有酒吧。我display: table-cell
用来对齐底部的内容。问题是容器div
s 不再水平对齐在它们对应TH
的 s 上(它们的宽度没有设置)
2 回答
问题
使用 - 属性时的问题table-cell
在于它的行为类似于“真正的表格单元格”,而不再像block
- 或 -inline
元素。当父元素table-row
和table
缺失时,它们是匿名生成的。所以盒子里的东西都会像松动一样margin
。
您可以在此处阅读有关此内容的更多信息:“可视格式化模型中的表格”
我稍微重建了您的 HTML 结构,这似乎工作正常:
演示
http://jsfiddle.net/insertusernamehere/XPSQG/
CSS
<style>
#graph th {
background: red;
}
#graph td {
min-width: 30px;
margin: 0;
padding: 0;
color: #222222;
}
#graph div {
display: block;
position: relative;
margin: 0 auto;
width: 30px;
max-width: 30px;
height: 100px;
background-color: #EFEFEF;
border: 1px solid #000000;
}
#graph span {
position: absolute;
left: 0;
top: -20px;
width: 100%;
color: #222222;
font-size: 16px;
line-height: 16px;
text-align: center;
}
#graph p.color {
position: absolute;
right: 0;
bottom: 0px;
width: 100%;
margin: 0;
color: #222222;
}
#graph p.color.c1 {
background: #0f0;
}
#graph p.color.c2 {
background: blue;
}
</style>
html
<div id="graph">
<table>
<tr>
<td><div><p class="color c1" style="height:20px;"><span>1</span></p></div></td>
<td><div><p class="color c2" style="height:30%;"><span>2</span></p></div></td>
<td><div><p class="color c1" style="height:40%;"><span>3</span></p></div></td>
<td><div><p class="color c2" style="height:50%;"><span>4</span></p></div></td>
</tr>
<tr>
<th>1</th>
<th>2</th>
<th>3</th>
<th>Some long value</th>
</tr>
</table>
</div>
这个怎么运作
它基本上将列的内容(绿色百分比<p>
标签)放在底部。要将数字放在上面,您可以轻松地将它们放在<p>
-tag 中,然后再次将它们“移出”。这是由这部分完成的:
top: -20px;
font-size: 16px;
line-height: 16px;
这表示行高和字体大小为 16px。top: -16px
将其完全移出就足够了 - 额外的 4px 添加了一个不错的填充。:)
希望你能明白。
笔记
您在某处使用了此属性:
countunit="0_1_0"
由于这不是有效的 HTML,请使用data
-prefix:
data-countunit="0_1_0"
这是有效的 HTML5,它也不会在旧浏览器中造成任何问题。
有一个技巧可以让一个元素水平居中 display: table-cell 在另一个元素中。
假设周围元素具有 .table-wrapper 类,而内部元素具有 .table-cell。使用以下 CSS:
.table-wrapper {
display: table;
width: 100%;
text-align: center;
}
.table-cell {
vertical-align: middle;
}
这样,您可以在 .table-cell 中垂直和水平地居中文本或任何您想要的内容。