使表格单元格中的链接填充整个行高

Bri*_*her 64 html css

我有一个数据表,每个单元格都是一个链接.我想允许用户单击表格单元格中的任意位置并让它们按照链接进行操作.有时表格单元格不止一行,但并非总是如此.我使用td a {display:block}来获取覆盖大部分单元格的链接.当一行中有一个单元格是两行而其他单元格只有一行时,一个单元格不会填充表格行的整个垂直空间.这是示例HTML,您可以在这里看到它http://www.jsfiddle.net/RXHuE/:

<head>
<style type="text/css">
  td {width: 200px}
  td a {display: block; height:100%; width:100%;}
  td a:hover {background-color: yellow;}
</style>
<title></title>
</head>
<body>
<table>
  <tbody>
    <tr>
      <td>
        <a href="http://www.google.com/">Cell 1<br>
        second line</a>
      </td>
      <td>
        <a href="http://www.google.com/">Cell 2</a>
      </td>
      <td>
        <a href="http://www.google.com/">Cell 3</a>
      </td>
      <td>
        <a href="http://www.google.com/">Cell 4</a>
      </td>
    </tr>
  </tbody>
</table>
</body>
Run Code Online (Sandbox Code Playgroud)

zob*_*ier 102

在块元素上设置任意大的负边距和相等的填充,并在父元素上隐藏溢出.

td {
    overflow: hidden;
}
td a {
    display: block;
    margin: -10em;
    padding: 10em;
}
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/RXHuE/213/

  • 这很聪明,但不幸的是,如果您使用表格单元格进行自适应导航,则需要从该导航中删除下拉菜单. (4认同)
  • 你又脏又脏又性感的男人.这是邪恶的天才,我喜欢它. (4认同)
  • 我喜欢这一个。我没有使用JS。 (2认同)
  • 最佳解决方案。还允许您仍然垂直居中文本,其他解决方案似乎有问题。唯一的问题是,在 Android 版 Chrome(也可能是其他浏览器)上,当您点击链接时,整个大链接都会突出显示,包括 &lt;a&gt; 之外的部分。可通过 -webkit-tap-highlight-color: rgba(0, 0, 0, 0) 修复; (2认同)

Gau*_*ena 42

您需要对CSS进行一些小改动.制作td height:100%;作品IE 8和FF 3.6,但它并不适用于Chrome浏览器.

td {
  width: 200px;
  border: solid 1px green;
  height: 100%
}
td a {
  display: block;
  height:100%;
  width:100%;
}
Run Code Online (Sandbox Code Playgroud)

但要做出height50px作品的Chrome除了IE和FF

td {
  width: 200px;
  border: solid 1px green;
  height: 50px
}
td a {
  display: block;
  height:100%;
  width:100%;
}
Run Code Online (Sandbox Code Playgroud)

编辑:

你已经在这里的另一篇文章中给出了解决方案; 哪个是用的display: inline-block;.这与我的Chrome,FF3.6,IE8解决方案结合使用时可以使用

td {
  width: 200px;
  border: solid 1px green;
  height: 100%}
td a {
  display: inline-block;
  height:100%;
  width:100%;
}
Run Code Online (Sandbox Code Playgroud)

更新

以下代码适用于IE8,FF3.6和chrome.

CSS

td {
  width: 200px;
  border: solid 1px green;
  height: 100%;
}
td a {
  display: inline-block;
  height:100%;
  width:100%;
}
td a:hover {
  background-color: yellow;
}
Run Code Online (Sandbox Code Playgroud)

HTML

<table>
  <tbody>
    <tr>
      <td>
        <a href="http://www.google.com/">Cell 1<br>
        second line</a>
      </td>
      <td>
        <a href="http://www.google.com/">Cell 2</a>
      </td>
      <td>
        <a href="http://www.google.com/">Cell 3</a>
      </td>
      <td>
        <a href="http://www.google.com/">Cell 4</a>
      </td>
    </tr>
  </tbody>
</table>
Run Code Online (Sandbox Code Playgroud)

这个例子就在这里

  • 不幸的是,链接的示例仅适用于怪异模式.将`<!DOCTYPE html>`放在文档的顶部,它就会中断. (3认同)
  • 好建议,但是,我不想修复单元格的高度。我基本上向用户显示一个数据表,有时一行有一个包含大量数据的单元格,导致它换行,但有时一行中没有这样的单元格。 (2认同)

Jac*_*_Hu 6

聚会有点晚了,但我刚刚发现了一个很好的解决方案。

您可以使用相对和绝对定位元素的组合,以及一个伪元素来获得您正在寻找的效果。不需要额外的标记!

将表格单元格 ( <td>)更改为position: relative;,并在标签上创建一个::before ::after伪元素<a>,并将其设置为position: absolute;,并使用top: 0; left: 0; right: 0; bottom: 0;

因为伪元素附加到锚标签,并且你告诉它占据整个表格单元格,它会强制锚标签至少是那个大小,同时不影响锚标签本身的实际内容(从而保持其垂直居中对齐)。

例如

table {
  border-collapse: collapse;
  table-layout: fixed;
}

td {
  position: relative;
  width: 200px;
  padding: 0.5em 1em;
  border: 2px solid red;
  
  background-color: lime;
}

td a {
  /* FONT STYLES HERE */
  text-decoration: none;
}

td a::after {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 0;
}
Run Code Online (Sandbox Code Playgroud)
<table>
  <tbody>
    <tr>
      <td>
        <a href="http://www.google.com/">Cell 1<br>
        second line</a>
      </td>
      <td>
        <a href="http://www.google.com/">Cell 2</a>
      </td>
      <td>
        <a href="http://www.google.com/">Cell 3</a>
      </td>
      <td>
        <a href="http://www.google.com/">Cell 4</a>
      </td>
    </tr>
    <tr>
      <td>
        <a href="http://www.google.com/">Cell 5</a>
      </td>
      <td>
        <a href="http://www.google.com/">Cell 6<br>
        second line</a>
      </td>
    </tr>
  </tbody>
</table>
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!

  • 也将背景颜色应用于 after 元素... `td a, td a:after { background-color: red; }` (2认同)