背景颜色的不透明度,但不是文本[重复]

Posted

技术标签:

【中文标题】背景颜色的不透明度,但不是文本[重复]【英文标题】:Opacity of background-color, but not the text [duplicate] 【发布时间】:2010-10-12 21:10:05 【问题描述】:

如何使 div 的背景在文本保持不透明的情况下跨浏览器(包括 Internet Explorer 6)透明?

我需要在不使用任何库(如 jQuery 等)的情况下完成此操作。(但如果您知道有一个库可以做到这一点,我很想知道,这样我就可以查看他们的代码)。

【问题讨论】:

【参考方案1】:

使用 rgba!

.alpha60 
    /* Fallback for web browsers that don't support RGBa */
    background-color: rgb(0, 0, 0);
    /* RGBa with 0.6 opacity */
    background-color: rgba(0, 0, 0, 0.6);
    /* For IE 5.5 - 7*/
    filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);
    /* For IE 8*/
    -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)";

除此之外,您必须为 IE 网络浏览器声明 background: transparent,最好通过条件 cmets 或类似方式提供服务!

通过http://robertnyman.com/2010/01/11/css-background-transparency-without-affecting-child-elements-through-rgba-and-filters/

【讨论】:

IE9中的IE7模式是否有可能与实际的IE7不同?我问是因为这段代码在那里不起作用。但是如果我们只使用最后三个规则(没有background-color: rgb(0, 0, 0);) - 一切都很好 我尝试了这个解决方案,但它在 IE8 中不起作用,因为 IE8 正确应用了背景颜色。我刚刚取出了其他浏览器的后备(这是什么,旧版本的 firefox?)。在这里解释:***.com/questions/4508191/… p.s. @Donotello ie9 中的 ie7 模式绝对不是 100% 准确的。我使用需要 IE7/8 的 CMS,而 IE9 中的兼容模式破坏了其中的各种内容。 链接的文章说,对于 IE(至少版本 8),您还需要有条件地设置 background:transparent【参考方案2】:

我为此使用了 alpha 透明的 PNG:

div.semi-transparent 
  background: url('semi-transparent.png');

不过,对于 IE6,您需要使用 PNG 修复程序(1、2)。

【讨论】:

纯 CSS > 背景图片 @MarcySutton IMO 并非总是如此,绝对不是。如果您查看标记为答案的答案,您就会明白为什么。我们应该浪费多少时间来实现跨浏览器兼容性。所以,当你绝对可以时,(当然,并非总是)你可以使用背景图像。就像我说的,JMO。 PNG 修复 1 太棒了!接受答案的方法在我的 IE6 上不起作用。 @Crungmungus 有许多 JS hacks/polyfills(请参阅答案中代码下方的链接),甚至还有一个 CSS method 来修复 IE6 中的 PNG 透明度。不过,在更复杂的用例中,它们往往会以某种方式破坏,因此几个月前我已经放弃了 IE6 PNG 透明度。【参考方案3】:

我在我的博客Landman Code 上创建了这种效果。

我做的是

#Header 
  position: relative;

#Header H1 
  font-size: 3em;
  color: #00FF00;
  margin:0;
  padding:0;

#Header H2 
  font-size: 1.5em;
  color: #FFFF00;
  margin:0;
  padding:0;

#Header .Background 
  background: #557700;
  filter: alpha(opacity=30);
  filter: progid: DXImageTransform.Microsoft.Alpha(opacity=30);
  -moz-opacity: 0.30;
  opacity: 0.3;
  zoom: 1;

#Header .Background * 
  visibility: hidden; // hide the faded text

#Header .Foreground 
  position: absolute; // position on top of the background div
  left: 0;
  top: 0;
<div id="Header">
  <div class="Background">
    <h1>Title</h1>
    <h2>Subtitle</h2>
  </div>
  <div class="Foreground">
    <h1>Title</h1>
    <h2>Subtitle</h2>
  </div>
</div>

重要的是每个填充/边距和内容在 .Background 和 .Foreground 中都必须相同。

【讨论】:

【参考方案4】:

放宽您在 IE6 和旧版浏览器上工作的要求,您可以使用 ::before 和 display: inline-block

div

  display: inline-block;
  position: relative;    

div::before

  content: "";
  display: block;
  position: absolute;
  z-index: -1;
  width: 100%;
  height: 100%;
  background:red;
  opacity: .2;

演示http://jsfiddle.net/KVyFH/172/ ​

它适用于任何现代浏览器

【讨论】:

不能处理溢出。 jsfiddle.net/KVyFH/256 我建议也添加到 "before" 元素 "top: 0; right:0" 否则它不适用于填充【参考方案5】:

感谢@davy-landmann 提供https://***.com/a/638064/417153。 这就是我要找的!与LESS代码相同的效果:

  @searchResultMinHeight = 200px;
  .searchResult 
    min-height: @searchResultMinHeight;

    position: relative;
    .innerTrans 
      background: white;
      .opacity(0.5);
      min-height: @searchResultMinHeight;
    
    .innerBody 
      padding: 0.5em;
      position: absolute;
      top: 0;
    
  

【讨论】:

以上是关于背景颜色的不透明度,但不是文本[重复]的主要内容,如果未能解决你的问题,请参考以下文章

CSS更改选项卡背景的不透明度而不影响选项卡上的文本[重复]

如何使输入字段的不透明度不影响其中的文本颜色?

CSS不透明度背景颜色和文本不起作用[重复]

适合内容的背景颜色标签

有背景颜色换行 UILabel [重复]

如何使用 Matplotlib 设置图形背景颜色的不透明度