Page 218 - css揭秘
P. 218

left: calc(50% - 9em);
                            width: 18em;
                            height: 6em;
                        }

                        显然,这个方法最大的局限在于它要求元素的宽高是固定的。在通常情
                    况下,对那些需要居中的元素来说,其尺寸往往是由其内容来决定的。如果
                    能找到一个属性的百分比值以元素自身的宽高作为解析基准,那我们的难题
                    就迎刃而解了!遗憾的是,对于绝大多数 CSS 属性(包括 margin)来说,
                    百分比都是以其父元素的尺寸为基准进行解析的。
                        CSS 领域有一个很常见的现象,真正的解决方案往往来自于我们最
                    意想不到的地方。在这个例子中,答案来自于 CSS 变形属性。当我们在
                    translate() 变形函数中使用百分比值时,是以这个元素自身的宽度和高度
                    为基准进行换算和移动的,而这正是我们所需要的。接下来,只要换用基于
                    百分比的 CSS 变形来对元素进行偏移,就不需要在偏移量中把元素的尺寸
                    写死了。这样我们就可以彻底解除对固定尺寸的依赖:

                        main {
                            position: absolute;
                            top: 50%;
                            left: 50%;
                            transform: translate(-50%, -50%);
                        }

                        你可以在图 7-18 中看到结果:这个容器已经完美居中了,完全满足我                               图 7-18
                    们的期望。                                                                利用这个 CSS 变形技巧,我们可
                                                                                         以让宽高不固定的元素垂直居中
                        当然,没有任何技巧是十全十美的,上面这个方法也有一些需要注意的地方。

                           „ 我们有时不能选用绝对定位,因为它对整个布局的影响太过强烈。
                           „ 如果需要居中的元素已经在高度上超过了视口,那它的顶部会被视
                           口裁切掉(参见图 7-19)。有一些办法可以绕过这个问题,但 hack
                           味道过浓。
                           „ 在某些浏览器中,这个方法可能会导致元素的显示有一些模糊,因
                           为元素可能被放置在半个像素上。这个问题可以用 transform-                             图 7-19
                           style: preserve-3d 来修复,不过这个修复手段也可以认为是一个                       当需要居中的元素在高度上超过
                           hack,而且很难保证它在未来不会出问题。                                         了视口时,它的顶部会被裁掉

                     试一试 play.csssecrets.io/vertical-centering-abs


                        实践证明,想要找到最先提出这个实用技巧的人确实不容易,不过所
                    能挖掘到的最早起源似乎是 Stack Overflow(http://stackoverflow.com)的用
                    户“Charlie”(http://stackoverflow.com/users/479836/charlie), 他 在 2013 年
                    4 月 16 日回答了“如何使用 CSS3 实现垂直对齐”(http://stackoverflow.com/
                    a/16026893/90826)这个问题。                                                  致 敬




                                                                                               40 垂直居中        187







          ඀ࠡ  JOEC
   213   214   215   216   217   218   219   220   221   222   223