利用Flexbox解决紧贴底部的页脚

Flexbox对于此类问题同样是完美的选择。只需寥寥几行CSS代码就可以完美达成十分灵活的布局效果,而且完全不需要复杂的计算或是添加多余的HTML元素等。首先,我们需要对<body>元素设置display: flex,因为它是这三个主要区块的父元素,当父元素获得这个属性之后,就可以对其子元素触发“伸缩盒布局模型”。我们还需要把flex-flow设置为column,否则子元素会被水平排放在一行上
epub_26211795_431.jpg
body{
    display:flex;
    flex-flow:column;
}

此时,页面看起来与没有启用Flexbox的情况似乎是一样的,因为所有元素都占据了整个视口的宽度,而它们的高度也都是由其自身的内容来决定的。也就是说,我们还没有真正发挥Flexbox的威力。

为了完全释放它的魔力,我们首先要把<body>min-height属性指定为100vh,这样它就至少会占据整个视口的高度。不过,现在整个页面的布局仍然跟图7-24无异,原因在于,虽然我们已经为整个body元素指定了最小高度,但各个子元素的高度仍然是以各自的内容为准的(按照CSS规范的说法,它们的高度仍然由内部因素来决定)。

此时我们所期望的是,页头和页脚的高度由其内部因素来决定,而内容区块的高度应该可以自动伸展并占满所有的可用空间。我们只要给<main>这个容器的flex属性指定一个大于0的值(比如1即可),就可以实现这个效果了:

body{
    display:flex;
    flex-flow:column;
    min-height:100vh;
}

main{flex:1; }

这样就可以了!我们只需要四行简单的代码,就完美实现了紧贴底部的页脚
epub_26211795_430.jpg
小提示

这个flex属性实际上是flex-grow、flex-shrink和flex-basis的简写语法。任何元素只要设置了一个大于0的flex值,就将获得可伸缩的特性;flex的值负责控制多个可伸缩元素之间的尺寸分配比例。举例来说,在我们眼前的这个例子中,如果<main>是flex: 2而<footer>是flex: 1,那么内容区块的高度将是页脚高度的两倍。如果把它们的值从2和1改为4和2,结果也是一样的,因为真正起作用的是它们的数值比例。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 当你面临这样的问题:有一个具有块级样式的页脚(比如它设置了背景或阴影),当页面内容足够长时它一切正常,当页面较短时...
    巴斯光年lip阅读 661评论 0 2
  • 44年前我们就把人类送上月球了,但现在我们仍然无法在CSS中实现垂直居中。 在CSS中对元素进行水平居中是非常简单...
    康斌阅读 15,888评论 9 28
  • html和body的高度并不一定相同,在内容少的时候,body的高度要小于html,当然这只会出现在body中的内...
    cbw100阅读 5,730评论 0 11
  • 本文主要讲述页面布局样式方面涉及的知识点,更全面的对CSS相应的技术进行归类、整理、说明,没有特别详细的技术要点说...
    Joel_zh阅读 907评论 0 1
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,796评论 1 92