border-radius

(密码:tg2b) 《border-radius》

border-radius

作用

CSS3新增属性。设置元素外边框圆角。如下代码:

<div id="radius"></div>
#radius {
    width: 100px;
  height: 100px;
  background-color: aquamarine;
  border-radius: 10px; /* 设置圆角*/
}

效果如下:

                                                    border-radius

通过上面的效果图,我们可以了解到,border-radius设置的是一个元素4个方向的角,即左上角、右上角、右下角、左下角,所以,要记住:border-radius实际上为一个简写属性,将 border-top-left-radius 、 border-top-right-radius 、 border-bottom-right-radius 、 border-bottom-left-radius 简写为一个属性,上述代码相当于:

border-top-left-radius: 10px;
border-top-right-radius: 10px;
border-bottom-right-radius: 10px;
border-bottom-left-radius: 10px;

 

为何为圆角?

相信大家一定想要知道设置 border-radius 后,元素的圆角具体是怎么加上去的,其实,这个很简单。

实质上,当你给border-radius设置一个值时,就相当于用该值为半径,画了个圆,将这个圆刚好卡在元素的角上,取圆与边框的交集,形成一个圆角,如下图:

border-radius

取交集后:

border-radius

 border-radius 的值除了可以设置一个外,还可以设置多个值,具体使用方法如下⬇️

 

使用方法

1、1个值

例:border-radius: 30px;

如上所述,将30px作为半径画圆,卡在元素的四个角上,取圆与边框的交集,形成一个圆角。

 

2、2个值

例: border-radius: 10px 30px; 

效果如下:

border-radius

 

由上可知,设置一个值时,使用该值为半径画圆,那么设置两个值呢?

答案是设置的值同时为半径, 10px设置的为左上角和右下角的圆的半径,30px设置的为右上角和左下角的圆的半径,相当于:

border-top-left-radius: 10px;
border-top-right-radius: 30px;
border-bottom-right-radius: 10px;
border-bottom-left-radius: 30px;

将圆分别放到对应的角上,取边框与圆的交集,形成圆角,如下图:

border-radius

取交集后:

 

border-radius

3、3个值

例:border-radius: 10px 20px 30px;

效果如下:

border-radius

设置3个值时,3个值同时为半径, 10px 设置的为左上角圆的半径、 20px 设置的为右上角和左下角的圆的半径、 30px 设置的为右下角的圆的半径,相当于:

border-top-left-radius: 10px;
border-top-right-radius: 20px;
border-bottom-right-radius: 30px;
border-bottom-left-radius: 20px;

将圆分别放到对应的角上,取边框与圆的交集,形成圆角,如下图:

border-radius

取交集后:

border-radius

 

4、4个值

例: border-radius: 10px 20px 30px 40px; 

效果如下:

border-radius

设置为4个值时,就相当于分别设置了4个角的圆角, 10px 设置的为左上角的圆的半径、 20px 设置的为右上角圆的半径、 30px 设置的为右下角圆的半径、 40px 设置的为左下角圆的半径,相当于:

border-top-left-radius: 10px;
border-top-right-radius: 20px;
border-bottom-right-radius: 30px;
border-bottom-left-radius: 40px;

将圆分别放到对应的角上,取边框与圆的交集,形成圆角,如下图:

border-radius

取交集后:

border-radius

5、5个值

例:border-radius: 10px 20px 30px 40px / 5px;

效果如下:

border-radius

设置5个值时, / 后面的值为什么意思呢?

先不管是什么意思,而是记住一点,只要看到 / 了,就要知道,此时不是画  了,而是画 椭圆 。

椭圆是由两个半径画出来的,也就是长轴和短轴,这里不容易区分是长轴为水平方向上的还是短轴为水平方向上的,所以我们就暂且自己定义两个名字:

    • 水平半径:水平方向上的半径,如下面示意图中的红色线
    • 垂直半径:垂直方向上的半径,如下面示意图中的橙色线

示意图:

border-radius

回到正题,设置5个值时究竟在设置什么?

答案是: / 前面的值设置的为水平半径, / 后面的值设置的为垂直半径,也就是说,左上角椭圆的半径为 10px 5px 、右上角椭圆的半径为 20px 5px 、右下角椭圆的半径为 30px 5px 、左下角椭圆的半径为 40px 5px 。相当于:

border-top-left-radius: 10px 5px;
border-top-right-radius: 20px 5px;
border-bottom-right-radius: 30px 5px;
border-bottom-left-radius: 40px 5px;

将椭圆分别放到对应的角上,取边框与圆的交集,形成圆角,如下图:

border-radius

取交集后:

border-radius

此种的使用方法还有很多变形,如:

    • border-radius: 10px / 5px;
    • border-radius: 10px 20px 30px 40px / 5px 10px;
    • border-radius: 10px 20px 30px 40px / 5px 10px 15px;
    • border-radius: 10px 20px / 5px;
    • border-radius: 10px 20px 30px / 5px 10px 15px;
    • and so on...

 

虽然变种很多,但是万变不离其宗,记住以下几点:

    • / 前面的值设置的为水平半径, / 后面的值设置的为垂直半径
    • 设置1个值 a 时,四个角的半径都为a
    • 设置2个值 a b 时,左上半径和右下半径为a,右上半径和左下半径为a,即对角一致
    • 设置3个值 a b c 时,左上半径为a,右上半径和左下半径为b,右下半径为c
    • 设置4个值 a b c d 时,左上半径为a,右上半径为b,右下半径为c,左下半径为d

 

如果实在记不住,可以抽象一些,将元素旋转一下,变为左上角朝上,那么就可以以 padding  or margin 的简写属性记住 border-radius 的啦,如下图:

border-radius

 

以上,即为 border-radius 所有的使用方法,但是,除了给 border-radius 设置数值之外,也可以将其值设置为百分比,如下⬇️

 

值类型

1、length

如上,定义圆形半径 或 定义椭圆 水平半径 及 垂直半径。注意:负值无效。

2、percentage

使用百分数定义圆形半径 或 定义椭圆 水平半径 及 垂直半径,注意:

    • 水平半径相对于盒模型的宽度
    • 垂直半径相对于盒模型的高度
    • 负值无效

 

大值特性

当给border-radius设置的值过大时,只会使用能够渲染的圆角大小进行渲染,如:

代码一:

#radius {
    width: 100px;
  height: 100px;
  background-color: aquamarine;
  border-radius: 50%;
}

代码二:

#radius {
    width: 100px;
  height: 100px;
  background-color: aquamarine;
  border-radius: 300px;
}

上述两段代码的效果时一致的,都为:

border-radius

 

因为宽高都为 100px 的元素,最大只能渲染出来半径为 50px 的圆角。

那么,依据大值特性能说明 50% 的效果和超出最大半径的值的效果一致吗?

  • 如果元素为正方形的话,效果会一致
  • 如果元素为长方形的话,则不然,我们再来看两段代码:

 

代码一:

#radius {
    width: 100px;
  height: 200px;
  background-color: aquamarine;
  border-radius: 50%;
}

效果:

border-radius

代码二:

#radius {
    width: 100px;
  height: 200px;
  background-color: aquamarine;
  border-radius: 300px;
}

效果:

border-radius

看到两段代码的运行结果后,会惊奇的发现,效果咋不一样?为什么?看下面⬇️

 

等比例特性

除了大值特性外, border-radius 还有一个等比例特性,即水平半径和垂直半径的比例是恒定不变的。

 

代码段一中,元素的宽度为 100px 、高度为 200pxborder-radius 为50%,也就是说,水平半径为 50px  、垂直半径为 100px 。

 

在上面的代码中,元素的宽度为 100px 、高度为 200px ,水平半径为 300px 、垂直半径为 300px ,根据大值特性,水平半径为50px,垂直半径为100px。再根据等比例特性,垂直半径/水平半径 = 1,故,垂直半径也应为 50px ,也就是说相当于设置了 border-radius: 50px 。

 

border-radius: 50px; 必然和 border-radius: 50px 100px; 的效果不同

 

兼容性

点击链接查看:https://caniuse.com/#search=border-radius

基本上所有的浏览器都支持border-radius,故使用时不需要再过多的考虑兼容性问题,

 

撰写人:杉杉