<div class="middle">中间内容</div> <div class="left">左侧区域</div> <div class="right">右侧区……">

圣杯与双飞翼布局

圣杯布局

<div class="container">
<div class="middle">中间内容</div>
<div class="left">左侧区域</div>
<div class="right">右侧区域</div>
</div>

注意左盒子和右盒子都是在中间盒子的下方

  • 我们先给container设置一个padding:0 200px,将左右两边各腾出200px宽度。
  • 接下来我们只需要将left,right,两个盒子放在两个区域就行啦。
  • 最后分别给left,right设置margin属性调整位置
#content{
overflow: hidden;
padding: 0 200px;
}
#left{
margin-left:-100% ;
} 
#right{
margin-left: -200px;
图片.png

可以看到left,right和middle就来到了同一行,给left和right分别一个relative定位将他们调整到两端即可。

#left{ margin-left:-100% ; position: relative; left:-200px; } #right{ margin-left: -200px; position: relative; left:200px; }

图片.png

双飞翼布局

与圣杯区别:双飞翼布局不设置内padding,通过在middle下添加了一个middle-inner盒子并设置magin来将middle的内容放在这个盒子里面(这有什么用呢?不着急咱先往下看)

#middle{
idth:100%;
float:left;
}
#left{
float: left;
margin-left: -100%;
}
#right{
float: left;
margin-left: -200px;
}
图片.png

这时我们发现middle中的内容不见了,给float的左盒子遮住了,这是midlle-inner盒子就派上用场了,此时只需要给这个盒子设置一个margin:0 200px便可

.middle-inner{ margin: 0 200px; }

图片.png

总结

双飞翼布局其实和圣杯布局的精髓是一样的,都是通过设置负margin来实现元素的排布:

相同点:

  • 注意:html结构中盒子的顺序是中,左,右
  • 三个盒子都设置左浮动(middle盒子width:100%)
  • 左右盒子通过负margin来上升(不被挤下来),左-100%,右-自身宽度,使得与middle盒子同一直线

不同点:

  • html结构不同,双飞翼是在middle元素内部又设置了一个milddle-inner并设置它的左右margin,而非圣杯布局的padding,最终目的都是排除两边元素的覆盖。
  • 双飞翼布局可以多了一个html结构,但是可以不用设置left,right元素的相对定位。

完整代码:

圣杯

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <div class="wrap">
        <div id="header">header</div>
        <div id="content">
            <div id="middle">
                middle
            </div>
            <div id="left">left</div>         
            <div id="right">right</div>
        </div>
        <div id="footer">footer</div>
    </div>
</body>
</html>

双飞翼

*{
    margin: 0;
    padding: 0;
}
body{
    min-width: 600px;
}
#header,#footer{
    height: 50px;
    width: 100%;
    background: grey;
}
#middle,#left,#right{
    float: left;
}
#content{
    overflow: hidden;
    padding: 0 200px;
}
#left,#right{
    width: 200px;
    height: 200px;
    background: pink;
}
#middle{
    width: 100%;
    height: 200px;
    background: yellowgreen; 
}
 #left{
    margin-left:-100% ;
    position: relative;
    left:-200px;
} 
#right{
    margin-left: -200px;
    position: relative;
    left:200px; 
}

阅读剩余
THE END