CSS-圣杯布局

圣杯布局本质上是利用了浮动+padding+relative定位+margin负值。要实现圣杯布局,要理解以下几个步骤。

步骤一:

定义一个父容器div,其中包含了圣杯布局中的中间栏的div,将父div设置padding,padding-left设置为左栏的宽度,padding-right设置右边栏的宽度。则父元素剩下的可供子元素使用的宽度为父元素总宽度 - padding-left - padding-right。此时中间栏占据的100%,指的是父栏可用宽度的 100%,是去除padding-left和padding-right后的宽度的100%。其效果如下
在这里插入图片描述
代码如下




  
  
  圣杯布局
  


  

middle

HHHHHHHHHHHHHHHHHHHHHH hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh HHHHHHHHHHHHHHHHHHHHHH hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh

步骤二

现在加入左边栏和右边栏CSS-圣杯布局_第1张图片
此时由于父容器container已经被middle用完了,所以左右边栏被放到下面去了,现在我们要想办法把左右边栏和中间栏放一行去
CSS-圣杯布局_第2张图片
那么我们第一个想法是利用浮动,左中右均采用了浮动
在这里插入图片描述
此时由于main占据了父元素container可用的100%的宽度,左右栏是一行了,那么只能用父容器container中不可用的左右宽度了。
代码如下:




  
  
  圣杯布局
  


  

middle

HHHHHHHHHHHHHHHHHHHHHH hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh HHHHHHHHHHHHHHHHHHHHHH hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh

left

oooooooooooooo 00000000000000000 ooooooooooooooo ooooooooooooooo 000000000000000

right

BBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBB 88888888888888888888

步骤三

将左栏利用margin-left的负值向左移动,核心代码CSS-圣杯布局_第3张图片
则此时变成这样了
在这里插入图片描述

步骤四

此时要使左边栏继续向左移动,但是左边栏已经达到了父容器.container的所有可用的最左边了,怎么办呢,只能利用relative定位,占据它不能被占据的部分。核心代码CSS-圣杯布局_第4张图片
效果如下:在这里插入图片描述

步骤五

现在左边已经搞定了,现在要把右边栏也和中间栏部署同一行,同样适用margin-left的负值,向左移动
核心代码
CSS-圣杯布局_第5张图片
效果
在这里插入图片描述
此时右边栏已经上来了,但占据了中间栏的位置,但没有办法,右边栏已经达到父容器.containe可用宽度的最右边了。那么我还想它继续向右,占据它不能占据的空间,那么怎么办呢。

步骤六

右边栏依旧是使用relative去占据它不能占据的空间
核心代码
CSS-圣杯布局_第6张图片
效果如下
在这里插入图片描述

步骤七

去掉父容器.container的背景色,加上footer和header,则此时圣杯布局已经全部部署完成




  
  
  圣杯布局
  


  

header

middle

HHHHHHHHHHHHHHHHHHHHHH hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh HHHHHHHHHHHHHHHHHHHHHH hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh

left

oooooooooooooo 00000000000000000 ooooooooooooooo ooooooooooooooo 000000000000000

right

BBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBB 88888888888888888888

效果如下
在这里插入图片描述

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