我有一个带有圆形边框的框,它需要从 80% 不透明开始并逐渐淡化,直到底部为 20% 不透明。同时,边框需要从 80% 不透明开始,以透明结束。
我找到了一些关于边框渐变填充的 CSS3 信息,并使用 rgba 进行了尝试,但它在 Firefox 上不起作用,这是我的大多数目标受众使用的浏览器。我发现了两种使用伪类的方法,但都不是完美的。我希望,如果发布这些方法并说出问题所在,有人可以建议如何改进它们。
如果可能的话,我需要通过 CSS 来完成,而不需要在 HTML 中添加额外的分区或类似的东西。
HTML
<div class="box">
<div>
<h3>Box 1</h3>
<div>
<p>Content.</p>
<p>More content.</p>
</div>
</div>
</div>
CSS 方法 1
.box, .box:before, .box:after{
-moz-border-radius: 12px;
-webkit-border-radius: 12px;
border-radius: 12px;
behavior: url(htc/border-radius.htc);
}
.box:before{
background-image:-moz-linear-gradient(top,rgba(69,174,189,0.8),rgba(69,174,189,0));
background-image:-webkit-gradient(linear,left top,left bottom,from(rgba(69,174,189,0.8)),to(rgba(69,174,189,0)));
filter:progid:DXImageTransform.Microsoft.Gradient(startColorStr=rgba(69,174,189,0.8),endColorStr=rgba(69,174,189,0));
content: "";
position: absolute;
top: -4px; left: -4px; bottom: -4px; right: -4px;
z-index: -2;
}
.box:after{
background-image:-moz-linear-gradient(top,rgba(76,91,198,0.8),rgba(76,91,198,0.2));
background-image:-webkit-gradient(linear,left top,left bottom,from(rgba(76,91,198,0.8)),to(rgba(76,91,198,0.2)));
filter:progid:DXImageTransform.Microsoft.Gradient(startColorStr=rgba(76,91,198,0.8),endColorStr=rgba(76,91,198,0.2));
content: "";
position: absolute;
top: 0; left: 0; bottom: 0; right: 0;
z-index: -1;
}
.box{
margin-top: 4px;
margin-bottom: 6px;
color: #ffffff;
position: relative;
}
.box div{
background-color:transparent;
}
.box div div{
padding: 0 7px;
}
.box h3 {
border: 0;
background:transparent;
color: #ffffff;
}
这段代码做了我想要的,但盒子的透明度并不出色,因为另一个盒子在它后面。在较小的盒子上还不错,但对于内容很多的盒子来说,它看起来不太好。
CSS 方法 2
.box, .box:before, .box:after{
-moz-border-radius: 12px 12px 0 0;
-webkit-border-radius: 12px 12px 0 0;
border-radius: 12px 12px 0 0;
behavior: url(htc/border-radius.htc);
}
.box{
margin-bottom: 9px;
margin-top: 4px;
background-image:-moz-linear-gradient(top,rgba(76,91,198,0.8),rgba(76,91,198,0.2));
background-image:-webkit-gradient(linear,left top,left bottom,from(rgba(76,91,198,0.8)),to(rgba(76,91,198,0.2)));
filter:progid:DXImageTransform.Microsoft.Gradient(startColorStr=rgba(76,91,198,0.8),endColorStr=rgba(76,91,198,0.2));
color: #ffffff;
position: relative;
border: 4px solid transparent;
border-top-color: rgba(69,174,189,0.8);
}
.box:before, .box:after{
content: "";
position: absolute;
top: -4px;
bottom: -4px;
left: -4px;
width: 4px;
background-image:-moz-linear-gradient(top,rgba(69,174,189,0.8),rgba(69,174,189,0));
background-image:-webkit-gradient(linear,left top,left bottom,from(rgba(69,174,189,0.8)),to(rgba(69,174,189,0)));
filter:progid:DXImageTransform.Microsoft.Gradient(startColorStr=rgba(69,174,189,0.8),endColorStr=rgba(69,174,189,0));
}
.box:after{
left: auto;
right: -5px;
}
.box div{
background-color: transparent;
}
.box div div{
padding: 0 5px;
}
.box h3{
border: 0;
background:transparent;
color: #ffffff;
}
这个盒子的透明度很好,尽管边框不太好。主要问题是底部有一个我无法弄清楚的小间隙,左右的“边框”与顶部边框重叠,向下移动意味着它们仍然没有连接到顶部边框。
第一个选项效果最好,但正如我上面提到的,它并不完美。有什么方法我不能让这些中的任何一个更好地工作,还是我采取了完全错误的方法?