CSS中的HTML colspan

Tow*_*wer 245 css

我正在尝试构建类似于以下内容的布局:

+---+---+---+
|   |   |   |
+---+---+---+
|           |
+-----------+
Run Code Online (Sandbox Code Playgroud)

底部填充上排空间.

如果这是一个真正的表,我可以很容易地实现这一点<td colspan="3">,但由于我只是创建一个类似于表的布局,我不能使用<table>标签.这可能使用CSS吗?

Dav*_*vid 404

没有简单,优雅的CSS模拟colspan.

对这个问题的搜索将返回各种解决方案,其中包括一系列替代方案,包括绝对定位,大小调整,以及类似的各种浏览器和特定情况的警告.阅读,根据您的发现做出最明智的决定.

  • Rob,了解你的立场,但是看看W3C的建议 - 特别是与整个表格范例有关 - 你会发现他们考虑的部分内容肯定是表格的*表示.这种表格纯粹被认为是结构的想法是一种当代小说,我认为我们会更好地停止传播.关键是我们需要停止对表格的教条.我说他们总是*演示是不对的,你说它们总是*结构也是错误的.现实根本就不是那么干脆. (86认同)
  • 2年后,我搜索了这篇文章并希望对作者进行投票,但它说"不能为自己的帖子投票",我意识到这是我,哈哈.我决定将已接受的解决方案更改为此解决方案,因为我觉得它有更好的信息. (70认同)
  • 这是关于其他一些(未说明的)答案的小文章,而不是对所提问题的答案. (13认同)
  • 表是结构元素,只是因为使用colspan更改其外观并不意味着它不是.CSS用于设置元素样式而不更改结构.W3C在此讨论表结构:http://www.w3.org/TR/html401/struct/tables.html#h-11.2 (10认同)
  • 看起来你的答案*是*流行的答案.:)我很高兴得知反表教条(我买的)太严格了.只有在我仍然认为`colspan`是适合这项工作的工具时,我才会坚持我的回答.我的答案是正确的75%,你的答案是100%正确的.你应该回到SO. (4认同)
  • 你的第一段的最后两句应该刻在互联网的结构中. (3认同)
  • 我认为演示与结构论证中的决定因素(至少对我来说)是通过提供"结构"元素的"表示"方面,W3C承认(可以这么说)有一个用例元素看起来像另一个元素.并且扩展这种能力然后在col和行跨度上制动是不公平的,理由是这是一种"结构"属性,而不是风格.在硬币的另一面,我确实认为通过CSS提供col和row span也打开了它在实际表元素上使用的大门,这是不合适的. (2认同)
  • 出于某种原因,当讨论关于使用表格进行布局时,很难在 stackoverflow 中找到一个诚实、客观、非意识形态的答案。这是少数诚实的答案之一,感谢大卫。似乎人们从教条的角度思考,忘记了程序员总是使用“黑客”并利用工具来解决与工具设计的问题不同的问题。当没有大的副作用时,我称之为态度创造力。 (2认同)

Hen*_*zia 54

据我所知,css中没有colspan,但column-span在不久的将来会有多列布局,但由于它只是CSS3中的草稿,你可以在这里查看.无论如何,你可以使用divspan像这样的表格式显示做一个解决方法.

这将是HTML:

<div class="table">
  <div class="row">
    <span class="cell red first"></span>
    <span class="cell blue fill"></span>
    <span class="cell green last"></span>
  </div>
</div>
<div class="table">
  <div class="row">
    <span class="cell black"></span>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

这将是css:

  /* this is to reproduce table-like structure
     for the sake of table-less layout. */
  .table { display:table; table-layout:fixed; width:100px; }
  .row { display:table-row; height:10px; }
  .cell { display:table-cell; }

  /* this is where the colspan tricks works. */
  span { width:100%; }

  /* below is for visual recognition test purposes only. */
  .red { background:red; }
  .blue { background:blue; }
  .green { background:green; }
  .black { background:black; }

  /* this is the benefit of using table display, it is able 
     to set the width of it's child object to fill the rest of 
     the parent width as in table */
  .first { width: 20px; }
  .last { width: 30px; }
  .fill { width: 100%; }
Run Code Online (Sandbox Code Playgroud)

使用这个技巧的唯一原因是为了获得table-layout行为的好处,如果仅将div和span宽度设置为某个百分比并未满足我们的设计要求,我会使用它.

但如果你不需要从这种table-layout行为中受益,那么durilai的回答就足够了.

  • 是的,但有点修复:而不是`.span {...`它应该是`span {...`. (4认同)
  • 这并没有真正回答这个问题,因为在你给出的例子中,你基本上有两个表.(Ietwo divs与班级"表") (3认同)
  • 使用`div`标签显示表格数据与使用`table`控制页面布局一样糟糕 (2认同)
  • @TichomirMitkov 取决于您是否使用响应式设计来更改布局 - 在这种情况下,有时这可以很好地工作。 (2认同)

Win*_*ter 20

另一个建议是使用flexbox而不是表格.这当然是一个"现代浏览器"的东西,但是来吧,它是2016年;)

至少这可能是那些寻求现在答案的人的替代解决方案,因为最初的帖子是从2010年开始的.

这是一个很棒的指南:https://css-tricks.com/snippets/css/a-guide-to-flexbox/

.table {
  border: 1px solid red;
  padding: 2px;
  max-width: 300px;
  display: flex;
  flex-flow: row wrap;
}
.table-cell {
  border: 1px solid blue;
  flex: 1 30%;
}
.colspan-3 {
  border: 1px solid green;
  flex: 1 100%;
}
Run Code Online (Sandbox Code Playgroud)
<div class="table">
  <div class="table-cell">
    row 1 - cell 1
  </div>
  <div class="table-cell">
    row 1 - cell 2
  </div>
  <div class="table-cell">
    row 1 - cell 3
  </div>
  <div class="table-cell colspan-3">
    row 2 - cell 1 (spans 3 columns)
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

  • 我知道这已经很旧了,但是搜索“colspan”会导致这里。2021 年,这是唯一完全回答 OP 问题并得到广泛浏览器支持的答案。 (3认同)

Dus*_*ine 7

<div style="width: 100%;">
    <div style="float: left; width: 33%;">Row 1 - Cell 1</div>
    <div style="float: left; width: 34%;">Row 1 - Cell 2</div>
    <div style="float: left; width: 33%;">Row 1 - Cell 3</div>
</div>
<div style="clear: left; width: 100%;">
Row 2 - Cell 1
</div>
Run Code Online (Sandbox Code Playgroud)

  • 你可以使用 width: calc(100% / 3) ,这比给中间多 1% 的效果要好一点 (2认同)

Tob*_*obi 7

提供最新的答案:今天最好的方法是使用 css 网格布局,如下所示:

.container {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
  grid-template-rows: auto;
  grid-template-areas: 
    "top-left top-middle top-right"
    "bottom bottom bottom"
}

.item-a {
  grid-area: top-left;
}
.item-b {
  grid-area: top-middle;
}
.item-c {
  grid-area: top-right;
}
.item-d {
  grid-area: bottom;
}
Run Code Online (Sandbox Code Playgroud)

和 HTML

<div class="container">
  <div class="item-a">1</div>
  <div class="item-b">2</div>
  <div class="item-c">3</div>
  <div class="item-d">123</div>
</div>
Run Code Online (Sandbox Code Playgroud)


mwc*_*wcz 5

这不是 CSS 权限的一部分。 colspan描述页面内容的结构,或者给表格中的数据赋予一些意义,这是 HTML 的工作。

  • 查看此问题的最高投票答案。你的观点已经在那里讨论过,我倾向于同意。自从我写下这个答案以来的五年里,我对这个问题的看法肯定发生了变化。 (2认同)