自我介绍 hello,大家好,我叫小黑,也叫xiaoho,目前喜欢并从事写页面。因为不喜欢在那些类似BBS型的论坛上发帖,所以之前在html-js上发表几篇戳文,现在申请了前端观察打字员,在这里谢谢神飞童鞋,虽然我不懂他是干嘛的~不过为什么选择在这里发表文章的缘由就是下面这句话:
我非圣人,我只是把我自己所学所想的表达出来,毕竟个人想法有限,假如有悖论或者冒犯之处,还请拍砖,大家一起在争论中提高。还有,也许你们可能也会奇怪,为什么网上有这么一大把的学习的文章,类似的文章还要自己写出来,我的个人想法是:只有自己亲自去实践过才有发言权。 前言对于这个border-image属性已经不是什么新奇的事情了,也是一个老生长谈的话题。这是属性从很多年前已经出现了,但一直形单影只的,似乎不被看好,但是假如你对此深入研究之,想必其用处还是多多,不过很可惜到目前为止对于浏览器支持还不比其他css3属性多,特别是IE,只有IE11以上才支持,详情请移步 border-image兼容性。不过很好,对于纯正的现代浏览器和移动浏览器支持度还是非常牛逼哄哄的,所以今天就来详解一下这个属性的各个值。 border-image摘要其实我[border-image属性]是用来给元素边框添加背景图像,在某些时候,利用这个 哦,对了,忘记跟你说了,我的作用就是用来代替
所以,我的完整写法是 .border-image-all{ border:27px solid #000; border-image:url(http://img.xiaoho.com/2014/09/border.png) 27 27 27 27 fill/27 27 27 27/27px 27px 27px 27px repeat;} 如你所见,这正是我的一个简写值。请不要头晕哦,虽然是一长串的各种英文单词,但是你对我恐怕也不陌生哒,想想css属性当中有哪些是跟图片相关的,反正我是想到了 border-image有六大属性值,分别是:图片地址border-image-source、图片切片border-image-slice、图片宽度border-image-width、图片外凸border-image-outset、图片重复border-image-repeat 图片地址border-image-source
我叫引入图片地址属性,我这个属性的属性值是比较好理解滴,因为就只有两个属性值嘛,初始值是none,假如设置了none,那么我们的盒子边框就会应用 .border-image{ 图片切片border-image-slice
我叫border-image-slice,指定边框图像顶部、右侧、底部、左侧内偏移量。我的没有具体的单位值,比如像px、em统统不能应用在我身上,你只要给我一个单纯的数字即可,当然了你也可以按照百分比来给我设置滴啦。我的作用就是把边框图像切成9个区域:4个角、4边区域和一个中间部位,前辈们都谦虚称作9宫格,但是我悄悄跟你说哦,假如说不应用fill这个可选属性值的话,那么中间第九块格子被当做透明不见,相当于中间那块被哪条狗吃了呢! 第一个值为number,即纯数字作为单位计量,如1,2,3…;第二个值为percentage,即百分比作为单位;{1,4}表示前面的数字最少出现一次,最多出现4次,如 你们一定是很好奇,我具体是怎么工作机制的呢,就算csser指定了几个数字上去,但是压根就不懂他是怎么工作的,那就呵呵啦。所以下面带来详解: 图片用了w3c指定专用产品~一个81px的正方形位图,9个菱形图案,每个菱形图案为27*27px 接着距离右侧内偏移区域27px竖切一刀 紧接着距离底部内偏移区域27px横切一刀 接着距离左侧内偏移区域27px竖切一刀 那么给定图像切片 这几刀下来把我分成了9个部分,因此我被9宫格也就此由来 所以被切割的部位都分布在盒子边框这9个地方,如上所示。对应的,被分隔的图像只能在边框宽度(border-width)内活动,什么意思呢,比如盒子边框为
为了证明我的观点,我用了两个demo来展示一下, demo1:当盒子边框宽度比被切图片边框大的时候,如下代码 .border-image{ 效果: 对此我的理解是如下步骤: demo2:当盒子边框宽度比被切图片边框小的时候,如下代码 .border-image{ 效果: 对此我的理解是如下步骤: 因此,我所了解的四个顶角的变化其实是带有拉伸功能的,当然假如说盒子边框和被切图片宽度相等,那么这样就不会有拉伸的效果。 说说fill值 能不能控制图片边框的宽度,而不是每次都要调试盒子边框宽度?当然是有,下面就来介绍这个 边框图片宽度border-image-width
我叫border-image-width,我的作用就是代替盒子本身的边框宽度border-width。假如指定,那么边框图片宽度就由我来做主,假如不指定,那么图片边框宽度就由盒子的边框宽度来固定。我可以用具体像素、数字(表示几倍)和百分比来表示,最少1个值,最多4个值,分别代表上右下左图片边框宽度,注意哦,相关代码如下: .border-image{ 边框图片外凸border-image-outset
我叫border-image-outset,我的作用就让边框背景延伸到盒子外。有两个属性值length和number,前者是具体的像素单位,后者是数字,最少1个值,最多4个,分别代表上右下左图片边框向外延伸的距离,相关代码如下: .border-image{ 边框图片重复border-image-repeat
我叫border-image-repeat,顾名思义,我的作用就让边框背景是否重复,默认值为stretch,是拉伸的意思,4个角4个区域分别做水平和垂直方向的拉伸,来填补边框的间隙;repeat是就是让4个角4个区域做完水平和垂直方向的复制图像,做CTRL+V运动,把边框之间的空隙填满;而round[环绕]是把4个角和4个区域分成均等区域,然后用背景图片切好能铺满整个边框空隙,不能多也不能少,正好合适。听说下面有demo↓: .border-image-stretch{ 效果如下: 可以点击这里查看完整:边框图片重复属性值 应用对于应用来说,这个边框图片太强大了的,随便一折腾就可以弄出奇形怪状的边框来,使得边框不在拘泥于那些传统的线框。不管你是调slice值,还是repeat值、或者是outset值都可以变化很多新花招,刚刚我们其实在做demo展示的时候已经展现出来,那么下面我就用来一个一张图片构造最简单的我们的圆弧长方形。 结语好了,就这么多了,这个属性目前对于IE来说真是渣渣,但是手机端上的兼容性还是非常友好的,假如你不想用老旧的线来构造一个边框的话,那么就换一张图片来构造丰富的边框样式吧,你会发现,css3的世界真是非常强大的。 |
css3:border-image边框图像详解