【问题标题】:Why are cellspacing and cellpadding not CSS styles为什么 cellpacing 和 cellpadding 不是 CSS 样式
【发布时间】:2010-09-25 05:54:12
【问题描述】:

我不知道为什么这让我如此烦恼,但是当我创建网站时,我总是尝试使用 CSS 来完成我的所有样式设置。然而,当我使用表格时,我必须记住的一件事是添加 cellspacing="0" 和 cellpadding="0"

为什么没有 CSS 属性来覆盖这些过时的 HTML 4 属性?

【问题讨论】:

    标签: html css html-table cellpadding cellspacing


    【解决方案1】:

    Cellspacing

    table { border-collapse: collapse; }
    

    至于cellpadding,你可以做

    table tr td, table tr th { padding: 0; }
    

    【讨论】:

    • 谢谢你,我从来没有真正理解边界折叠的意思。我将不得不开始使用它,而不是使用旧的 HTML 属性方式。
    • 好吧,没有border-collapse,如果有两个相邻的单元格每个都有1px的边框,你最终会有一个2px的边框,因为边框是相邻的,使用border-collapse,边框是,好吧,崩溃了:-)
    • 注意border-collapse:collapse产生的视觉效果与cellspacing="0"完全不同;这两种方法实际上并不等同或以任何有意义或有用的方式互换。
    • 我对 CSS 中的“border-collapse:collapse”投了反对票,它有不同的目的(它的效果是完全删除间距,因为它将合并内部通过将它们除以 2) 来划分单元格的边界。正确答案是 CSS 中 cellspacing="n" 属性的“border-spacing: n”。 "border-spacing:0" 仍然不会折叠内部边框或单元格,它们只是粘在一起。
    【解决方案2】:

    mat 已经回答了,但只是为了完整性:

    • paddingcellpadding
    • border-spacingcellspacing
    • border-collapse → 没有 HTML 等效项

    还值得记住的是,您可以为 CSS 设置单独的水平和垂直值,例如border-spacing: 0 1px.

    【讨论】:

    • +1 用于边框间距。在我的情况下,border-collapse 在某些表格中会产生奇怪的粗体边框,但 border-spacing:0;实际上与表格元素中的 cellspacing="0px" 属性相同。
    【解决方案3】:

    Eric Myer 的 reset stylesheet 包含以下表格的“重置”样式:

    /* tables still need 'cellspacing="0"' in the markup */
    table {
        border-collapse: collapse;
        border-spacing: 0;
    }
    

    除了TD,TR都被重置了:

    thead, tr, th, td {
        margin: 0;
        padding: 0;
        border: 0;
        outline: 0;
        font-size: 100%;
        vertical-align: baseline;
        background: transparent;
    }
    

    我提到这个的原因是他有一个评论'tables still need cellpadding=0'。我想他把它放在这里是有原因的——可能是一些旧浏览器需要的。从这是他收录的极少数 cmets 之一这一事实来看,我猜它很重要,而且有充分的理由。

    基于此评论 - 仅此评论! - 我将继续在标记中使用 cellspacing="0" ,除非有人明确(如下)告诉我为什么不需要。然而,在当今任何值得支持的现代浏览器中,它可能是不必要的。

    【讨论】:

      【解决方案4】:
      table { border-collapse:collapse; }
      

      【讨论】:

        【解决方案5】:

        我猜有人认为单元格间距是“不好的做法”。我如何理解它等同于包含在 CSS2 标准中,但 IE 不支持此属性。 border-collapse 允许将间距设置为 0 值。单元格填充可以通过将填充属性设置为表格的 TD 元素来实现。

        【讨论】:

          【解决方案6】:

          遗憾的是,单元格不能从行 (tr) 的 CSS 属性继承其默认填充,否则如果不是“初始”,则从行组 (thead/tbdy/tfoot) 继承,如果不是“初始”,则从 colgroup 继承,或整张桌子。

          “cellspacing”没有这个问题(但实际上它们是单元格周围的边距,这些外边距与相邻单元格的边距一起折叠,并与表格/行组或行的内部填充一起填充它们通过表格的“背景”设置(表格背景还包括表格的“边框”,该边框绘制在其顶部,并且还将此背景剪辑到表格边框的外边缘,特别是当此边框具有圆角时)。

          但是对于单元格填充,将“单元格填充:n”定义为表格或组属性会更简单,而不是在每个单元格上分别明确地使用自己的“边框:n”样式(应该只如果我们需要覆盖某些特定单元格中的填充,则使用它)。

          【讨论】:

            猜你喜欢
            • 2021-11-08
            • 1970-01-01
            • 2018-03-29
            • 2012-07-29
            • 1970-01-01
            • 1970-01-01
            • 2017-04-16
            • 1970-01-01
            相关资源
            最近更新 更多