边框(圆角,背景,阴影)

Border and Box effects

图片

Giving your borders rounded corners

border-radius

E { border-v-h-radius: x y; }

v可以是topbottom,h可以是leftright
X和Y分别是定义在X轴和Y轴上的长度,当X,Y值一样时,可只设置一个值,生成圆角;当X,Y值不一样,生成椭圆角。

/* 下面的两个规则是等价的 */
div { border-top-right-radius: 20px 20px; }
div { border-top-right-radius: 20px; }

为每一个corner变成圆角:

div {
    border-top-left-radius: 10px 20px;
    border-top-right-radius: 10px 20px;
    border-bottom-right-radius: 10px 20px;
    border-bottom-left-radius: 10px 20px;
}

上面的写法太啰嗦,可以用缩写border-radius 属性,其值从左上角开始顺时针展开。
padding margin 一样,其值可以是一个到四个(当是圆角时)。

E { border-radius: [top-left] [top-right] [bottom-right] [bottom-left]; }

paddingmagin的处理方式,如下图,当只有一个时,会复制到每一个;当有两个值时,第一个复制到第三个,第二个复制到第四个;当有三个值时,第二个复制到第四个。

如果需要椭圆角,需要用 / 将水平和垂直半径隔开。斜线的左右分别可以有一到四个值,斜线左边分别是四个角的水平半径,斜线右边分别是四个角的垂直半径。

border-radius: { horizontal-radius / vertical-radius; }
<div class="radius-1"></div>
<div class="radius-2"></div>
<div class="radius-3"></div>
div {
    height: 200px;
    width: 100px;
    border: 1px solid;
    float: left;
    margin-left: 20px;
    border: 2px solid rgba(173, 216, 230, 1);
}
.radius-1 { border-radius: 20px / 10px; }  /* 等价于 20px 20px 20px 20px / 10px 10px 10px 10px*/
.radius-2 { border-radius: 20px / 10px 20px; } /*等价于 20px 20px 20px 20px / 10px 20px 10px 20px*/
.radius-3 { border-radius: 10px 20px 20px / 20px 10px; } /* 10px 20px 20px 20px / 20px 10px 20px 10px*/

Using percentage values

圆角半径值还可以是百分比,针对元素边长度的百分比。利用百分比,可以很容易将元素变成圆形。

还用前面的HMTL为例,修改样式如下:

div {
    height: 100px;
    width: 100px;
    border: 1px solid;
    float: left;
    margin-left: 20px;
    border: 2px solid rgba(173, 216, 230, 1);
}
.radius-1 {
    border-radius: 50%;
}
.radius-2 {
    width: 200px;
    border-radius: 50% / 50%;
}

Using images for borders

下面是一些用来设置边框背景图片的属性。

border-image-source

border-image-source 属性,指定边框背景图片。

E { border-image-source: url('foo.png'); }

border-image-slice

border-image-slice 属性切割背景图片,接受一到四个值,和paddingmagin的处理方式一样(上右下左)。
其值可以是长度值或百分比,分别代表 从图片每一边向内偏移的距离。

E { border-image-slice: 34; }

注意其值不带单位,有两种单位,对于bitmap(如jpg png)其单位是px;对于vector(如SVG),其是坐标。

来看下面的例子:

<div class="source"></div>
<div class="same"></div>
<div class="scale"></div>
<div class="fill"></div>
div{
    float: left;
    margin-left: 10px;
    border: 30px;
    width: 240px;
    height: 180px;
}
.source{
    width: 300px;
    height: 240px;
    background-image: url("border3.jpg");
}
.same{
    border-image-source: url("border3.jpg");
    border-image-slice: 30;
}
.scale{
    border-image-source: url("border3.jpg");
    border-image-slice: 30 10;
}
.fill{
    border-image-source: url("border3.jpg");
    border-image-slice: 30 10 fill;
}

最左:DIV背景图用作参考。
第二:距边框top right bottom left分别向里切30px,然后显示到border上,border的宽度正好也是30px,所以边框图片没有拉伸的效果。
第三:距边框top right bottom left分别向里切30px 10px 30px 10px,所以左右两边只切了10px,这10px要显示到边框上,可边框的宽度是30px,所以有被拉伸的效果。
最右:由于设置了fill关键字,所以中间部分也被border-image-source覆盖了。

border-image-width

上例中边框图片被切割的宽度和高度被设置到边框宽度上了,这个宽度可以通过 border-image-width 来设置。他可以接受一到四个值,可以长度值,百分比或是无单位的数值。

E { border-image-width: value; }

此属性不会影响元素边框,及其框模型。
如果其值是无单位的数值n,那么最终 border-image-width 的值是 n * border-width。

border-image-outset

border-image-outset,该属性设置边框图片向外突出的距离,感觉就是向外拉伸多少。接受一到四个值。

E { border-image-outset: 15px 30px; }

border-image-slice 是向里切,这个属性是向外拉(向上,向右,向下,向左)。

border-image-repeat

该属性值是三个关键字:stretch, repeat, round,默认值是stretch
默认stretch边框图片会沿着边框的长度被拉伸;
repeat 边框图片会沿着边框重复显示,会截断图片。
round 边框图片会沿着边框重复显示,但是他不会截断图片。比如repeat显示了2.6张,那么round后就会显示3张,这3张会被拉伸或压缩。

E { border-image-repeat: keyword; }

还可以同时设置两个关键字,分别控制水平和垂直方向。

E { border-image-repeat: stretch round; }
<div class="same"></div>
<div class="scale"></div>
<div class="fill"></div>
div{
    float: left;
    margin-left: 10px;
    border: 30px;
    width: 240px;
    height: 280px;
    border-image-source: url("border3.jpg");
    border-image-slice: 30 fill;
}
.scale{
    border-image-repeat: repeat;
}
.fill{
    border-image-repeat: round;
}

border-image

速写属性border-image:

E { border-image: source slice/ width/ outset repeat; }
E {
    border-image-source: url('foo.png');
    border-image-slice: 25 10 fill;
    border-image-width: 25px 10px;
    border-image-outset: 5px;
    border-image-repeat: round;
}
F { border-image: url('foo.png') 25 10 fill / 25px 10px / 5px round; }

box-shadow

为边框添加阴影效果。

E { box-shadow: inset horizontal vertical blur-radius spread color; }
描述
inset 可选值,控制是边框内阴影还是外阴影
horizontal和vertical 分别是水平和垂直偏移距离
blur-radius 控制阴影的模拟半径
spread 阴影扩展半径,其值可以是正负值,如果值为正,则整个阴影都延展扩大,反之值为负值时,则缩小
color 指阴影颜色

text-shadowbox-shadow也可以同时设置多个阴影。

<div>box-shadow</div>
<div class="blur">blur</div>
<div class="spread">negative spread</div>
<div class="outset">outset</div>
<div class="inset">inset</div>
<div class="multi">multiple shadow</div>
div{
    width: 100px;
    height: 100px;
    text-align: center;
    margin-left: 20px;
    border: 1px solid;
    float: left;
    -webkit-box-shadow: 5px 5px 0px 0px lightblue;
}
.blur{-webkit-box-shadow: 5px 5px 3px 0px lightblue;}
.spread{-webkit-box-shadow: 10px 10px 3px -5px lightblue;}
.inset{-webkit-box-shadow: inset 5px 5px 3px 5px lightblue;}
.multi{-webkit-box-shadow: inset 5px 5px 3px 0px lightblue,inset -5px -5px 3px 0px pink;}

此文是对《The Book of CSS3 2nd edition》第9章的理解和归纳,方便以后查阅。
感谢其作者Peter Gasston !

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容

  • CSS边框属性 元素的边框就是围绕元素内容和内边距的一条或多条线。 元素的边框属性: border 简写属性,用...
    Zd_silent阅读 977评论 0 1
  • 1、属性选择器:id选择器 # 通过id 来选择类名选择器 . 通过类名来选择属性选择器 ...
    Yuann阅读 1,621评论 0 7
  • 选择qi:是表达式 标签选择器 类选择器 属性选择器 继承属性: color,font,text-align,li...
    love2013阅读 2,304评论 0 11
  • 选择qi:是表达式 标签选择器 类选择器 属性选择器 继承属性: color,font,text-align,li...
    wzhiq896阅读 1,733评论 0 2
  • 1.块级元素和行内元素 块级(block-level)元素;行内(内联、inline-level)元素。 块元素的...
    饥人谷_小侯阅读 1,991评论 1 4