分享

css3:border

 leong 2016-10-19

border-image摘要

其实我[border-image属性]是用来给元素边框添加背景图像,在某些时候,利用这个 border-image 可以轻松绘制一些比较复杂的小部件。

我的完整写法是

  .border-image-all{ border:27px solid #000; border-image:url(http://img./2014/09/border.png) 27 27 27 27 fill/27 27 27 27/27px 27px 27px 27px repeat;}  

如你所见,这正是我的一个简写值。请不要头晕哦,虽然是一长串的各种英文单词,但是你对我恐怕也不陌生哒,想想css属性当中有哪些是跟图片相关的,反正我是想到了 background 属性值了。css当中引入图像的属性的属性值不外乎有:图片地址background-image、图片重复background-repeat、图片平铺方式background-attachment等。因此对于边框图像也是大同小异滴啦。下面我们就一一分析这些单独的属性值。

border-image有六大属性值,分别是:图片地址border-image-source、图片切片border-image-slice、图片宽度border-image-width、图片外凸border-image-outset、图片重复border-image-repeat

图片地址border-image-source叫引入图片地址属性,我这个属性的属性值是比较好理解滴,因为就只有两个属性值嘛,初始值是none,假如设置了none,那么我们的盒子边框就会应用 border-style 的值;假如你想要设置一个外部链接地址的图片进来那么代码可以直接写到:

.border-image{ 
border:20px solid #000; 
border-image-source:url(border.png); //目测我会长得很丑比 ~ .~,不信你试试
}

图片切片border-image-slice

属性名称:

border-image-slice

值:[ < number> |< percentage>]{1,4} && fill?

border-image-slice,指定边框图像顶部、右侧、底部、左侧内偏移量。没有具体的单位值,比如像px、em统统不能应用在我身上,你只要给我一个单纯的数字即可,当然了你也可以按照百分比来给我设置滴啦。作用就是把边框图像切成9个区域:4个角、4边区域和一个中间部位,前辈们都谦虚称作9宫格,但是我悄悄跟你说哦,假如说不应用fill这个可选属性值的话,那么中间第九块格子被当做透明不见!

第一个值为number,即纯数字作为单位计量,如1,2,3…;第二个值为percentage,即百分比作为单位;{1,4}表示前面的数字最少出现一次,最多出现4次,如 border-image-slice:27 border-image-slice:27 27 border-image-slice:27 27 27 border-image-slice:27 27 27 27 都是可以的,这个和margin的值大同小异,假如你还不懂这些缩写值具体代表什么,那么你不妨去看看前段时间写的一篇关于margin的简写值,fill为可选属性值,假如指定,那么中间第九块不是透明块,假如不指定,那么为透明图片处理。

例子:

图片用了w3c指定专用产品~一个81px的正方形位图,9个菱形图案,每个菱形图案为27*27px

左上角、右上角、右下角、左下角为4个橙色菱形,顶部区域、右侧区域、底部区域、左侧区域为4个土黄菱形,中间块(贱称第九区)为透明块。刚刚也说过了,这个border-image-slice就是一个切片的作用,把图像直接切开,中间不留痕迹,假如给定这个属性值:border-image-slice:27 27 27 27 

给定图像切片border-image-slice:27 27 27 27完整动态图如下:

这几刀下来把我分成了9个部分,因此我被9宫格也就此由来

所以被切割的部位都分布在盒子边框这9个地方,如上所示。对应的,被分隔的图像只能在边框宽度(border-width)内活动,什么意思呢,比如盒子边框为border-width:54px 分割图片为border-image-slice:27,因为图像4个顶角的宽度和高度都只有27px,但是盒子的边框是54px,因此图片就要被水平方向和垂直方向拉伸到切好跟盒子边框宽度等同,即27px的图像拉伸到54px停止,再往前就不行了

demo1:

当盒子边框宽度比被切图片边框大的时候,如下代码

.border-image{ 
            border:54px solid #000;  //盒子边框为54px
            border-image-source:url(border.png); 
            border-image-slice:27 27 27 27; //边框图片被切成9个区域,其中4个顶角的大小为 27*27px
}

效果:

demo2:

当盒子边框宽度比被切图片边框小的时候,如下代码

.border-image{ 
            border:14px solid #000;  //盒子边框为14px
            border-image-source:url(border.png); 
            border-image-slice:27 27 27 27; //边框图片被切成9个区域,其中4个顶角的大小为 27*27px
}

效果:

因此,我所了解的四个顶角的变化其实是带有拉伸功能的,当然假如说盒子边框和被切图片宽度相等,那么这样就不会有拉伸的效果。

说说fill值

fill值是一个可选属性值,假如指定这个值,那么第九区就会出现,假如不指定,那么第九区就被外星人攻占,隐藏起来!(楼下会有demo↓)两点注意:

1、slice不允许设置负值,设置负值和设置大于盒子的高度或者宽度都被100%

2、slice切过的区域有可能会重叠,如果右切和左切的值之和≥盒子的宽度,那么顶部区域(5号)和底部区域(7号)为空白,反之亦然。


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多