CSS RGBA边框/背景alpha double

时间:2010-04-12 23:07:41

标签: html css css3 rgba

我正在开发一个涉及很多透明度的网站,我想我会尝试在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>

似乎背景“延伸”在元素的边框下方,这会导致像素值加在一起。因此,当背景和边框都是半透明时,边框总是比元素的背景更不透明。这与我想要实现的完全相反,但似乎应该可以基于我见过的例子。

我还应该补充一点,我不能在容器中使用另一个元素,因为我还将在容器上使用border-radius来获得圆角,并且webkit将子元素的角放置为方块指定了背景,这实际上意味着带有方形内容的圆形外边框。

抱歉,我无法发布此图片...显然我没有足够的代表来发布图片。

3 个答案:

答案 0 :(得分:25)

您可以使用新的background-clip: padding-box;属性来实现此目的。它计算从背景开始的位置。 有关更多详细信息和示例,请查看here

答案 1 :(得分:3)

在Firefox中进行测试可以确认您所描述的内容 - 我花了一些时间才意识到这一点的含义!边框不透明将对其下方的透明背景没有影响,因为边框(正如您所说)是添加剂。

在这种情况下,你必须模拟你所使用的效果并使用比alpha更多的颜色:

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

答案 2 :(得分:2)

试试这个:

#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;
}