共计 3757 个字符,预计需要花费 10 分钟才能阅读完成。
前言
今天来聊聊这个 border-radius
属性,radius 的英文意思是弧度的意思,而国人更喜欢称之为圆角,因为它可以使得我们的边框有棱有角。当年前辈们都是用图片君搞定圆角的年代或用一条条边框构造的年代已经一去不复返,而移动互联网的高速发展为 border-radius 属性的飞速发展,so 今天就来聊聊圆角边框。虽然英文翻译过来叫做半径弧度,但是为了能让大家更加熟悉,下文统一使用圆角半径来代替。
相关介绍
这个 borde-radius 属性其实也是一个简写值,它分别是 border-top-left-radius(左上圆角半径), border-top-right-radius(右上圆角半径), border-bottom-right-radius(右下圆角半径),border-bottom-left-radius(左下圆角半径)
说到半径,我突然想起来了以前数学中学过关于圆跟半径的关系,百科如下:
在圆中,连接圆心和圆上任意一点的线段叫做圆的半径。通常用字母 r 来表示。
在球中,连接球心和球面上任意一点的线段叫做球的半径。
正多边形所在的外接圆的半径叫做圆内接正多边形的半径。
css 中的 radius 多少也跟圆扯上关系,不过要分椭圆还是圆,因为 css 中分了垂直半径和水平半径。而几何中的圆只要确定了半径就可以画出一个圆出来。css 中圆角,当使用一个值时,确定为圆角;当使用两个值时,确定一个椭圆圆角,但是不管是圆角还是椭圆角其实都有点像是背景和设置这个圆角半径的重叠产生的,浏览器会去除他们的没有交集的部分,留下有交集的部分,像 CDR 里面两个有交集的图形使用的相交。
说完了大概的东东,那么问题来了,圆角边框具体值有哪些,莫急少年,上 w3c 找码去。
对于 border-radius,w3c 的解释在右侧:
- 属性名:
- border-top-left-radius, border-top-right-radius, border-bottom-right-radius, border-bottom-left-radius
- 属性值:
- [
| ]{1,2}
- 初始值:
- 0
- 应用于:
- 除表单元格边框为 collapse 的所有元素
- 继承性:
- 无
- 百分比:
- 根据盒子边框 border-box的宽度.
- 计算值:
- 两个长度,分别
或 percentages
w3c 属性值详解:
[border-top-left-radius:5px, border-top-left-radius:5px 50%
都是可行
{1,2}:表示他们的值最小可以重复一次,最大可重复两次。假如只有一个值,表示圆角,那么它的水平距离和垂直距离相等,即第二个值复制第一个值;假如是两个值,那么确定一个椭圆角,第一个值椭圆的水平半径,第二值为椭圆的垂直半径,说起来有点拗口,直接上图:
只有 1 个值,如:border-top-left-radius:50px
,表示半径为 50px 圆,如图:
标注错误了,盒子尺寸为:300*100
假如有两个值,如:border-top-left-radius:50px 100px
,表示水平半径为 50px,垂直半径为 100px 的椭圆,如图:
同理 border-top-right-radius(右上圆角半径), border-bottom-right-radius(右下圆角半径),border-bottom-left-radius(左下圆角半径),也是如此。你只要记住 当某个角为一个值时,确定是一个圆,当使用两个值确定一个椭圆。
了解 4 个角的工作原理,那么是是时候来了解一下全局圆角的属性值了。
w3c 属性值详解
1、[
2、{1,4}:前面的长度值或者百分比,最小重复一次,最大可重复 4 次,如:border-radius:5px border-radius:5px 10px border-radius:5px 10px 15px border-radius:5px 10px 15px 20px
3、[/ [ border-radius:5px 10px 15px 20px / 5px 10px 15px 20px
其实后面这 4 个值就是控制其垂直半径,规定圆角是椭圆角还是圆形角。
4、?:表示前面的被中括号 [] 包围的这一串数字是可选的,可出现可不出现。
以下没有特别说明,盒子的尺寸 200*100,边框宽度 1px,放大 200% 下所见。
1 个值:border-radius:5px,那么左上角、右上角、右下角、左下角的圆角半径为 5px 的圆。即,值复制,第二、第三、第四个值都是复制第一个值。
2 个值:border-radius:5px 10px,那么左上和右下角、右上和左下角圆的半径相同,即第三个复制第一个,第四个复制第二个的值
3 个值:border-radius:5px 10px 15px,那么左上角半径为 5px 的圆,右上角和左下角半径为 10px 的圆,右下角半径为 15px 的圆,即第四个复制第二个的值。
4 个值:border-radius:5px 10px 15px 20px,那么左上角半径为 5px 的圆,右上角半径为 10px 的圆,右下角半径为 15px 的圆,左下角半径为 20 的圆,这里的值没有复制。
其实提到值复制,之前我专门将到了 margin 和 padding 这两个属性的简写值含义,其实看见 css 语法中有 {1,4} 就说明,假如某个值缺省,那么它就会复制另外一个值来作为自己的值,传送门:分析 margin 和 padding 简写值
刚刚前面第 3 点已经提到了,斜扛“/”符号后面的 4 个值可选,假如要选,那么必须用斜扛符号”/”来分隔开来,斜扛符号后面的值确定一个椭圆的垂直半径,假如 border-radius:5px / 5px 10px 15px 20px 说明四个角的垂直半径分别为 5px,10px,15px,20px。跟上面的一样,这 4 个垂直半径值对应的角是依次分别是 border-top-left-radius(左上圆角垂直半径), border-top-right-radius(右上圆角垂直半径), border-bottom-right-radius(右下圆角垂直半径),border-bottom-left-radius(左下圆角垂直半径)
1 个值:border-radius:5px/5px,那么其水平半径和垂直半径相等,故为圆,如图
2 个值:border-radius:5px/5px 10px,那么其左上角和右下角水平半径和垂直半径为 5px 的圆,右上角和左下角水平半径为 5px,垂直半径为 10px 的椭圆,如图
3 个值:border-radius:5px/5px 10px 15px,那么其左上角半径为 5px 的圆,右上角和左下角水平半径为 5px,垂直半径为 10px 的椭圆,右下角水平半径为 5px,垂直半径为 15px 的椭圆,如图
4 个值:border-radius:5px/5px 10px 15px 20px,那么其左上角半径为 5px 的圆,右上角水平半径为 5px,垂直半径为 10px 的椭圆,右下角水平半径为 5px,垂直半径为 15px 的椭圆故为圆,左下角水平半径为 5px,垂直半径为 20px 的椭圆,如图
说说重叠
什么时候重叠,重叠之后会是怎样子?这个重叠有点儿意思哈,这就是构造我们纯圆形的原理。
重叠分三种情况:
1、左上角和右上角重叠,当宽度 .demo{width:50px;height:100px;border-radius:50px;}
2、左上角和左下角重叠,当宽度 > 圆角半径 * 2 时出现,代码:.demo{width:200px;height:100px;border-radius:50px;}
3、四个角重叠,当宽度 = 高度 = 圆角半径 * 2 时,那么这个时候,四个角会重叠在一起,构成了圆形 .demo{width:100px;height:100px;border-radius:50px;}
重叠后的半径计算
如下两个代码片段
box–sizing: border–box; width: 6em; height: 2.5em; border–radius: 0.5em 2em 0.5em 2em;
box–sizing: border–box; width: 6em; height: 2em; border–radius: 0.5em 2em 0.5em 2em |
第一个片段,height(2.5em)高度恰好可以包含两个相邻半径之和 (0.5em + 2em),那么此时四个角半径正好分别是 0.5em 2em 0.5em 2em。但是假如高度只有 2em 时,高度容纳不了半径为 0.5em + 2em 的圆(2.5em),因此他们只能减小到高度(2em)恰好能容纳这两个圆为止,也就是 2em,所以对应的左上角和右下角减小到 0.4em,右上角和左下角减小到 1.6em,此时正好等于高度(2em)。
即 2em/0.5em + 2em=0.8,每个角都是按照这个比例缩小 0.8,所以得出的半径为:border-radius: 0.4em 1.6em 0.4em 1.6em,而不是之前的 border-radius: 0.5em 2em 0.5em 2em
文章来源: css3:border-radius 圆角边框详解