一、圣杯布局
思路:
1、center部分宽度为100%且先渲染
2、父容器盒子设置padding
3、左侧栏利用margin-left负值进行位移,再用相对定位往左侧移动自身宽度(也可以直接用css3,calc函数calc(-100% - width))
4、右侧栏,利用margin-right负值,将盒子自身实际宽度减为0,盒子自然就往上一行位移,排在最右侧。为啥不用margin-left负值,因为父容器设置了内边距,将右侧栏直接往前位移,会挤占中间部分的宽度
<div class="container">
<!-- // 中间视图优先渲染,放在另外两栏前 -->
<div class="center colume"></div>
<div class="left colume"></div>
<div class="right colume"></div>
</div>
.container {
padding: 0 200px;
}
.colume {
float: left;
height: 100px;
}
.center {
/* 宽度变化 */
width: 100%;
background-color: palegoldenrod;
}
.left {
width: 200px;
/* 先移到父容器content左侧,再移到左边界 */
/* margin-left负值可以将左侧栏往左移动,直到父容器最左侧 */
margin-left: -100%;
/* margin-left: calc( -100% - 200px) 效果一样,不需要再用相对位移 ; */
/* 利用相对定位(根据自身定位),可以将左侧栏移到最左侧 */
position: relative;
/* 相对定位,相对自己的边框定位 */
right: 200px;
/* 和left: -200px一个效果 */
background-color: burlywood;
}
.right {
width: 200px;
/* margin-right和margin-bottom为负值时,都有一种压缩自身空间的效果, */
/* 当压缩到自身宽度时,等于不占空间,自然就往上面排列 */
/* 不能使用margin-left负值,右侧栏宽度没变,这样会挤占中间内容空间(单纯的往左侧唯一,和margin-right不一样) */
margin-right: -200px;
background-color: lightgreen;
}
二、双飞翼布局
由淘宝团队提出,比双飞翼布局更简洁
思路:
1、所有外层盒子都向左浮动
2、中间父容器盒子宽度为100%(中间父容器不设置margin,会把整个页面撑大),内部容器设置margin: 0 200px
3、左侧栏移动:margin:-100%;
4、右侧栏移动:直接设置mrgin-left:-200px;
<body>
<style>
.colume {
float: left;
height: 100px;
}
.center {
width: 100%;
background-color: palegoldenrod;
}
.left {
width: 100px;
background-color: palegreen;
margin-left: -100%;
}
.right {
width: 100px;
background-color: darkcyan;
margin-left: -100px;
}
.innerCenter {
margin: 0 100px;
}
</style>
<div class="center colume">
<div class="innerCenter">innerCenter</div>
</div>
<div class="left colume"></div>
<div class="right colume"></div>
</body>