有一个直接的CSS方法,使一个元素的边界半透明的东西像这样?

border-opacity: 0.7;

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


当前回答

在这里稍微跳出框框思考一下:如果您正在使用SVG基本形状,您可以使用笔画、笔画宽度(浏览器支持> 97%)和笔画不透明度(浏览器支持> 99%)的组合来完成基本上与OP要求的相同的事情。

例如,这样的声明:

circle {
    stroke: blue;
    stroke-width: 5px;
    stroke-opacity: 0.4
}

将在<circle>的周长添加一个半透明的蓝色晕,填充#000。

这个JSFiddle提供了几个SVG基本形状的演示。小提琴使用红色填充和蓝色描边来突出描边和边框之间的主要区别-一半的描边宽度在基本形状的周长内。

这就给出了一个“双边框”外观(从外部到每个基本形状的中心:蓝色->(蓝色+红色=紫色)->红色),这是不可能仅用CSS边框实现的(但边框+轮廓可以-参见上面的JSFiddle,使用<div>的例子),并且很难实现(在径向基本形状的情况下)用径向梯度()。

其他回答

*据我所知,没有什么我通常在这种情况下是创建一个块下面与更大的大小((bordersize*2)+originalsize),并使其透明使用

filter:alpha(opacity=50);
-moz-opacity:0.5;
-khtml-opacity: 0.5;
opacity: 0.5;

这里有一个例子

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

更新:

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

不幸的是,不透明属性使得整个元素(包括任何文本)都是半透明的。使边框半透明的最好方法是使用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 */
}

对于不支持rgba的非常老的浏览器(IE8及更老版本),解决方案是提供两个边界声明。第一个是假的不透明,第二个是真的。如果浏览器有能力,它将使用第二种,如果没有,它将使用第一种。

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 */
}

第一个边界声明的颜色相当于白色背景上50%不透明的红色边界(尽管边界下的任何图形都不会渗透)。

我添加了background-clip: padding-box;在上面的例子中,确保即使应用了纯色背景色,边界仍然是透明的。

在这里稍微跳出框框思考一下:如果您正在使用SVG基本形状,您可以使用笔画、笔画宽度(浏览器支持> 97%)和笔画不透明度(浏览器支持> 99%)的组合来完成基本上与OP要求的相同的事情。

例如,这样的声明:

circle {
    stroke: blue;
    stroke-width: 5px;
    stroke-opacity: 0.4
}

将在<circle>的周长添加一个半透明的蓝色晕,填充#000。

这个JSFiddle提供了几个SVG基本形状的演示。小提琴使用红色填充和蓝色描边来突出描边和边框之间的主要区别-一半的描边宽度在基本形状的周长内。

这就给出了一个“双边框”外观(从外部到每个基本形状的中心:蓝色->(蓝色+红色=紫色)->红色),这是不可能仅用CSS边框实现的(但边框+轮廓可以-参见上面的JSFiddle,使用<div>的例子),并且很难实现(在径向基本形状的情况下)用径向梯度()。

在某些情况下,另一种可行的解决方案是:将边框样式改为虚线样式。

在前景色和背景色之间有交替的像素组与连续的部分透明像素线是不同的。另一方面,这大大减少了对CSS的要求,而且在不需要任何特定于浏览器的指令的情况下,它在每个浏览器之间都更加兼容。

其他答案涉及边界不透明问题的技术方面,而我想提出一个hack(纯CSS和HTML)。基本上创建一个容器div,有一个边框div,然后是内容div。

<div class="container">
  <div class="border-box"></div>
  <div class="content-box"></div>
</div>

然后CSS:(将内容边框设置为none,注意定位,以便考虑边框厚度)

.container {
  width: 20vw;
  height: 20vw;
  position: relative;
}
.border-box {
  width: 100%;
  height: 100%;
  border: 5px solid black;
  position: absolute;
  opacity: 0.5;
}
.content-box {
  width: 100%;
  height: 100%;
  border: none;
  background: green;
  top: 5px;
  left: 5px;
  position: absolute;
}