Sticky footers 效果: 如果页面内容不够长的情况下,页脚块粘贴在视窗底部;如果内容足够长,页脚块会被内容向下推送。
实现这种效果我尝试了三种解决方案。
方案一: padding-bottom+负margin-top
demo:
html
1 2 3 4 5 6 7 8
| <div class="sticky-wrapper"> <div class="content-wrapper "> <div class="content"> 这里是内容。。。。。。。。。。 </div> </div> <footer></footer> </div>
|
css
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| .sticky-wrapper { height: 100vh; border: solid 1px red; } .content-wrapper { min-height: 100vh; background: pink; } .content { padding-bottom: 50px; } footer { height: 50px; margin-top: -50px; background: green; }
|
思想:
使得父元素sticky-wrapper
为屏幕的高度,子元素content-wrapper
的高度也是屏幕高度,但是其内部子元素设置padding-bottom
,这个值等于底部footer的高度。然后设置底部footer
,底部footer
的margin-top
是负的footer 高度值,这样就使得footer正好可以填充到padding-bottom
所产生的空白处。
这种方法兼容性最好,下面的两种比较方便,但是是css3才支持。
方案二: 使用 flex
demo:
html
1 2 3 4 5 6
| <div class="sticky-wrapper"> <div class="content-wrapper "> 这里是内容。。。。。。。。。。 </div> <footer></footer> </div>
|
css
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| .sticky-wrapper { display: flex; flex-flow: column; min-height: 100vh; border: solid 1px red; } .content-wrapper { flex: 1; background: pink; } footer { height: 50px; background: green; }
|
思想:
flex 布局中flex属性为1 时,元素是可以自由伸缩的。
方案三: calc()
demo:
html
1 2 3 4 5 6
| <div class="sticky-wrapper"> <div class="content-wrapper "> 这里是内容。。。。。。。。。。 </div> <footer></footer> </div>
|
css
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| .sticky-wrapper { border: solid 1px red; } .content-wrapper { <!--注意:“-”号两边必须有空格--> min-height: calc(100vh - 100px); background: pink; } footer { height: 50px; background: green; }
|
思想:
使用calc()动态计算内容高度。 对于calc() 的运算规则: