CSS3实现透明边框方法实例教程

现在的网页中,经常性的会遇到弹出层的效果。类似截图如下

就是半透明的边框。汗,前端的同事想到的方案是 做个10*10的png24的半透明图片,然后作为背景平铺(让外层盒子的内边距 = 弹出层边框的宽度)这样能模拟出透明边框的效果。但是万恶的IE6不支持PNG透明。。。。。抓狂!

今天找到一个比较优的解决方案,使用 RGBA.

先是说说 RGB, RGB色彩模式(也翻译为“红绿蓝”,比较少用)是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统之一。

RGBA在RGB的基础上多了控制alpha透明度的参数。以上R、G、B三个参数,正整数值的取值范围为:0 ? 255。百分数值的取值范围为:0.0% ? 100.0%。超出范围的数值将被截至其最接近的取值极限。并非所有浏览器都支持使用百分数值。A参数,取值在0~1之间,不可为负值

RGBA语法:

 .div {background: rgba(0,0,0,0.5);}

RGBA和opacity的区别

opacity (filter: Alpha(Opacity=50) 或opacity:0.5)会使整个元素包括子元素透明,而RGBA仅仅是元素本身透明,子元素不透明。

下面具体讲讲怎样让IE浏览器支持RGBA颜色。

IE下RGBA写法

.div {
   filter:progid:dximagetransform.microsoft.gradient
   (startcolorstr="#66000000", endcolorstr="#66000000",gradienttype=0);}
   
   /*ie9已经支持rgba模式了*/
 :root .div{filter:none;}

 
DXImageTransform.Microsoft.gradient滤镜里的startColorstr参数值是#AARRGGBB形式的,其中的AA(startColorstr的前两位)是代表不透明度的十六进制,00表示完全透明,FF就是全不透明,化成十进制的范围就是0~255,剩下的RRGGBB就是颜色的十六进制代码。例子中background: rgba(125, 0, 0, .3);表示的是30%不透明度的红色背景。如何把30%的不透明度转换成十六制呢?很简单,先计算#AA的的十进制x,x/255 = 3/10,解得x=3*255/10,然后再把x换算成十六进制,约等于4B。

RGBA颜色还可以用于border,不过,不同的浏览器对于border的RGBa支持不太一样,不过唯一的不同是,Firefox在border的拐角处会出现叠加,比如透明度是0.4,那么在Firefox中,四个角的透明度会变成0.8,而支持RGBa的非FF浏览器不会出现这种情况。

 
css3的background-clip来制作半透明边框

弹出框的html代码如下:

    <div class="search-popup-window advise" id="lightbox">
      <img src="style/images/taobao-form.png" alt="" width="470" height="349"/>
    </div>

弹出框的css代码如下:

    #lightbox {   
        position: absolute; top: 0px;left: 0px;  
        display:none;   
        width: 470px; height: 350px;  
        background-color: white;  
        text-align: center;  
        padding:8px;          
          
        /* 关键代码部分 */  
        -moz-background-clip: padding;     /* Firefox 3.6 */  
        -webkit-background-clip: padding;  /* Safari 4? Chrome 6? */  
        background-clip: padding-box;      /* Firefox 4, Safari 5, Opera 10, IE 9 */           
        border: 8px solid rgba(0,0,0,0.3);  
                      
        -webkit-border-radius: 15px;  
        -moz-border-radius: 15px;  
        border-radius: 15px;   
                  
    }
<span style="background-color: rgb(255, 255, 255); line-height: 33.99305725097656px; font-family: Arial, Helvetica, sans-serif;">    </span>

脚本部分不是这个教程的重点,明河就不贴出来了。css部分的代码看似很多,关键是里面的以下这几行代码:

    #lightbox {       
          
        /* 关键代码部分 */  
        -moz-background-clip: padding;     /* Firefox 3.6 */  
        -webkit-background-clip: padding;  /* Safari 4? Chrome 6? */  
        background-clip: padding-box;      /* Firefox 4, Safari 5, Opera 10, IE 9 */           
        border: 8px solid rgba(0,0,0,0.3);  
                  
    }

          

为什么利用background-clip可以产生半透明的边框效果呢?接下来明河来说说background-clip。

background-clip 与 background-origin 的一则运用

background-clip 和 background-origin 是 CSS3 中新加的 background module 属性,用来确定背景的定位。

background-clip 用来判断 background 是否包含 border 区域。而 background-origin 用来决定 background-position 计算的参考位置。

语法为:

    background-clip: [border | padding] [, [border | padding]]*
    background-origin: [border | padding | content] [, [border | padding | content]]*

对于 background-clip:

如果是 padding 值,则 background 忽略 padding边缘,border 是透明的。如果是 border 值,则background 包括 border 区域。如果 background-image 图片有多个,对应的 background-clip 值之间用逗号分隔。

对于 background-origin:

如果是 padding 值,则 position 相对于 padding 边缘(”0 0″ 为 padding 边缘的左上角,而 “100% 100%” 为右下角)。如果是 border 值,则意味着相对 border 边缘。而 border 值则相对于内容边缘。与 background-clip 相同,多个值也用逗号分隔。如果 background-clip 是 padding 值,background-origin 是 border 值,并且 background-position 是 “top left”(默认初始值),则背景图左上角将会被截取掉部分。

这两个属性仅从 CSS3 才出现,在未使用该属性 background module 中的默认表现又如何呢?

background-clip 默认类似于 background-clip:border。

background-origin 默认类似于 background-origin:padding。

但 IE 又是特例 (It sucks)。

在 IE6 、IE7 中,一般元素(button 等除外)的背景相当于:background-clip:border; background-origin:border;

而 hasLayout 的元素(加上 button 等)的背景则相当于:background-clip:padding; background-origin:padding;

这一对 CSS3 属性已在 Mozilla, Safari 3 和 Konqueror 等浏览器中实现,不过都是通过其私有属性的表达方式。

    基本非 IE 的浏览器的私有属性一般都会以 -xxx- 这样开始,-o-就是以 Presto 为引擎的 Opera 私有的、-icab- 是 iCab 私有的,-khtml- 是以 KHTML 为引擎的浏览器(如 Konqueror Safari)、-moz- 就是以 Mozilla 的 Gecko 为引擎的浏览器(如Firefox,Mozilla)、-webkit- 就是以 Webkit 渲染引擎(是 KHTML 的衍生产品)的浏览器(如 Safari、Swift)。

即支持的私有属性分别为:

    -moz-background-clip
    -webkit-background-clip
    -khtml-background-clip
    -moz-background-origin
    -webkit-background-origin
    -khtml-background-origin

下面举个运用 background-origin 属性的简单例子,效果如下图:

HTML 部分:

<button>这里是按钮,是钮不是妞</button>

CSS 部分(详细见注释):

button {
        display:inline-block;/*触发hasLayout*/
        height:26px;
        padding:0 20px;
        cursor:pointer;
        *overflow:visible;/*消除IE按钮左右padding随字数长度变化的BUG*/
        border:3px double #95071b;/*用3px 双边来模拟设计图中的白线*/
        border-right-color:#650513;
        border-bottom-color:#650513;
        background-color:#95071b;
        /*设置背景裁切方式和参考线*/
        -moz-background-clip:padding;
        -webkit-background-clip:padding;
        -khtml-background-clip:padding;
        -moz-background-origin:padding;
        -webkit-background-origin:padding;
        -khtml-background-origin:padding;
        /*向前兼容*/
        background-clip:padding;
        background-origin:padding;
        color:#fff;
        font-size:12px;
        line-height:20px;
        /*修正IE6下高度问题*/
        _padding-top:2px;
        _line-height:14px;
}

不足之处:此效果在 Opera 下无法实现。

当然这只是一种对 HTML 代码有洁癖的解决方法(限于对 background-clip 和 background-origin 属性的学习和理解),当然也可尝试其他方法,也许会使 CSS 更简洁,至于各种方法的优缺点自己衡量。

background-clip用于设置背景显示模式,共有border、padding、content三种模式,用于控制背景覆盖容器的范围,而默认的显示模式是border(并不是所有的默认显示模式都是border,IE下有特例,可以看阅怿飞的那篇文章),即背景覆盖无法超出边框(有覆盖到边框);而当demo中将其值设置为padding时,也就是说背景只能覆盖内盒,边框是不存在背景的!

由于demo中将background-clip设置为padding,背景颜色(白色)不在存在于边框,当你的边框是带有透明度设置时(demo中是0.3),就会产生这种半透明的边框效果!留意不同浏览器的设置方法是有些差异的,而IE是不支持的!这是这种方案的唯一弊端。

background-clip密切相关的还有个background-origin属性,background-origin的用法留待日后再讲解。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索浏览器
, firefox
, 代码
, 属性
, 模式
边框
css3实现边框锯齿效果、css3 边框透明、css3实现凹圆角边框、css3半透明边框、html5 css3网站实例,以便于您获取更多的相关知识。

时间: 2024-10-25 15:28:59

CSS3实现透明边框方法实例教程的相关文章

ASP AddHeader 方法实例教程

ASP AddHeader 方法实例教程 该AddHeader方法增加了一个新的HTTP标头和价值的HTTP响应. 注意:一旦ASP AddHeader,它不能被删除. 注:在IIS 4.0中你必须调用此方法之前,任何被输出到浏览器.在IIS 5.0中,您可以致电AddHeader方法在任何一点的脚本,只要它之前的任何要求Response.Flush方法. 语法 response.AddHeader name,value Parameter Description name Required.

HTML5+CSS3+jQuery弹出层实例教程

  弹出层用来向用户展示详细的信息,交互性非常强.弹出层有对话框.模态窗口等形式,这里我都把他们叫做弹出层,我的同事们也是这么叫的.一般我们喜欢使用比较成熟的弹出层插件如fancybox等,但在本文,我将先抛弃插件,给大家介绍如何使用HTML5+CSS3+jQuery实现弹出层. 我们完全使用HTML5+CSS3+jQuery来实现一个基本的弹出层效果,因此我们可以在示例中任意修改弹出层外观样式.甚至js方法调用.我们最终做出来的弹出层效果应该是响应式的,也就是说可以在桌面PC端和移动端都可以很

JS解决ie6下png透明的方法实例

解决ie6下png透明的问题想必前端都比较清楚,虽然有很多方法,但是我觉得用JS还是最省事的方法,不管是图片还是背景图片都OK.   复制代码 代码如下: <!DOCTYPE html> <html lang="en"> <head> <title>解决ie6下png透明方法之JS法-</title> <style type="text/css">  .a{background: #FFFF99

jQuery操作cookie方法实例教程_jquery

本文实例讲述了jQuery操作cookie的方法.分享给大家供大家参考.具体方法如下: 先来看看jq.cookie的aip 写入cookie 复制代码 代码如下: $.cookie("this-cookie","this-value",{     expires:10,//有效日期     path:"/",//cookie的路 径     domanin:    //cookie的域名     secure:true //true,cookie

在JavaScript中重写jQuery对象的方法实例教程_jquery

jQuery是一个款非常优秀的类库,它给我们解决了很多的客户端编程,但是任何东西都不是万能的,当它不能满足我们的需求时我们就需要对它进行重写,同时也不要影响其原有的功能或者修改其原有的功能:比如我现在的web应用程序大多数时候的数据交互都是通过Ajax来完成的,这样就可以将一些隐藏字段的数据保存在HTML标签的属性中,使HTML标签的代码量减少,如:ID,Timestamp等等,这些不需要用户输入但又不得不提交的字段,通过表单提交的做法是 <input name="ID" val

JS解决ie6下png透明的方法实例_javascript技巧

复制代码 代码如下: <!DOCTYPE html><html lang="en"><head><title>解决ie6下png透明方法之JS法-</title><style type="text/css"> .a{background: #FFFF99 ;  background-image: url(bg.jpg); height:800px;padding: 50px;  } .b{ fl

Python中optionParser模块的使用方法实例教程_python

本文以实例形式较为详尽的讲述了Python中optionParser模块的使用方法,对于深入学习Python有很好的借鉴价值.分享给大家供大家参考之用.具体分析如下: 一般来说,Python中有两个内建的模块用于处理命令行参数: 一个是 getopt,<Deep in python>一书中也有提到,只能简单处理 命令行参数: 另一个是 optparse,它功能强大,而且易于使用,可以方便地生成标准的.符合Unix/Posix 规范的命令行说明. 示例如下: from optparse impo

防止用户将表单重复提交四种方法(实例教程)

表单重复提交是在多用户Web应用中最常见.带来很多麻烦的一个问题.有很多的应用场景都会遇到重复提交问题,比如: 点击提交按钮两次. 点击刷新按钮. 使用浏览器后退按钮重复之前的操作,导致重复提交表单. 使用浏览器历史记录重复提交表单. 浏览器重复的HTTP请求. 禁掉提交按钮. 表单提交后使用Javascript使提交按钮disable.这种方法防止心急的用户多次点击按钮.但有个问题,如果客户端把Javascript给禁止掉,这种方法就无效了. 例  代码如下 复制代码 <script type

实例讲解使用CSS实现多边框和透明边框的方法

  CSS多边框 Backgrounds & Borders Level 3 还是一份草案的时候,CSS WG 就在是否支持多重边框的问题进行了大量的探讨,就像是讨论多重背景图片一样.不幸的是,当时认为多重边框的用处并不大,即使需要也可以使用border-image属性来模拟.不过,WG显然忘记了在 CSS 代码中灵活地调整边框,才是我们需要的,现在开发者只能使用一些Hack手段来模拟多重边框,比如使用多重元素的嵌套来模拟多重边框.现在,我将告诉你一些更优秀的方法,无需使用多余的标签即可实现多重