多个 CSS 背景,图像上的颜色,被忽略

Posted

技术标签:

【中文标题】多个 CSS 背景,图像上的颜色,被忽略【英文标题】:Multiple CSS backgrounds, colour over image, ignored 【发布时间】:2011-08-16 15:12:33 【问题描述】:

这个多背景 CSS 行有什么问题。 Firefox 4 会忽略它(就像出现语法错误时一样)。

background: rgba(255,0,0,0.2), url("static/menubg.jpg");

【问题讨论】:

你的css中还有其他背景相关的标签吗? @Arjan:我有一个 background-size 来缩放图像,但我删除了它并在发布之前对其进行了测试。 【参考方案1】:

放弃 Oscar 的好解决方案(谢谢!),这是我使用 SASS/Compass 实现浏览器前缀自动化的方法

@include background( linear-gradient( color-stops(rgba(255, 66, 78, 0.25), rgba(255, 66, 78, 0.25)) ), image-url('/img/cardboard_flat.png') );

这支持 Webkit、Firefox,但不支持 IE9(因为渐变)。然后我想起了用于生成 PNG 的 compass rgbapng Ruby gem:https://github.com/aaronrussell/compass-rgbapng

@include background( png_base64( rgba(255, 66, 78, 0.25) ), image-url('/img/cardboard_flat.png') );

现在,它支持 IE9+ 和其他支持多背景的浏览器。

如果您仍然需要 IE8 支持,您可以使用多背景 polyfill,或者设置 ::after 伪元素的样式并绝对定位它,z-index 为 -1:

html 
  height: 100%;


body 
  background: url('/img/cardboard_flat.png');
  position: relative;
  padding: 1px 0;
  min-height: 100%;

  &:after 
    content: "";
    position: absolute;
    background: png_base64( rgba(255, 66, 78, 0.25) );
    width: 100%;
    height: 100%;
    top: 0;
    left: 0;
    z-index: -1;
  

【讨论】:

【参考方案2】:

解决方案正在使用:

-moz-linear-gradient(top, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.5) 100%), url(bg.png) repeat 0 0;  

代替:

rgba(0, 0, 0, 0.5)

【讨论】:

【参考方案3】:

您应该注意,由于渐变被视为图像,因此它是可以接受的,并且可以放入具有相同顶部和底部颜色的渐变。

【讨论】:

【参考方案4】:

奇怪的是,它似乎归结为参数的顺序;背景图像 然后 背景颜色:

background: url('http://davidrhysthomas.co.uk/linked/astrid_avatar.png') no-repeat 50% 50%, rgba(255,180,0,0.8);

有效 (JS Fiddle demo),而 background-color then background-image:

background: rgba(255,180,0,0.8), url('http://davidrhysthomas.co.uk/linked/astrid_avatar.png') no-repeat 50% 50%;

没有 (JS Fiddle)。

以上测试在 Chromium 11 和 Firefox 4 上测试,都在 Ubuntu 11.04 上。


编辑要注意,这确实归结为顺序;正如@Boris' answer 中明确回答的那样。

【讨论】:

【参考方案5】:

CSS3 背景中background 的语法是[ <bg-layer> , ]* <final-bg-layer>,表示零个或多个<bg-layer>s,然后是一个<final-bg-layer>,以逗号分隔。见http://www.w3.org/TR/css3-background/#the-background

<final-bg-layer> 定义为:

<final-bg-layer> = <bg-image> || <bg-position> [ / <bg-size> ]? || 
                   <repeat-style> || <attachment> || <box>1,2 ||
                   <'background-color'>

&lt;bg-layer&gt; 是:

 <bg-layer> = <bg-image> || <bg-position> [ / <bg-size> ]? ||
              <repeat-style> || <attachment> || <box>1,2

(http://www.w3.org/TR/css3-background/#ltbg-layergt 的两个定义)。

或者简单来说,只有最低的背景层可以包含背景颜色。所以是的,你的 CSS 实际上是一个语法错误。

哦,看起来https://developer.mozilla.org/en/css/multiple_backgrounds 有一些错误。我已经修好了。

【讨论】:

有一个很好的参考+1;我没想过要为我的答案寻找权威来源。 自从您进行更改后,该 MDC 页面上的“现场演示”似乎无法正常工作。 确实如此。为了更有趣,我所做的任何更改都不会影响到这一点,恢复到工作修订版不起作用:wiki 声称文本现在与工作修订版相同,但是它产生的实际标记明显不同。我给 wiki 维护者发了邮件。我讨厌维基。 :( 嗯,所以如果我想为背景图像着色,是否需要在其上放置重复的 1x1 透明像素图像?真可惜,但是哦。 是的,在 CSS3 背景中并没有很好的支持。您可以使用 data: URI 作为 1x1 事物...【参考方案6】:

应该是background: rgba(255,0,0,0.2) url("static/menubg.jpg"); 没有,

【讨论】:

当您使用带有颜色的背景图像作为后备时。我正在尝试多种背景:developer.mozilla.org/en/css/multiple_backgrounds

以上是关于多个 CSS 背景,图像上的颜色,被忽略的主要内容,如果未能解决你的问题,请参考以下文章

CSS:背景颜色的背景图像

CSS背景颜色被Chrome浏览器上的滚动条擦除

如何使用python对相同颜色的图像区域进行分组并获取其坐标而忽略背景颜色

没有图像的元素上的CSS掩码?

多个背景图像 - 无法将图像带到前面[重复]

background背景相关之背景颜色