提问人:Madara's Ghost 提问时间:2/14/2012 最后编辑:Bumhan YuMadara's Ghost 更新时间:12/5/2022 访问量:224157
Colspan/Rowspan,用于显示设置为 table-cell 的元素
Colspan/Rowspan for elements whose display is set to table-cell
问:
我有以下代码:
.table {
display: table;
}
.row {
display: table-row;
}
.cell {
display: table-cell;
}
.colspan2 {
/* What to do here? */
}
<div class="table">
<div class="row">
<div class="cell">Cell</div>
<div class="cell">Cell</div>
</div>
<div class="row">
<div class="cell colspan2">Cell</div>
</div>
</div>
很简单。如何为元素添加 colspan(或等效的 colspan)?display: table-cell
答:
只需使用 .table
只有当用于布局目的时,表才会受到反对。
这似乎是表格数据(数据行/列)。因此,我建议使用 .table
有关更多信息,请参阅我对此问题的回答:
评论
tr
td
据我所知,缺少 colspan/rowspan 只是 的局限性之一。看这个帖子:display:table
http://www.onenaught.com/posts/201/use-css-displaytable-for-layout
使用嵌套表嵌套列跨度...
<div class="table">
<div class="row">
<div class="cell">
<div class="table">
<div class="row">
<div class="cell">Cell</div>
<div class="cell">Cell</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="cell">Cell</div>
</div>
</div>
或者使用 2 个表,其中列跨度覆盖整行......
<div class="table">
<div class="row">
<div class="cell">Cell</div>
<div class="cell">Cell</div>
</div>
</div>
<div class="table">
<div class="row">
<div class="cell">Cell</div>
</div>
</div>
评论
由于 OP 没有明确规定解决方案必须是纯 CSS,因此我会固执地提出我今天想出的解决方法,特别是因为它比在表格中放置表格要优雅得多。
示例等于 <table>每行和两行有两个单元格,其中第二行中的单元格是带有 的 td。colspan="2"
我已经用 Iceweasel 20、Firefox 23 和 IE 10 对此进行了测试。
div.table {
display: table;
width: 100px;
background-color: lightblue;
border-collapse: collapse;
border: 1px solid red;
}
div.row {
display: table-row;
}
div.cell {
display: table-cell;
border: 1px solid red;
}
div.colspan,
div.colspan+div.cell {
border: 0;
}
div.colspan>div {
width: 1px;
}
div.colspan>div>div {
position: relative;
width: 99px;
overflow: hidden;
}
<div class="table">
<div class="row">
<div class="cell">cell 1</div>
<div class="cell">cell 2</div>
</div>
<div class="row">
<div class="cell colspan">
<div><div>
cell 3
</div></div>
</div>
<div class="cell"></div>
</div>
</div>
真人秀(演示)在这里。
编辑: 我微调了代码,使其更适合打印,因为它们默认保留了背景色。我还创建了 rowspan-demo,灵感来自这里的迟到答案。
评论
<div class="cell"></div>
width
div.colspan>div>div
div.colspan{border-left:1px solid red}
在Chrome 30中为我工作的更简单的解决方案:
Colspan 可以通过使用 而不是 for 行来模拟:display: table
display: table-row
.table {
display: block;
}
.row {
display: table;
width: 100%;
}
.cell {
display: table-cell;
}
.row.colspan2 {/* You'll have to add the 'colspan2' class to the row, and remove the unused <div class=cell> inside it */
display: block;
}
唯一的缺陷是堆叠行的单元格不会垂直对齐,因为它们来自不同的表。
如果你正在寻找一种直接的CSS方法来模拟colspan,你可以使用.display: table-caption
.table {
display: table;
}
.row {
display: table-row;
}
.cell {
display: table-cell;
border: 1px solid #000;
}
.colspan2 {
/* What to do here? */
display: table-caption;
}
<div class="table">
<div class="row">
<div class="cell">Cell</div>
<div class="cell">Cell</div>
</div>
<div class="row">
<div class="cell colspan2">Cell</div>
</div>
</div>
评论
通过使用适当的 div 类和 CSS 属性,可以模拟 colspan 和 rowspan 的所需效果。
这是 CSS
.table {
display:table;
}
.row {
display:table-row;
}
.cell {
display:table-cell;
padding: 5px;
vertical-align: middle;
}
下面是示例 HTML
<div class="table">
<div class="row">
<div class="cell">
<div class="table">
<div class="row">
<div class="cell">X</div>
<div class="cell">Y</div>
<div class="cell">Z</div>
</div>
<div class="row">
<div class="cell">2</div>
<div class="cell">4</div>
<div class="cell">6</div>
</div>
</div>
</div>
<div class="cell">
<div class="table">
<div class="row">
<div class="cell">
<div class="table">
<div class="row">
<div class="cell">A</div>
</div>
<div class="row">
<div class="cell">B</div>
</div>
</div>
</div>
<div class="cell">
ROW SPAN
</div>
</div>
</div>
</div>
</div>
</div>
从我在这两个问题和大多数回答中看到的情况来看,人们似乎忘记了在任何充当“表单元格”的给定 div 中,您可以插入另一个充当嵌入式表的 div,然后重新开始该过程。
它并不迷人,但它确实适用于那些寻找此类格式并且他们希望避免 TABLE 的人。如果它用于 DATA LAYOUT,则 TABLE 在 HTML5 中仍然有效。
希望这会对某人有所帮助。
评论
<table>
<ul>
<table>
您可以将 colspan 内容的位置设置为“相对”,将行设置为“绝对”,如下所示:
.table {
display: table;
}
.row {
display: table-row;
position: relative;
}
.cell {
display: table-cell;
}
.colspan2 {
position: absolute;
width: 100%;
}
即使这是一个老问题,我也想分享我对这个问题的解决方案。
<div class="table">
<div class="row">
<div class="cell">Cell</div>
<div class="cell">Cell</div>
</div>
<div class="row">
<div class="cell colspan">
<div class="spanned-content">Cell</div>
</div>
</div>
</div>
<style>
.table {
display: table;
}
.row {
display: table-row;
}
.cell {
display: table-cell;
}
.colspan:after {
/* What to do here? */
content: "c";
display: inline;
visibility: hidden;
}
.spanned-content {
position: absolute;
}
</style>
这是一把小提琴。 这不是一个真正的跨度,解决方案有点笨拙,但在某些情况下很有用。在 Chrome 46、Firefox 31 和 IE 11 上测试。
就我而言,我必须以表格方式呈现一些非表格数据,保持列的宽度并为数据的子部分提供标题。
评论
CSS的
.tablewrapper {
position: relative;
}
.table {
display: table;
position: relative
}
.row {
display: table-row;
}
.cell {
border: 1px solid red;
display: table-cell;
}
.cell.empty
{
border: none;
width: 100px;
}
.cell.rowspanned {
position: absolute;
top: 0;
bottom: 0;
width: 100px;
}
.cell.colspan {
position: absolute;
left: 0;
right: 0;
}
[HTML全文]
<div class="tablewrapper">
<div class="table">
<div class="row">
<div class="cell rowspanned">
Center
</div>
<div class="cell">
Top right
</div>
</div>
<div class="row">
<div class="cell empty"></div>
<div class="cell colspan">
Bottom right
</div>
</div>
</div>
</div>
你目前无法做到这一点。
AFAIK 这将包含在 CSS Tables 中,该规范目前似乎处于“正在进行中”状态。
您可以尝试此解决方案,您可以在其中找到如何使用 div https://codepen.io/pkachhia/pen/JyWMxY 应用 colspan
HTML格式:
<div class="div_format">
<div class="divTable">
<div class="divTableBody">
<div class="divTableRow">
<div class="divTableCell cell_lable">Project Name</div>
<div class="divTableCell cell_value">: Testing Project</div>
<div class="divTableCell cell_lable">Project Type</div>
<div class="divTableCell cell_value">: Web application</div>
</div>
<div class="divTableRow">
<div class="divTableCell cell_lable">Version</div>
<div class="divTableCell cell_value">: 1.0.0</div>
<div class="divTableCell cell_lable">Start Time</div>
<div class="divTableCell cell_value">: 2016-07-10 11:00:21</div>
</div>
<div class="divTableRow">
<div class="divTableCell cell_lable">Document Version</div>
<div class="divTableCell cell_value">: 2.0.0</div>
<div class="divTableCell cell_lable">End Time</div>
<div class="divTableCell cell_value">: 2017-07-10 11:00:23</div>
</div>
<div class="divTableRow">
<div class="divTableCell cell_lable">Document Revision</div>
<div class="divTableCell cell_value">: 3</div>
<div class="divTableCell cell_lable">Overall Result</div>
<div class="divTableCell cell_value txt_bold txt_success">: Passed</div>
</div>
</div>
<div class="divCaptionRow">
<div class="divCaptionlabel">Description</div>
<div class="divCaptionValue">: Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore</div>
</div>
</div>
</div>
CSS:
body {
font-family: arial
}
* {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box
}
.div_format {
width: 100%;
display: inline-block;
position: relative
}
.divTable {
display: table;
width: 100%;
}
.divTableRow {
display: table-row
}
.divTableHeading {
background-color: #EEE;
display: table-header-group
}
.divTableCell,
.divTableHead {
display: table-cell;
padding: 10px
}
.divTableHeading {
background-color: #EEE;
display: table-header-group;
font-weight: bold
}
.divTableFoot {
background-color: #EEE;
display: table-footer-group;
font-weight: bold
}
.divTableBody {
display: table-row-group
}
.divCaptionRow{
display: table-caption;
caption-side: bottom;
width: 100%;
}
.divCaptionlabel{
caption-side: bottom;
display: inline-block;
background: #ccc;
padding: 10px;
width: 15.6%;
margin-left: 10px;
color: #727272;
}
.divCaptionValue{
float: right;
width: 83%;
padding: 10px 1px;
border-bottom: 1px solid #dddddd;
border-right: 10px solid #fff;
color: #5f5f5f;
text-align: left;
}
.cell_lable {
background: #d0d0d0;
border-bottom: 1px solid #ffffff;
border-left: 10px solid #ffffff;
border-right: 10px solid #fff;
width: 15%;
color: #727272;
}
.cell_value {
border-bottom: 1px solid #dddddd;
width: 30%;
border-right: 10px solid #fff;
color: #5f5f5f;
}
这是我在 CSS 中跨越列的一种方法,我用于我自己的情况。
https://jsfiddle.net/mb8npttu/
.table {
display: table;
}
.row {
display: table-row;
}
.cell {
display: table-cell;
border: 1px dotted red;
}
.colspan {
max-width: 1px;
overflow: visible;
}
<div class='table'>
<div class='row'>
<div class='cell colspan'>
spanning
</div>
<div class='cell'></div>
<div class='cell'></div>
</div>
<div class='row'>
<div class='cell'>1</div>
<div class='cell'>2</div>
<div class='cell'>3</div>
</div>
</div>
评论
.colspan
white-space: nowrap;
有一种解决方案可以使 colspan 成为整个桌子的 widht。不能使用此技术来并列表的一部分。
法典:
* {
box-sizing: border-box;
}
.table {
display: table;
position: relative;
}
.row {
display: table-row;
}
.cell {
display: table-cell;
border: 1px solid red;
padding: 5px;
text-align: center;
}
.colspan {
position: absolute;
left: 0;
width: 100%;
}
.dummycell {
border-color: transparent;
}
<div class="table">
<div class="row">
<div class="cell">Cell</div>
<div class="cell">Cell</div>
</div>
<div class="row">
<div class="cell dummycell"> </div>
<div class="cell colspan">Cell</div>
</div>
<div class="row">
<div class="cell">Cell</div>
<div class="cell">Cell</div>
</div>
</div>
解释:
我们在 colspan 上使用绝对位置来使其成为桌子的整个宽度。表本身需要相对位置。我们使用虚拟单元来保持行的高度,绝对位置不跟随文档的流程。
当然,现在你也可以使用flexbox和grid来解决这个问题。
它可以通过纯CSS来完成,并将文本居中在“假”colspan上。
诀窍是将行设置为 ,然后将“空 div”放在您要制作的位置(它们必须具有才能工作),将内容所在的位置设置为 ,最后,应用于单元格内的元素(并将其居中,就像您可以居中任何其他绝对元素一样)。position:relative
row
colspan
height
cell
display:grid
position:absolute
.table {
display: table;
}
.row {
display: table-row;
position: relative;
}
.cell {
display: table-cell;
background-color: blue;
color: white;
height: 26px;
padding: 0 8px;
}
.colspan2 {
display: grid;
}
.colspan2 p {
position:absolute;
left: 50%;
transform:translateX(-50%);
margin: 0;
}
<div class="table">
<div class="row">
<div class="cell">Cell</div>
<div class="cell">Cell</div>
</div>
<div class="row">
<div class="cell colspan2"><p>Cell</p></div>
<div class="cell"></div>
</div>
</div>
评论
display: table-cell