【问题标题】:Set empty table cell height 100%设置空表单元格高度 100%
【发布时间】:2012-08-26 03:25:19
【问题描述】:

我有一个包含 3 个tds 的表格行。中间td有文字,所以有一定的高度,例如100 像素。

左侧和右侧的两个tds 包含一个表格,每个表格显示一个(稍后)可点击区域,该区域应该与中间td 具有相同的高度 - 在我的示例中为 100px。

不幸的是,只有 Firefox 将左右 tds 拉伸到 100% 高度。 Chrome、Safari 和 IE 只需将其置于最小高度。

这是小提琴:http://jsfiddle.net/X3YAu/

我玩过display 属性,但没有帮助。 100% 高度不是指父元素吗?如果是,为什么tds 不延伸到父元素的 100% 高度?

【问题讨论】:

  • 你为什么要先用total empty <tr>
  • 请用基本的 css 和 HTML 摆弄一下。
  • @diEcho 我知道 html 看起来很复杂 - 确实如此,但我已经尝试只选择要领。真正的东西要重得多

标签: css cross-browser


【解决方案1】:

保持空白单元格高度为 100%

对于<th><td>

th:empty::before,td:empty::before{content:'\00a0';visibility:hidden}

仅限<td>

td:empty::before{content:'\00a0';visibility:hidden}

说明:

'\00a0' 是单个空格的代码

visibility:hidden 隐藏那个空格

【讨论】:

    【解决方案2】:

    你只需要:

    table { empty-cells: show; 
    min-width: 130px; //example.
    }
    

    就是这样,它对我有用

    【讨论】:

      【解决方案3】:

      另一个技巧是使用:after 伪元素:

      td.empty:after {
        content: 'Empty cell';
        visibility: hidden;
        speak: none;
      }
      

      这应该适用于任何浏览器(在 Windows 7 上的 Chrome 中测试),并为您节省大量   并将更好的演示与逻辑分开。

      【讨论】:

        【解决方案4】:

        我在another thread 中找到了这个答案,它奏效了。这种方式不需要为空白单元格放置额外的空间。

        td a {
          display: inline-block;
          height:100%;
          width:100%;
        }
        

        【讨论】:

          【解决方案5】:

            放入空的<td></td> 应该会有所帮助。


          添加信息:

          我完全重写了你的代码,因为你有很多无用的标签,这应该可以:

          <table align="center" width="100%" cellpadding="0" cellspacing="0">
              <tr>
                  <td align="center" width="100%" height="20" colspan="3" bgcolor="#A9DBF5">
                      <img src="http://cdn2.iconfinder.com/data/icons/splashyIcons/arrow_large_up.png" width="16" height="16" title="Up" alt="Arrow up" style="display:inline-block;" />
                  </td>
              </tr>
              <tr>
                  <td align="center" width="22" height="100">
                      <img src="http://cdn2.iconfinder.com/data/icons/splashyIcons/arrow_large_left.png" width="16" height="16" title="Left" alt="Arrow left" style="display:inline-block;padding:3px;background:#A9DBF5;" />
                  </td>
                  <td align="left" height="100" bgcolor="#FFFFFF">
                      Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.
                  </td>
                  <td align="center" width="22" height="100">
                      <img src="http://cdn2.iconfinder.com/data/icons/splashyIcons/arrow_large_right.png" width="16" height="16" title="Right" alt="Arrow right" style="display:inline-block;padding:3px;background:#A9DBF5;" />
                  </td>
              </tr>
              <tr>
                  <td align="center" width="100%" height="20" colspan="3" bgcolor="#A9DBF5">
                      <img src="http://cdn2.iconfinder.com/data/icons/splashyIcons/arrow_large_down.png" width="16" height="16" title="Down" alt="Arrow down" style="display:inline-block;" />
                  </td>
              </tr>
          </table>
          

          如您所见,我没有使用空的 &lt;td&gt;s ,而是在其中放置一个参数 colspan="3" ,将一个 td 完全分布在三列上。

          这是一个演示:jsbin LINK

          请注意,我没有像您那样使用 border-radiusborder css,以保持代码尽可能短,以便您了解。

          【讨论】:

          • 显示 td - 这不是问题。问题是高度没有调整到 100%...
          • 好的,你的代码写的不是最好的,例如你的表中有很多空的tds,你可以使用colspan属性将它们全部归为一个td。我正在更新我的答案以及html 代码。
          【解决方案6】:

          可以在您的解决方案中使用 jQuery 吗?如果是这样,您可以将以下内容放入一个函数中并在加载时调用它,并且每当表调整大小时(如果它调整大小)

          $('.ghost.column table').height($('.ghost.column').height())
          

          我还想知道使用表格是否是实现您目标的最佳方法?这是有原因的,还是可以尝试使用&lt;div&gt; 元素代替?

          工作演示: http://jsfiddle.net/X3YAu/14/

          【讨论】:

            【解决方案7】:

            没有height: 100%.这样的东西

            一个元素永远无法通过传递height: 100% 来填充其父级高度,添加&amp;nbsp;table {empty-cells: show;} 的解决方案应该可以解决问题,但如果没有特定的高度,您将永远无法获得所需的效果。

            【讨论】:

            • FireFox 处理事情的方式与 Chrome、Safari 或 Opera 和 Internet Explorer 一样。如果 FF 这样做,则不要将其作为参考,而所有其他浏览器都不会。就像我说的:没有高度这样的东西:100%。
            • 在将.ghost.column 设置为display: inline-block; 时,它如何在Chrome 中工作? jsfiddle.net/X3YAu/10
            • 那是因为你错了。当然,一个元素可以通过 height: 100% jsfiddle.net/G8hwd/1 来填充其父高度,如果它实际上没有...
            • 好的,那是因为你在你的父母中传递了一个高度,但是在你原来的问题中(回到你原来的问题),你没有在父元素中传递一个高度(在你的 jsfiddle ),所以孩子只会占据它需要的高度。这就是我的意思,没有高度:如果没有设置高度,则为 100%
            • 但在我原来的问题中,表格行的特定高度由中间的非空表格单元格确定。所以左右表格单元格应该与中间td和父tr具有相同的高度。所以我要做的就是将箭头的跨度设置为与tr 相同的高度,我不明白为什么这不适用于height: 100%,因为td 显然具有正确的高度。 ..
            【解决方案8】:

            最好的方法是使用 CSS 方式。

            table { empty-cells: show; }
            

            &amp;nbsp; 方法是一个好方法,但它有点小技巧。

            【讨论】:

            • 遵循cs.tut.fi/~jkorpela/HTML/emptycells.html 推荐的指南以获得最佳实践。因为表格单元格不应该是空的。
            • 好吧,单元格并不是真正的空,里面有一个div 和一个spandiv 是相对定位,span 是绝对定位
            • 不,它没有。显示td - 这不是问题。问题是高度没有调整到 100%...
            • empty-cells: show 是默认值,因此不值得指定。
            • 表格单元格为空不一定是坏事。在真正的表格数据中,它是正确且有意义的,您应该允许屏幕阅读器负责他们希望如何处理它。但正如其他人所说,empty-cells: show 已经默认了一段时间了。
            猜你喜欢
            • 2017-12-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-01-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多