CSS 不需要清除浮动的圣杯布局~面试可能会问

不需要清除浮动的圣杯布局

网上很多关于圣杯和双飞翼布局的教程, 我看了下实现都是需要中间的三个元素 float 布局而且需要清除浮动. 但是真的需要三个元素都 float 吗? 不清除浮动可以吗?

先看效果
CSS 不需要清除浮动的圣杯布局~面试可能会问_第1张图片

HTML

<header>headerheader>
<main>
  <aside id="left">leftaside>
  <aside id="right">rightaside>
  <div id="main">maindiv>
main>
<footer>footerfooter>

HTML 的结构很清楚, 上中下分别是 header, mainfooter, 和常见圣杯布局的不同是, main 中间区域和两边区域的位置.

从下图中可以看出来的是, 中间的 divmain 的第一个元素变成了最后一个元素. 这样写的目的是什么? 因为我们想要 div 显示在中间, 如果 div 前面的元素为 float, 那么后面的 div 自然就会正常显示, 即水平填满父容器宽度且上边界和父元素的上边界重合.

CSS 不需要清除浮动的圣杯布局~面试可能会问_第2张图片

CSS 不需要清除浮动的圣杯布局~面试可能会问_第3张图片

但是这样问题又来了, 因为中间的 div 被两侧的遮挡住了, 别急, 马上用请 CSS 帮忙.

CSS

首先重置 元素的默认 paddingmargin0, 并设置其高度为 100vh, 即浏览器视口 viewport 的高度.

body {
  margin: 0;
  padding: 0;
  min-height: 100vh;
}

接着, 设置 headerfooter 的高度, 都固定为 70px.

header {
  height: 70px;
}
footer {
  height: 70px;
}

其次, 设置中间整个元素

的高度为父元素高度减去 headerfooter 高度. 好了, 不需要清除浮动的原因出现了, 因为父元素的高度不是由子元素撑起的, 而是手动设置的.

main {
  height: calc(100vh - 140px);
}

接下来, 设置两个

你可能感兴趣的:(css,css,前端,css3)