如何使用 CSS 制作透明边框?

Posted

技术标签:

【中文标题】如何使用 CSS 制作透明边框?【英文标题】:How to make a transparent border using CSS? 【发布时间】:2013-07-19 00:49:42 【问题描述】:

我正在尝试为拥有博客的客户做这样的事情。

她想要一个半透明的边框。我知道将其作为背景是可能的。但我似乎找不到这种用于横幅的 css 技术背后的逻辑/代码。有人知道怎么做这个吗?这将有很大帮助,因为这是我的客户想要为他的博客实现的外观......

【问题讨论】:

可能重复:***.com/questions/4062001/css3-border-opacity 喜欢这个? jsfiddle.net/6qJcc/1 【参考方案1】:

如果你想要完全透明,那么你可以使用

border: 5px solid transparent;

如果您的意思是不透明/透明,则可以使用

border: 5px solid rgba(255, 255, 255, .5);

这里,a 表示 alpha,您可以缩放 0-1。

还有一些人可能会建议您使用opacity,它也可以完成相同的工作,唯一的区别是它会导致子元素也变得不透明,是的,有一些解决方法,但rgba 似乎比使用更好opacity.

对于旧版浏览器,始终使用#(hex) 声明背景颜色作为备用,这样如果旧版浏览器无法识别rgba,它们会将hex 颜色应用于您的元素.

Demo

Demo 2(带有嵌套 div 的背景图片)

Demo 3(使用img 标签而不是background-image

body 
    background: url(http://www.desktopas.com/files/2013/06/Images-1920x1200.jpg);   


div.wrap 
    border: 5px solid #fff; /* Fall back, not used in fiddle */
    border: 5px solid rgba(255, 255, 255, .5);
    height: 400px;
    width: 400px;
    margin: 50px;
    border-radius: 50%;


div.inner 
    background: #fff; /* Fall back, not used in fiddle */
    background: rgba(255, 255, 255, .5);
    height: 380px;
    width: 380px;
    border-radius: 50%; 
    margin: auto; /* Horizontal Center */
    margin-top: 10px; /* Vertical Center ... Yea I know, that's 
                         manually calculated*/

注意(对于演示3):图像将根据高度和 提供宽度,因此请确保它不会破坏缩放比例。

【讨论】:

【参考方案2】:

您也可以将border-style: doublebackground-clip: padding-box 一起使用,而无需使用任何额外的(伪)元素。它可能是最紧凑的解决方案,但不如其他解决方案灵活。

For example:

<div class="circle">Some text goes here...</div>

.circle
    width: 100px;
    height: 100px;
    padding: 50px;
    border-radius: 200px;
    border: double 15px rgba(255,255,255,0.7);
    background: rgba(255,255,255,0.7);
    background-clip: padding-box;

如果您仔细观察,您会发现边框和背景之间的边缘并不完美。这似乎是当前浏览器中的一个问题。但是当边框很小的时候就不那么明显了。

【讨论】:

这允许它在没有额外标记和has pretty good support 的情况下工作。 background-color 加上 border:double 不适用于没有 background-clip 样式的边框之间的透明度。【参考方案3】:

使用:before 伪元素, CSS3 的border-radius, 还有一些透明度很容易:

LIVE DEMO

<div class="circle"></div>

CSS

.circle, .circle:before
  position:absolute;
  border-radius:150px;  

.circle  
  width:200px;
  height:200px;
  z-index:0;
  margin:11%;
  padding:40px;
  background: hsla(0, 100%, 100%, 0.6);   

.circle:before
  content:'';
  display:block;
  z-index:-1;  
  width:200px;
  height:200px;

  padding:44px;
  border: 6px solid hsla(0, 100%, 100%, 0.6);
  /* 4px more padding + 6px border = 10 so... */  
  top:-10px;
  left:-10px; 

:before 附加到我们的.circle 另一个元素,您只需将其设置为(ok、block、absolute 等)透明并使用边框不透明度。 p>

【讨论】:

【参考方案4】:

使用rgba(rgb 和alpha transparency):

border: 10px solid rgba(0,0,0,0.5); // 0.5 means 50% of opacity

alpha transparency 在 0(0% 不透明度 = 100% 透明)和 1(100 不透明度 = 0% 透明)之间变化

【讨论】:

你不能避免使用“background-clip: padding-box;”如果你想要一个明显的边界。没有这个css属性,背景色会填满所有的div,你的边框会和背景色叠加。

以上是关于如何使用 CSS 制作透明边框?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用边框和图像的情况下在 div 上制作 CSS 三角形背景? [复制]

CSS3之字形边框是如何制作的?

如何在 UIView 周围制作自定义边框?

如何制作没有背景图片的透明背景?

css如何制作边框投影效果?

如何制作半透明背景?