半透明边框与background-clip
在开始本章之前,我们要先简单介绍CSS中的半透明颜色。自2009年后,网页工作者们开始使用半透明颜色,如rgba()、hsla()。前者相信大家都很熟悉,不难理解其中将有四个参数,第四个参数则为透明度。而后者hsla()则是工业界的颜色标准,它包括了H:Hue(色调—— 用0或360表示红色,120表示绿色,240表示蓝色,也可取其他数值来确定其它颜色,一般取值范围为0~360);S:Saturation(饱和度——取值为:0% - 100%);L:Lightness(亮度——取值为:0% - 100%);Alpha(透明度——取值0~1之间,如“.5”)。从中我们可以明白,要实现颜色的透明化,需要通过修改rgba()/hsla()的第四个参数来达到目的。
自从半透明面世以来其广受欢迎,但实际上大多数半透明颜色都运用在背景上;此外,由于考虑到浏览器我们需要在使用半透明颜色时需要做好回退方案。
到此,你也许已经初步了解了半透明颜色,那么接下来,我将进入本文正题(学习此章需要学习者掌握盒模型知识)。
试想,如果当我们想要让边框实现半透明颜色同时透出背景色我们该如何做呢?
首先,让我们试着为一个<div>元素设置半透明边框,如下:
<body>
<!--为<div>元素设置半透明边框-->
<div style="border:10px dashed rgba(225,225,100,.5);width:600px">
<p>学而时习之</p>
</div>
</body>
其效果如下(图一):

如上图,我们已经设置了透明边框,按理说,当边框有一定的透明度,其背景色也将会透过边框呈现出来,那么我们可以试着给这个<div>元素设置其背景颜色,如下:
<body>
<!--为<div>元素设置半透明边框-->
<div style="border:10px dashed rgba(225,225,100,.5);
width:600px; background-color:red;">
<p>学而时习之</p>
</div> </body>
试着运行这段代码,你是否也得到了如下结果(图二)?

嗯,边框已经透出了背景色,由于我们在设置半透明边框时也为其自身设置了颜色,参照图一,这时边框就像一个自带颜色的透明玻璃框,它盖在了“背景幕布”上面,最后透出了与“幕布”融合的颜色(有种调色的感觉呢)。但是,如果“背景幕布”下还有一层更大的“幕布”,这块带有颜色的透明玻璃框又会怎么做呢?
<body style="background-color:pink">
<!--为<div>元素设置半透明边框-->
<div style="border:10px dashed rgba(225,225,100,.5);
width:600px; background-color:red;">
<p>学而时习之</p>
</div>
</body>
当然你也可以试着用<body>标签的背景图片来进行试验,上述代码我们则得到了以下效果(图三): 
嗯,看来我们可以得出我们的第一个结论了:<div>元素的透明边框透出的是该<div>自身的背景色,也就是说,当我们设置border为透明后,它将会透出其所属元素的背景色。
让我们回顾图二及其代码(如下),会发现我们将border线型设为了dashed,但此时<div>的背景色延伸到了哪里呢?
图二及其代码:
<body>
<!--为<div>元素设置半透明边框-->
<div style="border:10px dashed rgba(225,225,100,.5);
width:600px; background-color:red;">
<p>学而时习之</p>
</div> </body>

没有错,你会发现,<div>的背景色延伸到了border处。但是,这是为什么呢?
如果你已经学习过盒模型了,那么我想你肯定会有所思绪的。上述问题,说白了就是希望背景色“乖乖待在”padding以内的区域的问题。那么要如何实现呢?看看我们这章的标题——半透明边框与background-clip,对的,就是利用background-clip属性。在我们的试验过程中,我们没有说明background-clip属性的属性值,但此时默认地,背景色延伸到了border处;但是如果我们设置一下它的属性值,又会怎样呢?
<body style="background-color:pink;">
<!--为<div>元素设置半透明边框-->
<div style="border:10px dashed rgba(225,225,100,.5);
width:600px;background-color:red;background-clip:padding-box;">
<p>学而时习之</p>
</div>
</body>

we did it !!!!!是的,当我们将background-clip属性的值设为padding-box后,我们解决了“如何让背景色乖乖待在padding以内的区域”的问题。结合前文,我们知道在默认情况(不设置background-clip属性)下,背景延伸会延伸到border处,这就说明实际上此时background-clip属性有一个默认的值,没错,就是“border-box”。由此,我们可以得出我们的第二个结论:background-clip属性说明背景延伸至何处,如果不设置这一属性那么默认情况下其属性值为“border-box”,此时背景色将延伸至border边缘;但是当其属性值为“padding-box”时,背景色将延伸至padding区边缘。
通过设置background-clip为padding-box,我们可以令元素自身的背景色只延伸至padding区边缘,从而令透明的border透出更底下的颜色或者图片,这就是我们想要使用半透明边框的真正目的,也就是这样的效果:

上图效果的代码如下:
<body style="background-image:url('mm93.png');">
<!--为<div>元素设置半透明边框-->
<div style="border:40px solid rgba(225,225,100,.5);
width:200px;height:200px;margin:60px;background-color:red;background-clip:padding-box;">
<p>学而时习之</p>
</div>
</body>
以下就是我们今天解决的三大问题:

半透明边框与background-clip的更多相关文章
- css rgba/hsla知识点讲解及半透明边框
一.RGBA(R,G,B,A) 参数: R:红色值.正整数 | |百分数 G:绿色值.正整数 | |百分数 B:蓝色值.正整数 | |百分数 A:Alpha透明度.取值0~1之间. 说明:此色彩模式与 ...
- CSS揭秘-半透明边框与多重边框
场景一: 实现半透明边框: 由于CSS样式的默认行为,背景色的渲染范围是 content+padding+border. 半透明边框被主调色影响, 实现的效果为 解决方案: 使用backgroun ...
- [css 揭秘]:CSS揭秘 技巧(一):半透明边框
我的github地址:https://github.com/FannieGirl/ifannie/ 源码都在上面哦 喜欢的给我一个星吧 半透明边框 css 中的半透明颜色,比如用 rgba() 和 h ...
- Android Activity 悬浮 半透明边框
1.首先来创建一个Activity,在Activity的OnCreate函数里面我们设置它为全屏,然后设置Activity的宽高为全屏*0.9,然后设置背景图片为半透明的 .9 图片 .这样就已经是非 ...
- css半透明边框
html <div class="parent"> <div class="translucent">I am Bob</div& ...
- css3-background clip 和background origin
1.background-origin background-origin 里面有3个参数 : border-box | padding-box | content-box; border-box,p ...
- css使用rgba()或hsla()设置半透明或完全透明边框border
在css中我们想实现透明颜色,首先就会想到rgba()和hsla()这2个属性.这篇文章就简单介绍下使用这2种方式来实现半透明边框. 1.使用rgba方式: border: 10px solid rg ...
- Css3新特性总结之边框与背景(一)
本系列主要总结Css3一些新特性的认识,来源于<css揭秘>书. 一.半透明边框 css3最好用hsla,而不是rgba,hsla是:h:颜色值(0~360):s:饱合度(0%~100%) ...
- CSS3详解:background
CSS3对于background做了一些修改,最明显的一个就是采用设置多背景,不但添加了4个新属性,并且还对目前的属性进行了调整增强. 1.多个背景图片 在css3里面,你可以再一个标签元素里应用多个 ...
随机推荐
- java多线程(七)-线程之间的 协作
对于多线程之间的共享受限资源,我们是通过锁(互斥)的方式来进行保护的,从而避免发生受限资源被多个线程同时访问的问题.那么线程之间既然有互斥,那么也会有协作.线程之间的协作也是必不可少的,比如 盖个商场 ...
- Vue 爬坑之路(九)—— 用正确的姿势封装组件
迄今为止做的最大的 Vue 项目终于提交测试,天天加班的日子终于告一段落... 在开发过程中,结合 Vue 组件化的特性,开发通用组件是很基础且重要的工作 通用组件必须具备高性能.低耦合的特性 为了满 ...
- MVC框架实例构建
转自:http://www.cnblogs.com/levenyes/p/3290885.html MVC全名是Model View Controller,是模型(model)-视图(view)-控制 ...
- 跟我一起读postgresql源码(八)——Executor(查询执行模块之——可优化语句的执行)
2.可优化语句的执行 可优化语句的共同特点是它们被查询编译器处理后都会生成査询计划树,这一类语句由执行器(Executor)处理.该模块对外提供了三个接口: ExecutorStart.Executo ...
- [Java] 在 jar 文件中读取 resources 目录下的文件
注意两点: 1. 将资源目录添加到 build path,确保该目录下的文件被拷贝到 jar 文件中. 2. jar 内部的东西,可以当作 stream 来读取,但不应该当作 file 来读取. 例子 ...
- 带以太网的MicroPython开发板:TPYBoardv201温湿度上传实例
转载请以链接形式注明文章来源,MicroPythonQQ交流群:157816561,公众号:MicroPython玩家汇 历来关于温湿度的检测都是没有间断过的,这次我们继续检测温湿度,同样还是使用DH ...
- Ubuntu 搭建简单的git server
Git 可以使用四种主要的协议来传输资料:本地协议(Local),HTTP 协议,SSH(Secure Shell)协议及 Git 协议. 在此,我们将会讨论那些协议及哪些情形应该使用(或避免使用)他 ...
- C++ 脑筋急转弯
最近重新温习一下C++的基础知识,这里给大家分享一下,独痛苦不如众痛苦. 先贴出一段示例代码如下: class CTest{ public: CTest(){ ); }; ~CTest(){ if ( ...
- eclipse导入工程时,出现Some projects cannot be imported because they already exist in the workspace
前提条件: 1.将eclipse中现有的工程javatraining删除,如下图所示, 该复选框不要勾选,点击ok steps: 1.本次打开Eclipse想要把已删除的javatraining工程再 ...
- docker with flannel
** 原创文章,请勿转载 ** docker的单host,多container环境下,是使用host的docker0网桥进行通信的.如果跨host, container之间要通信怎么办呢?答案是fla ...