我想把自己知道的关于border-radius的所有”特别”内容记录于此。
代码链接:https://jsbin.com/wubopifoxi/edit?html,css,output

用法

首先我们抛开偏见,不看平时缩写的写法,看完整的border-radius的写法。

  1. .circle {
  2. width: 100px;
  3. height: 100px;
  4. border-radius: 50%; // 用border-radius实现一个圆
  5. border-radius: 50px; // 可转换为具体长度值
  6. border-radius: 50% 50% 50% 50%; // 进一步完整的写法,上右下左的角的值
  7. border-radius: 50% 50% 50% 50% / 50% 50% 50% 50%; // 最完整写法,水平和垂直方向的各个角的值
  8. }

**border-radius: 50% 50% 50% 50%;** 代表上右下左四个角的border-radius值;
**border-radius: 50% 50% 50% 50% / 50% 50% 50% 50%;**
斜杠前/ 代表上右下左 的 四个角的 水平方向的border-radius值,/斜杠后 代表的是 上右下左的 四个角的 垂直方向的 border-radius值。

值的转化

  1. .circle {
  2. width: 100px;
  3. height: 100px;
  4. border-radius: 50%; // 将其转换为具体边长值(长宽值相同)
  5. border-radius: 50px / 50px; // 水平和垂直方向均为当前值的 50%
  6. border-radius: 50px; // 由于两边值相同,所以缩写为一个值 50px 即可
  7. }
  8. .ellipse {
  9. width: 200px;
  10. height: 100px;
  11. border-radius: 50%; // 将其转换为具体边长值(注意:长宽值不同!!)
  12. border-radius: 100px / 50px; // 水平和垂直方向均为当前值的 50%,即100px / 50px
  13. }

解释

当我们看到一个border-radius的值时,其实相当于在该div的四周画上了对应大小的椭圆,取椭圆的四分之一边和div的对应夹角的 那个弧度,就是我们最终得到的 弧度。
image.pngimage.png

实践

画半圆

image.pngimage.png
观察(上右下左四个角):
image.png

  1. “上”和“右”几乎相同,所以一起分析,水平方向上他们各自承担了一半的的宽度,垂直方向上与高平齐,所以垂直方向上的值为50%,水平方向的值为100%;
  2. “左”和“下”无角度,因此无水平方向的高度,所以水平方向的值为0,垂直方向上的值也为0;
  3. 结果如下
    1. .semicircle {
    2. width: 100px;
    3. height: 100px;
    4. border-radius: 50% 50% 0 0 / 100% 100% 0 0;
    5. }

左侧倾倒90°的半圆

image.pngimage.png
观察(上右下左四个角):
image.png

  1. “右”和“下”都没有水平方向的距离(水平方向值为0),于是垂直方向直接也给0;
  2. “上”和“左”水平方向为平均的曲线(无直线段),所以水平方向的值为宽度的100%,垂直方向的距离各为高度的一半,所以垂直方向的值为高度的50%;
  3. 结果如下
    1. .vertical-semicircle {
    2. width: 100px;
    3. height: 200px;
    4. border-radius: 100% 0 0 100% / 50% 0 0 50%;
    5. }

四分之一圆

image.pngimage.png
观察(上右下左四个角):
image.png

  1. “右、下、左”三个角均无水平距离,所以水平距离为0,垂直距离给0;
  2. 重点分析“上”的这个角,他的水平距离和宽度相等,垂直距离和高度相等,因此均为100%;
  3. 结果如下
    1. .quadrant {
    2. width: 200px;
    3. height: 100px;
    4. border-radius: 100% 0 0 0 / 100% 0 0 0;
    5. }

带圆角的矩形

image.pngimage.png
观察(上右下左四个角):
image.png

  1. 由于四个角都相同,说明四个角水平和垂直方向的值都相同;
  2. 由于水平方向出现了直线段,说明水平方向的两个角的水平距离相加<宽度,所以水平方向的值<50%即可;
  3. 垂直方向的距离的距离为高度的一半,暂定为50%;
  4. 结果如下

    1. .rounded-rectangle {
    2. width: 200px;
    3. height: 100px;
    4. border-radius: 40% / 50%;
    5. }
  5. 垂直方向设置为50%,可以得到左图的效果,如果需要矩形的圆角不要太“圆润”,则可以减小水平方向的值或增大垂直方向的值;

  6. 结果如下 ```css .rounded-rectangle-2 { width: 200px; height: 100px; border-radius: 20% / 50%; }

.rounded-rectangle-3 { width: 200px; height: 100px; border-radius: 40% / 70%; } ```

研究

待更新

参考文章

  1. css草案 - border-radius - 链接
  2. CSS秘密花园之灵活的椭圆 - 链接
  3. 不太推荐,可以随便一看 - 链接