代码之家  ›  专栏  ›  技术社区  ›  Josh Buedel

如何使元素具有不同的背景颜色,而背景图像却处处显示(又名水印)?

  •  1
  • Josh Buedel  · 技术社区  · 17 年前

    我想创建一个带有水印的html页面。我在身体上设置了背景图像。然而,我有一些不允许背景图像渗透的元素。它们定义自己的背景色(但不是背景图像),覆盖主体中的颜色。这让我很惊讶。他们没有覆盖图像,只是覆盖颜色。

    在具有不同背景颜色的元素的页面上设置可见水印似乎是合理的。

    如何使用标准html/css获得想要的效果?

    下面是一些显示问题的示例代码。请注意,白色块遮挡了我的水印图像。

    <html>
    <head>
    <style type="text/css">
    
    .everything
    { 
        background: url(/images/shield-25.png) blue no-repeat center;
    }
    table, div{ width: 100% }
    
    #table2 { background-color: white }
    #div2 { background-color: white }
    </style>
    </head>
    <body class="everything">
    
      <table id="table1"><tr><td>Top</td></tr></table>
      <!-- This table put a big white line over my watermark image. -->
      <table id="table2"><tr><td>Middle</td></tr></table>
      <table id="table3"><tr><td>Bottom</td></tr></table>
    
      <div id="div1"><tr><td>Top</td></tr></div>
      <!-- Thought maybe it was a table thing but nope, divs do it too. -->
      <div id="div2"><tr><td>Middle</td></tr></div>
      <div id="div3"><tr><td>Bottom</td></tr></div>
    
    </body>
    </html>
    
    4 回复  |  直到 8 年前
        1
  •  3
  •   Brant Bobby    17 年前

    不幸的是,这是你想要的行为。 background-image background-color 是的子属性 background #table2 #div2 ,你再也看不到“通过”页面背景了。

    CSS3允许您使用 rgba() Firefox 3 and Safari/Webkit do )。要在IE中获得类似rgba()的效果,可以使用 filter: 规则如下:

    #table2 {
        filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff80,endColorstr=#ffffff80); /* IE proprietary */
        background-color: rgba(255, 255, 255, 0.5); /* CSS3 standard */
    }
    

    注意 startColorstr endColorstr 参数有第四个alpha值。

        2
  •  1
  •   Chris Van Opstal    17 年前

    如果没有一些聪明的HTML/CSS技巧,就无法完成您想要做的事情。如果你设置了一个元素的背景色,它就不允许它下面的图像“渗透”。

        3
  •  1
  •   Peter Richards    17 年前

    http://www.quirksmode.org/css/opacity.html

    但是,我相信(未测试)这也适用于元素内的任何文本,因此您可能需要第二个类将表内文本的不透明度设置回1,等等。

        4
  •  0
  •   Can Berk Güder Pugalmuni    17 年前

    您正在为body元素设置背景图像。div和table是不透明的,它们位于body元素前面,这就是它们覆盖水印的原因。

    如果要将水印单独应用于每个元素,应执行以下操作:

    #table1, #table2, #table3, #div1, #div2, #div3 { 
        background: url(/images/shield-25.png) blue no-repeat center;
    }
    

    或许

    table, div { 
        background: url(/images/shield-25.png) blue no-repeat center;
    }