【问题标题】:How to get td cell to be high enough to hold contents如何让 td 单元格足够高以容纳内容
【发布时间】:2019-07-16 14:00:16
【问题描述】:

浏览器显示的 td 空间不足,无法容纳内容

我有一个表格单元格,其内容是一个样式标签。样式化的 a 标签的高度是 29px,但 td 单元格的 content-height 属性是 19px,即正在使用的字体的 line-height 值。我在 Firefox 检查器中看到了这一点。样式化的标签高于简单文本,因为它具有填充和边框。我不明白为什么浏览器在计算用于保存内容的 td 标签的高度和宽度时没有包括内容的填充和边框。我不想明确设置 td 的高度,以防我以后更改 a 标签的样式。我找不到任何关于 td 或任何框如何计算内容区域高度的文档。

td.odd {
  font-family: sans-serif;
  background-color: #F8F8F8;
  border-right: thin solid black;
  border-bottom: thin solid black;
  padding: 2px 2px 2px 2px;
  empty-cells: show;
}

td.left {
  text-align: left;
  float: none;
}

td.center {
  text-align: center;
  float: none;
}

td.right {
  text-align: right;
  float: none;
}

a.button {
  font-family: sans-serif;
  font-weight: bold;
  font-size: 80%;
  text-align: center;
  text-decoration: none;
  background-color: #E0E0E0;
  color: #000000;
  border-top: 2px solid white;
  border-left: 2px solid white;
  border-bottom: 3px solid #606060;
  border-right: 3px solid #606060;
  padding: 4px 12px 4px 12px;
}
<tr id="location">
  <td class="odd right">
    <a href="Location.php?id=$IDLR&amp;lang=$LANG" class="button">
		Details
	</a>
  </td>
  <td class="odd left">
    $LOCATION
  </td>
  <td class="odd center">
    $LOCPRESENT
  </td>
  <td class="odd center">
    $NOTESPRESENT
  </td>
  <td class="odd center">
    $BOUNDPRESENT
  </td>
</tr>

显示不满意的页面示例是https://www.jamescobban.net/FamilyTree/Locations.php?pattern=%5EZephyr&namefld=

注意第一个单元格中的“按钮”如何不适合包含的表格单元格。

我希望 td 中内容区域的大小与 td 中包含的实际元素的大小相匹配。相反,td 使用了一些虚构的元素,它只是文本的高度。

【问题讨论】:

    标签: css html-table


    【解决方案1】:

    这是由于单元格内容的显示方式造成的。 &lt;a&gt; 元素默认显示为内联,因此它们的高度将被视为行高。在您的示例中,尝试将display: blockdisplay: inline-block 添加到a.button 规则中。

    演示:

    table, th, td {
      border: 1px solid black;
    }
    
    .button {
      background: #ddd;
      padding: 5px;
      border: 2px solid black;
    }
    
    .block {
      display: block;
    }
    <h4>Bad Table:</h4>
    <table><tr>
      <td><a class="button">Button A</a></td>
      <td>Another Cell 1</td>
    </tr><tr>
      <td><a class="button">Button B</a></td>
      <td>Another Cell 2</td>
    </tr></table>
    
    <h4>Good Table:</h4>
    <table><tr>
      <td><a class="button block">Button A</a></td>
      <td>Another Cell 1</td>
      </tr><tr>
      <td><a class="button block">Button B</a></td>
      <td>Another Cell 2</td>
    </tr></table>

    【讨论】:

    • 这行得通。但是我不明白为什么会这样。或者更具体地说,我在任何解释此行为的网站上都找不到任何文档。具体来说,我找不到任何描述封闭框(在这种情况下为 td)如何确定其内容区域的大小的内容,该内容区域本身就是一个框。例如,Mozilla 网站上关于盒子模型的讨论中没有提到 CSS 显示属性。那么这种行为记录在哪里,以便未来的程序员不会浪费时间?
    • @JamesCobban 我相信这篇文章很好地解释了它:maxdesign.com.au/articles/inline
    • 再次感谢,但这不是一个权威网站,我不明白如何根据我的问题选择合适的搜索词来找到那篇文章。 block 和 inline 的区别通常只描述为前后是否有换行符。为什么我要在表格单元格内换行?甚至 CSS 中关于高度和宽度的不适用性的提及也没有突出,因为我没有指定这些属性中的任何一个。添加显示还修复了另一个页面上另一个烦人的显示工件。我反对奥术咒语。
    猜你喜欢
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 2011-10-08
    • 1970-01-01
    • 2011-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多