更新一种更简单的 css 方法:
.main { /* header: 30px; footer:100px; total:130px*/ min-height: calc(100vh - 130px); }
calc() 函数用于动态计算长度值。
- 需要注意的是,运算符前后都需要保留一个空格,例如:
calc(100% - 10px)
; - 任何长度值都可以使用calc()函数进行计算;
- calc()函数支持 "+", "-", "*", "/" 运算;
- calc()函数使用标准的数学运算优先级规则;
除了 display: fixed,方法将 footer 固定在底部,记录下用 js 获取页面 innerHeight,计算出 main 的高度。
HTML:
<body> <header>header</header> <main class="main">main</main> <footer>footer</footer> </body>
JS:
function windowHeight () { // header: 30px; footer:100px; total:130px let mainMinHeight = window.innerHeight - 130 mainMinHeight = bodyMinHeight > 0 ? bodyMinHeight : 0 document.getElementsByClassName('main')[0].style.minHeight = mainMinHeight + 'px' }
vue 中使用:
new Vue({ el, data () { return { windowHeight: 0, } }, watch: { windowHeight: function (newHeight) { // brand-header: 36px; nav-header: 60px; footer:193px; main.margin-top: 5px; total:294px let mainMinHeight = newHeight - 294 mainMinHeight = mainMinHeight > 0 ? mainMinHeight : 0 document.getElementsByClassName('main')[0].style.minHeight = mainMinHeight + 'px' }, }, mounted () { this.windowHeight = window.innerHeight this.$nextTick(() => { window.addEventListener('resize', () => { this.windowHeight = window.innerHeight }) }) }, })