CSS RGBA边框/背景透明度双倍

28
我正在开发一个涉及大量透明度的网站,我想尝试完全使用RGBA构建它,然后为IE做回退。我需要一个"facebox"样式的边框效果,外部边框是圆角的,不透明度比它所包围的盒子的背景要低。
来自http://24ways.org/2009/working-with-rgba-colour的最后一个示例似乎表明这是可能的,但我似乎无法让它起作用。当我尝试以下操作时:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

 <title>RGBA Test</title>
 <style type='text/css'>
   body {
     background: #000;
     color: #fff;
   }
   #container {
     width: 700px;
     margin: 0 auto;
     background: rgba(255, 255, 255, 0.2);
     border: 10px solid rgba(255, 255, 255, 0.1);
     padding: 20px;
   }
  </style>
</head>
<body>
  <div id='container'>
    This should look like a facebox.
  </div>
</body></html>

似乎背景"延伸"到元素的边框下面,导致像素值相加。因此,当背景和边框都是半透明时,边框将始终比元素的背景更不透明。这正好与我想要实现的相反,但根据我看到的示例,应该可以实现。
我还应该补充一点,我不能在容器内使用另一个元素,因为我还将在容器上使用边框半径来获得圆角,并且如果子元素分配了背景,则webkit会使子元素的角变成方形,这将意味着具有圆角外边框和方形内容。
抱歉我不能张贴这个的图片... 显然我没有足够的声望来发布图片。

你能否添加图片链接,还是只能发布文本链接? - alex
stockli想要实现http://media.24ways.org/2009/01/f7.png。我尝试了24ways上的代码示例,但似乎不起作用。 - Haris
是的,不幸的是,我的链接也有限制。不过我可以尝试在这个评论中发布一个链接!就是这个:http://tinypic.com/view.php?pic=200qm90&s=5 - stockli
3个回答

29
你可以使用新的 background-clip: padding-box; 属性来实现这一效果。它会计算背景从盒子的哪里开始。 更多细节和示例,请查看此处

5

在Firefox中测试确认了您所描述的情况,我花了一些时间才意识到这种影响!边框不透明度的改变对其下方的透明背景没有影响,因为边框是叠加的(正如您所说)。

如果是这样的话,您需要模拟您想要的效果,并更多地处理颜色而不是透明度:

background: rgba(128, 128, 128, 0.7);
border: 10px solid rgba(0, 0, 0, 0.1);

很高兴听到我不是疯了...令人惊讶的是,所有演示似乎都暗示着这应该是可能的。Safari在具有RGBA的大边框上也存在问题,这些边框是正方形的,因为每个角落的区域也是加性的,所以每个角落都有一个小正方形框在边框中。如果使用border-radius,这个问题就会消失,这在我的情况下挽救了我。不过你说得对,我必须采用颜色变化来解决它。不幸的是,在这种情况下,我的布局后面有一个渐变,所以很明显它不能完全正常工作。感谢您的回答! - stockli

3

试试这个:

#container {
    width: 700px;
    margin: 0 auto;
    background: rgba(255, 255, 255, 0.2);
    border: 10px solid rgba(255, 255, 255, 0.1);
    padding: 20px;

    /* and here is the fix */
    -webkit-background-clip: padding-box;
    -moz-background-clip: padding;
    background-clip: padding-box;
}

有趣!在Firefox中看起来很棒(使用-moz-border-radius甚至更好),但在Safari中仍然无法正常工作...尽管边框有点更暗,但在角落处仍然会出现加倍的情况。如果在其上设置border-radius,则角落处的加倍就会消失,但内部圆角处会出现奇怪的加倍。不过还是谢谢你!比以前更接近了! - stockli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接