一、圣杯布局
思路:
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>
