CSS3边框不透明度?

mcb*_*eav 384 css opacity

是否有一种直接的CSS方式使元素的边框半透明,例如:

border-opacity: 0.7;
Run Code Online (Sandbox Code Playgroud)

如果没有,有没有人知道如何在不使用图像的情况下这样做?

kin*_*rey 587

不幸的是,该opacity元素使整个元素(包括任何文本)半透明.使边框半透明的最佳方法是使用rgba颜色格式.例如,这会产生50%不透明度的红色边框:

div {
    border: 1px solid rgba(255, 0, 0, .5);
    -webkit-background-clip: padding-box; /* for Safari */
    background-clip: padding-box; /* for IE9+, Firefox 4+, Opera, Chrome */
}
Run Code Online (Sandbox Code Playgroud)

这种方法的问题是,一些浏览器不理解的rgba格式,将不会显示任何边界可言,如果这是整个声明.解决方案是提供两个边界声明.第一个是假的不透明度,第二个是实际的.如果浏览器有能力,它将使用第二个,如果没有,它将使用第一个.

div {
    border: 1px solid rgb(127, 0, 0);
    border: 1px solid rgba(255, 0, 0, .5);
    -webkit-background-clip: padding-box; /* for Safari */
    background-clip: padding-box; /* for IE9+, Firefox 4+, Opera, Chrome */
}
Run Code Online (Sandbox Code Playgroud)

第一边界声明将是等效颜色50%的不透明红色边框在白色背景上(虽然边界下的任何图形不会渗出通过).

更新:我添加了"background-clip:padding-box;" 这个答案(每SooDesuNe的在评论中建议),以确保边境保持透明,即使施加了坚实的背景颜色.

  • 这就是为什么会出现"虚假不透明"的原因.当我接受并非每个浏览器都需要以相同的方式呈现时,我作为网页设计师的生活变得更加容易.如果它们支持`border-radius`,那么它们会得到圆角.如果没有,他们不会.内容仍然可以访问,它看起来仍然很好,如果他们使用功能强大的浏览器,它看起来会更好.在过去的1.5年中,我从来没有一个客户抱怨过这个问题. (42认同)
  • 实际上,rgba在现代浏览器中表现出色(除非你认为IE6-8是"现代的"). (23认同)
  • 如果你试图让你的镶边内容背后的内容闪耀(而不是镶边元素本身的背景颜色),你还需要设置`background-clip:padding-box;`. (23认同)
  • 好吧,他们假设是:P,当你得到50%+使用它们时,你应该看到它适用于ie以及至少对于ie7 + (4认同)

Ped*_* L. 133

这很容易,使用0偏移的实心阴影:

#foo {
  border-radius: 1px;
  box-shadow: 0px 0px 0px 8px rgba(0,0,0,0.3);       
}
Run Code Online (Sandbox Code Playgroud)

此外,如果您为该元素设置border-radius,它会为您提供相当圆的边框

jsFiddle演示

在此输入图像描述

  • 这个要谨慎使用!`box-shadow` 没有大小,可能会破坏你的布局,使你的边距不均匀!http://jsfiddle.net/bj81hew7/2/ (2认同)
  • 我的意思是,这很酷,但是你使盒子阴影半透明的方式与实际边框的工作方式完全相同,所以我不知道这如何**回答**这个问题。这只是一个巧妙的补充 (2认同)

Lee*_*Lee 12

正如其他人所提到的:CSS-3表示您可以使用rgba(...)语法指定具有不透明度(alpha)值的边框颜色.

这是一个快速的例子,如果你想检查它.

  • 它适用于Safari和Chrome(可能适用于所有webkit浏览器).

  • 它适用于Firefox

  • 我怀疑它在IE中是否有效,但我怀疑有一些过滤器或行为可以使它工作.

还有这个stackoverflow帖子,它提出了一些其他问题 - 即边框呈现在您指定的任何背景颜色(或背景图像)的顶部; 因此在许多情况下限制了边界α的有用性.

  • 边框问题可以通过`background-clip:padding-box;`来解决(在支持之前,你可以使用-webkit和-moz供应商扩展). (4认同)

Bre*_*zer 5

*据我所知,在这种情况下我没有正常做的是在较大尺寸下创建一个块((bordersize*2)+ originalsize)并使其透明使用

filter:alpha(opacity=50);
-moz-opacity:0.5;
-khtml-opacity: 0.5;
opacity: 0.5;
Run Code Online (Sandbox Code Playgroud)

这是一个例子

#main{
    width:400px;
    overflow:hidden;
    position:relative;
}
.border{
    width:100%;
    position:absolute;
    height:100%;
    background-color:#F00;
    filter:alpha(opacity=50);
    -moz-opacity:0.5;
    -khtml-opacity: 0.5;
    opacity: 0.5;
}
.content{
    margin:15px;/*size of border*/
    background-color:black;
}
<div id="main">
    <div class="border">
    </div>
    <div class="content">
        testing
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

更新:

这个答案已经过时了,因为毕竟这个问题已经超过8年了.今天所有最新的浏览器都支持rgba,框阴影等.但这是8年多以前的一个很好的例子.


小智 5

如果您使用W3C验证器检查CSS编码,您将看到您的CSS代码是否可接受,即使它在主要浏览器中有效.

通过CSS创建透明边框,如上所述,

border: 1px solid rgba(255, 0, 0, .5);
Run Code Online (Sandbox Code Playgroud)

W3C标准不接受,甚至CSS3也不接受.我使用直接输入验证器和以下CSS代码,

.test { border: 1px solid rgba(255, 0, 0, .5); }
Run Code Online (Sandbox Code Playgroud)

结果是,

值错误:border无法识别太多值或值:1px solid rgba(255,0,0,0.5)

不幸的是,作为边界颜色值的一部分,W3C不接受alpha值("rgb"末尾的字母"a").我不知道它为什么不标准化,因为它适用于所有浏览器.唯一的障碍是你是想要坚持W3C标准还是从它开始在CSS中创造一些东西.

使用W3C在线CSS验证器/直接输入.

使用验证器来检查您的工作总是一个好主意,它确实有助于在编码工作数小时后进行交叉编码时发现编码中的小错误甚至是大错误.

  • 错了,这是W3C标准完全可以接受的,并且是验证器中的错误.见[本回答](http://stackoverflow.com/questions/9317057/how-to-validate-css3-hsla-color-values/9317224#9317224).使用验证器是个好主意,是的,但不要相信它. (10认同)