【问题标题】:Background Image on <tr><tr> 上的背景图像
【发布时间】:2014-08-14 15:57:36
【问题描述】:

我有一个包含 13 列和未知行数的表,可能是 1,可能是 50+。该表还包裹在滚动包装器中,因此一次只能看到 4 行。某些行需要具有跨越整行的文本“EXPIRED”的背景图像。

我尝试了许多不同的方法来尝试解决这个问题,但还没有找到可行的解决方案。

W3C 说您不能在 &lt;TR&gt; 标记上放置背景图像。这需要改变。

我尝试的一个解决方案是在第一个 &lt;td&gt; 中放置一个 &lt;div&gt; 并使用 CSS 绝对定位它:

<table style="empty-cells:show" class="wiTable">
<tr><td><div class="expired"></div></td>
</table>

.expired {
    background:url("/images/Expired.png") no-repeat left top;
    position: absolute;
    left: 0;
    width: 900px;
    height: 26px;
    z-index: 0;
}

这在一定程度上奏效了。问题是它还将图像放置在被滚动包装器隐藏的行上,并且图像没有随表格滚动。

我想我也可以将图像分成几段并将它们放在单独的单元格中,但这不起作用,因为我需要在多个表格上使用它,并且表格中的单元格不是固定的宽度。

哦,这需要在 IE8 中工作,因为这是我正在使用的环境。

这里是一个绝对定位结果的例子:

【问题讨论】:

标签: html css internet-explorer-8


【解决方案1】:

使用伪类,您可以使用第一个子 TD 而不是 TR 来做一些诡计。这还假设您的表格具有固定宽度,并且每行具有固定高度。这不适用于可变宽度,不过,如果需要,您可以为某些媒体断点输入调整后的宽度。

JS Fiddle Demo

精简 HTML 标记

<div class="container">
    <table>
        <tr>
            <td>Model</td>
            <td>Make</td>
            <td>Miles</td>
            <td>Year</td>
            <td>Options</td>
            <td>Price</td>
        </tr>
        <tr class="expired">
            <td>Model</td>
            <td>Make</td>
            <td>Miles</td>
            <td>Year</td>
            <td>Options</td>
            <td>Price</td>
        </tr>
        <tr class="expired">
            <td>Model</td>
            <td>Make</td>
            <td>Miles</td>
            <td>Year</td>
            <td>Options</td>
            <td>Price</td>
        </tr>
    </table>
</div>

CSS

.container {
    overflow-y: scroll;
    height: 115px;
}

table {
    color: #fff;
    width: 500px;
    border-collapse: collapse;
}

table tr.expired {
    position: relative;
}

table tr.expired td:first-child:before {
    content: "";
    position: absolute;
    width: 500px;
    height: 30px;
    z-index: -100;
    top: 0;
    left: 0;
    /*background: red;*/
    background: url('http://lorempixel.com/output/nightlife-q-c-640-480-3.jpg');
}

table tr.expired td {
    z-index: 100;
    position: relative;
    background: transparent !important;
}

table tr td {
    padding: 5px;
    background: #999;
}

table tr:nth-child(odd) td {
    background: #ccc;
}

【讨论】:

  • 谢谢!这很完美!我无法告诉你我做了多少谷歌搜索来尝试让它发挥作用。
  • 一般来说,在尝试设置 TR 样式时,找出一种设置 TD 样式的方法会更容易或更有效。它们提供了更多的多功能性。 TR 使用的显示属性将其锁定为无法做很多事情,而 TD 则不受限制。尽管如此,我所做的并不完美,因为它依赖于知道你的宽度和高度。如果没有 javascript 的帮助,如果不是不可能的话,让它具有响应性将是非常困难的。
【解决方案2】:

我想出了一个流体表的解决方法。它涉及在实际行上方插入一个“虚拟”行,其中包含一个单元格,其中包含一个呈现背景图像的 div。 div 使用设置为背景图像高度的负下边距来与其下方的“真实”行重叠。在我的示例中完美像素。

CSS:

tr.gradient td div{
    width: 100%;
    height: 28px;    
    margin: 0 0 -28px 0;
    background: #000 url(/pics/table_head.png) repeat-y top left;
    color: #FFF;
    background-size: 100%;
    padding:0;
}

HTML:

<table>
   <tr class="gradient"><td colspan="2"><div>&nbsp;</div></td></tr>
    <tr>
        <th>Strengths</th>
        <th>Weaknesses</th>
    </tr>
    <tr>
        <td>
            whatever</td>
        <td>
            whatever</td>
    </tr>
  <tr class="gradient"><td colspan="2"><div>&nbsp;</div></td></tr>
    <tr>
        <th>Opportunities</th>
        <th>Threats</th>
    </tr>
    <tr>
        <td>
            whatever</td>
        <td>
            whatever</td>
    </tr>
</table>

【讨论】:

    猜你喜欢
    • 2016-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-18
    • 2011-09-11
    • 2022-07-21
    • 2011-09-28
    相关资源
    最近更新 更多