Page 223 - css揭秘
P. 223

<header>                                               HTML
                                                      <h1>Site name</h1>
                                                  </header>
                                                  <main>
                                                      <p>Bacon Ipsum dolor sit amet...
                                                      <!-- 从baconipsum.com那里复制一些示意文字过来 --></p>
                                                  </main>
                                                  <footer>
                                                      <p>© 2015 No rights reserved.</p>
                                                      <p>Made with ♥ by an anonymous pastafarian.</p>
                                                  </footer>

                                                  然后我们给页面加上一些基本样式,再给页脚加上一层背景。你可以
                                              在图 7-23 中看到它的样子。现在,让我们把页面内容缩短一些,结果如图
                                              7-24 所示。此时页脚沉不到底的问题就完全暴露出来了!好吧,我们重现
                                              了这个问题,但是该如何解决呢?
                    图 7-23                        假设这个页脚的文本永远不可能折行,那我们就可以推算出它实际所占
                    这是一个简单的页面,当内容足            的高度:
                    够长时它的效果
                                                  2 行 × 行高 +3× 段落的垂直外边距 + 页脚的垂直内边距 =
                                                                    2×1.5em+3×1em+1em=7em

                                                  同样,我们可以得出页头的高度是 2.5em。接下来,借助视口相关的长
                                              度单位以及 calc() 函数,只需一行 CSS 代码就可以表达出这种尺寸关系,
                                              从而把页脚“固定”到底部:

                    图 7-24                        main {
                                                      min-height: calc(100vh - 2.5em - 7em);
                    页脚沉不到底的问题相当严重                     /* 避免内边距或边框搞乱高度的计算: */
                                                      box-sizing: border-box;
                    !                             }
                       在 calc() 中使用加减法时
                    要特别当心:记得在 + 和 - 运算            或者换个方式,我们可以把 <header> 和 <main> 元素包在一个容器里,
                    符的左右各加一个空格。这条怪            然后在算式中就只需要考虑页脚的高度了:
                    异的规则是为了向前兼容。在未
                    来的某个时候,calc() 内部可能            #wrapper {
                    会允许使用关键字,那么 CSS 解                 min-height: calc(100vh - 7em);
                    析器就需要有依据来区分关键字                }
                    中的连字符和减号运算符。
                                                  这个方法是有效的(参见图 7-25),而且它似乎比那些需要固定高度的
                                              方案还要稍好一些,主要好在它的代码极其精简。不过,如果页面布局不是
                                              这么简单的话,那这个方法就完全不实用了。它不仅要求我们确保页脚内
                                              的文本永远不会折行,而且每当我们改变页脚的尺寸时,都需要跟着调整
                                              min-height 值(也就是说,这不够 DRY);此外,除非我们愿意给页头和
                                              内容主体套一层额外的 HTML 元素,否则还要跟着页头的尺寸修改。想必
                                              在这个美好的新时代,我们还有更好的办法,对吗?
                    图 7-25
                    运用 CSS 的计算功能将页脚固定          试一试 play.csssecrets.io/sticky-footer-fixed
                    到底部



                  192   第 7 章 结构与布局







          ඀ࠡ  JOEC
   218   219   220   221   222   223   224   225   226   227   228