这几天工做中遇到一个问题,要求实现一个效果,当鼠标移入一个元素的时候,元素出现一个动态的边框,如图:css
我首先想到的是border属性,但是border属性不能设置长度。若是用border实现,须要用其余元素来模拟,比较麻烦。后来忽然想起之前在网上看到有人用CSS3的多背景来模拟边框,就是了一下。html
CSS3对于background
作了一些修改,最明显的一个就是采用设置多背景,不但添加了4个新属性,而且还对目前的属性进行了调整加强。css3
一、 多个背景图片性能
在css3里面,你能够再一个标签元素里应用多个背景图片。代码相似与css2.0版本的写法,但引用图片之间需用“,”逗号隔开。第一个图片是定位在元素最上面的背景,后面的背景图片依次在它下面显示,以下:网站
background-image: url(top-image.jpg), url(middle-image.jpg), url(bottom-image.jpg);
二、新属性:Background Clipurl
此讨论让咱们回到文章开始提到的关于背景被border边框遮挡的问题。background-clip
的添加让咱们彻底可以控制背景显示的位置。属性值以下:spa
background-clip: border;
背景在border边框下开始显示background-clip: padding;
背景在padding下开始显示,而不是border边框下开始background-clip: content;
背景在内容区域下开始显示,而不是border边框下开始或padding下开始。background-clip: no-clip;
默认属性值,相似与background-clip: border;三、新属性: Background Origincode
此属性须要与background-position
配合使用。你能够用background-position
计算定位是从border,padding或content boxes内容区域算起。(相似background-clip
)htm
background-origin:border;
从border边框位置算起background-origin:padding;
从padding位置算起background-origin:content;
从content-box内容区域位置算起;background-clip
和background-origin
的不一样之处www.CSS3.info网站给作了很好的分析讲解。图片
四、新属性:Background Size
Background Size属性用来重设你的背景图片。有几个属性值:
background-size: contain;
缩小背景图片使其适应标签元素(主要是像素方面的比率)background-size: cover;
让背景图片放大延伸到整个标签元素大小(主要是像素方面的比率)background-size: 100px 100px;
标明背景图片缩放的尺寸大小background-size: 50% 100%;
百分比是根据内容标签元素大小,来缩放图片的尺寸大小你能够去CSS 3 specifications站点看一下简单的案例说明。
五、新属性:Background Break
css3里标签元素能被分在不一样区域(如:让内联元素span跨多行),background-break
属性可以控制背景在不一样区域显示。 属性值:
Background-break: continuous;
此属性是默认值,忽视区域之间的间隔空隙(给它们应用图片就好像把它们当作一个区域同样)Background-break: bounding-box;
从新考虑区域之间的间隔Background-break: each-box;
对每个独立的标签区域进行背景的从新划分。六、背景颜色的调整
background-color
属性在css3版本里面稍微作了加强,除了指定background color背景颜色以外,还能够对不使用的标签元素背景图片进行去色处理。
background-color: green / blue;
此例子里,这背景颜色多是绿色,然而,若是底部背景图片无效的话,蓝色将代替绿色来显示。若是你没有指定某个颜色的话,它将其视为透明。
七、背景重复的调整
css2里当设置背景的时候,它常常被标签元素截取而显示不全,css3介绍了2个新属性来修复此问题。 space:图片以相同的间距平铺且填充整个标签元素 round:图片自动缩放直到适应且填充整个标签元素
CSS 3 specifications网站对background-repeat: space
的使用就是一个现成的例子。
八、Background Attachment 的调整
Background Attachment有了一个新属性值:local,当标签元素滚动时它才有效(如设置overflow:scroll;
),当background-attachment
设置为scroll时,背景图片是不随内容滚条滚动的。如今,有了background-attachment:local
,就能够作到让背景随元素内容滚动而滚动了。
咱们这里主要使用了background-img
、background-size
和 background-position
三个属性。
background-image: [background-image], [background-image], [background-image]; background-position: [background-position], [background-position], [background-position]; background-repeat: [background-repeat], [background-repeat], [background-repeat];
简写形式以下:
background: [background-image] [background-position] [background-repeat], [background-image] [background-position] [background-repeat], [background-image] [background-position] [background-repeat];
如今咱们用多背景来模拟一个元素的边框
/*CSS*/ .exammple { background: linear-gradient(0, #108b96 2px, #108b96 2px) no-repeat, linear-gradient(-90deg, #108b96 2px, #108b96 2px) no-repeat, linear-gradient(-180deg, #108b96 2px, #108b96 2px) no-repeat, linear-gradient(-270deg, #108b96 2px, #108b96 2px) no-repeat; background-size: 100% 2px, 2px 100%, 100% 2px, 2px 100%; background-position: left top, right top, right bottom, left bottom; }
<div class="exammple"></div>
咱们用四个渐变的背景来模拟四个边框(为何咱们要用渐变而不是直接的Color呢?这是因为Css的多背景只能是background-image
, background-color
不支持多个值,全部即使是纯色的边框,咱们也只能使用渐变)。
接下来咱们让边框动起来
/*CSS*/ .exammple { transition: ease-in .3s; background: linear-gradient(0, #108b96 2px, #108b96 2px) no-repeat, linear-gradient(-90deg, #108b96 2px, #108b96 2px) no-repeat, linear-gradient(-180deg, #108b96 2px, #108b96 2px) no-repeat, linear-gradient(-270deg, #108b96 2px, #108b96 2px) no-repeat; background-size: 0 2px, 2px 0, 0 2px, 2px 0; background-position: left top, right top, right bottom, left bottom; } .exammple:hover { background-size: 100% 2px, 2px 100%, 100% 2px, 2px 100%; }
相比border属性,用background的模拟边框的优点在于能够控制边框的宽高,运动方向等,实现不少border不能实现的效果,劣势在于不能实现border的圆角。