Page 84 - css揭秘
P. 84

解决方案

                        说到 border-radius,有一个鲜为人知的真相:它可以单独指定水平
                    和垂直半径,只要用一个斜杠(/)分隔这两个值即可。这个特性允许我
                    们在拐角处创建椭圆圆角(参见图 3-3)。因此,如果我们有一个尺寸为
                    200px×150px 的元素,就可以把它圆角的两个半径值分别指定为元素宽高的
                    一半,从而得到一个精确的椭圆:

                        border-radius: 100px / 75px;                                     图 3-3
                                                                                         一个容器设置了不相等的水平和
                        我们可以在图 3-4 中看到结果。                                                垂直 border-radius;拐角处的
                                                                                         弧线现在呈现出椭圆的形状,这
                        但是,这段代码存在一个很大的缺陷:只要元素的尺寸发生变化,
                                                                                         个椭圆的水平和垂直半径就是我
                    border-radius 的值就得跟着改。我们在图 3-5 中可以看到,当元素的尺寸                          们为 border-radius 指定的值,
                    变为 200px×300px 时,如果 border-radius 没有跟着改变,会发生什么后                      在图中用虚线标示
                    果。因此,如果我们的元素尺寸会随着它的内容变化而变化,这就是一个问
                    题了。

                        难道我们真的走投无路了吗?其实,border-radius 这个属性还有另外
                    一个鲜为人知的真相,它不仅可以接受长度值,还可以接受百分比值。这个
                    百分比值会基于元素的尺寸进行解析,即宽度用于水平半径的解析,而高度
                    用于垂直半径的解析。这意味着相同的百分比可能会计算出不同的水平和垂
                    直半径。因此,如果要创建一个自适应的椭圆,我们可以把这两个半径值都
                    设置为 50%:
                                                                                         图 3-4
                                                                                         通过非对称的 border-radius 曲
                        border-radius: 50% / 50%;
                                                                                         线来创建一个椭圆
                        由于斜杠前后的两个值现在是一致的(即使它们最终可能会被计算为不
                    同的值),我们可以把这行代码进一步简化为:


                        border-radius: 50%;

                        最终,只需要这一行代码,我们就可以得到一个自适应的椭圆了。

                     试一试 play.csssecrets.io/ellipse




                     小 花 絮      为什么叫border-radius?

                    可能有人会奇怪,border-radius 到底由何得名。这个属性并不需要边框来参与工作,似乎把它叫作
                    corner-radius 更贴切一些。这个名字乍听起来确实让人摸不着头脑,其实原因在于 border-radius 是
                    对元素的 border box 进行切圆角处理的。当元素没有边框时,可能还看不出差异;当它有边框时,则
                    以边框外侧的拐角作为切圆角的基准。边框内侧的圆角会稍小一些(严格来说内角半径将是 max(0,
                    border-radius-border-width))。



                                                                                            9 自适应的椭圆           53







          ඀ࠡ  JOEC
   79   80   81   82   83   84   85   86   87   88   89