Page 83 - css揭秘
P. 83

9 自适应的椭圆







                                                背景知识
                                                border-radius 属性的基本用法




                                              难题

                                                  你可能注意到过,给任何正方形元素设置一个足够大的 border-
                                              radius,就可以把它变成一个圆形。所用到的 CSS 代码如下所示:

                                                  background: #fb3;
                                                  width: 200px;
                                                  height: 200px;
                                                  border-radius: 100px; /* >= 正方形边长的一半 */

                                                  你可能还注意到了,如果指定任何大于 100px 的半径,仍然可以得到一
                                              个圆形。规范特别指出了这其中的原因:
                    图 3-1
                                                   “当任意两个相邻圆角的半径之和超过 border  box 的尺寸时,用户
                    给元素设置固定宽高以及一半长              代理必须按比例减小各个边框半径所使用的值,直到它们不会相互重叠
                    度的 border-radius,可以得到
                    一个圆形                        为止。”
                                                                 ——CSS 背景与边框(第三版)(http://w3.org/TR/css3-
                                                                                        background/#corner-overlap)

                                                  不过,我们往往不愿意对一个元素指定固定的宽度和高度,因为我们希
                                              望它能根据其内容自动调整并适应,而内容的长短不可能在事先就知道。即
                                              使是在设计一个静态网站的时候(元素的内容可以预先确定),我们也可能
                                              需要在某个时刻改变其内容;或者我们为它准备了一款尺寸略有差异的回退
                                              字体,而不同字体对相同内容的渲染结果很可能是不同的。在这个案例中,
                                              我们通常期望达到这个效果:如果它的宽高相等,就显示为一个圆;如果宽
                    图 3-2                     高不等,就显示为一个椭圆。可是,我们前面的代码并不能满足这个期望。
                    在前面的圆形示例中,当高度小            当宽度大于高度时,我们得到的形状如图 3-2 所示。那我们到底能不能用
                    于宽度时发生的情况;border-
                    radius 所产生的圆形用虚线标示        border-radius 来产生一个椭圆,甚至是一个自适应的椭圆呢?









                   52   第 3 章 形状







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