三列布局6种方式

三列布局

1. 浮动

父元素: 设置overflow: hidden; 形成BFC
left和right 向左向右分别浮动 并设置宽度
center: 设置margin:0 100px; 与左右元素隔开 实现自适应

.container{
            border: 3px solid black;
            overflow: hidden;
        }
        .left{
            border: 3px solid blue;
            float: left;
            width: 100px;
        }
        .right{
            border: 3px solid red;
            float: right;
            width: 100px;
        }
        .center{
            border: 3px solid green;
            background: yellow;
            margin: 0 100px;
        }
// An highlighted block
var foo = 'bar';

2. 绝对定位

父元素: position: relative; 定位参考
left和right 设置绝对定位和宽度,分别定位在左边和右边
center: 设置绝对定位,离左边和右边各100px,实现自适应

.container{
            border: 3px solid black;
            position: relative;
        }
        .left{
            border: 3px solid blue;
            position: absolute;
            left: 0;
            width: 100px;
        }
        .right{
            border: 3px solid red;
            position: absolute;
            width: 100px;
            right:0;
        }
        .center{
            border: 3px solid green;
            background: yellow;
            position: absolute;
            left:100px;
            right: 100px;
        }

3. flex 弹性盒

父元素: display: flex; 设置后父元素中的子元素会排列成一行
left和right: 设置宽度
center: 设置flex:1, 自动占据剩余的空间,实现自适应

.container{
            border: 3px solid black;
            display: flex;
        }
        .left{
            border: 3px solid blue;
            width: 100px;
        }
        .right{
            border: 3px solid red;
            width: 100px;
        }
        .center{
            border: 3px solid green;
            background: yellow;
            flex: 1;
        }

4. grid 网格

父元素: display: grid;
grid-template-columns: 100px 1fr 100px;
或者
grid-template-columns: 100px auto 100px;

.container{
            border: 3px solid black;
            display: grid;
            grid-template-columns: 100px 1fr 100px;
        }
        .left{
            border: 3px solid blue;
        }
        .right{
            border: 3px solid red;
        }
        .center{
            border: 3px solid green;
        }

圣杯布局

.container {
            overflow: hidden;
            padding: 0 100px;  //留出空间放置左右盒子
            border: 3px solid black;
        }
        .left {
            float: left;
            width: 100px;
            margin-left: -100%;     // 左盒子的左边界距离父元素的右边界为  父盒子的内容宽度  效果是直接排列在父盒子内容区的最左边
            position: relative;
            left: -100px;
            border: 3px solid red;
            background-color: greenyellow;
        }
        .right {
            float: left;
            width: 100px;
            margin-left: -100px;   // 右盒子左边界距离父盒子的右边界为-100px   距离正好等于右盒子宽度, 效果为直接排在父元素内容区最右边
            position: relative;
            left: 100px;
            background-color: darkgreen;
        }
        .center {
            float: left;
            width: 100%;
            background-color: darkorange;
        }

双飞翼布局

双飞翼布局是在圣杯布局上做了优化,解决了圣杯布局中布局发生错乱的问题。
核心思路是在圣杯布局的基础上,再在内容区添加一层新的盒子,
该盒子通过外边距将内容与两边的浮动元素分隔开,实际上中心盒子是没有"padding"属性的。

.container {
            overflow: hidden;
            border: 1px solid black;
        }
        .left {
            float: left;
            width: 100px;
            margin-left: -100%;
            background-color: greenyellow;
        }
        .center {
            float: left;
            width: 100%;
            background-color: darkorange;
        }
        .main{
            margin: 0 100px;
        }
        .right {
            float: left;
            width: 100px;
            margin-left: -100px;
            background-color: darkgreen;
        }
<div class="container">
    <div class="center"><div class="main">中间自适应<br><br>			</div></div>
    <div class="left">111<br><br><br></div>
    <div class="right">222<br><br><br><br></div>
</div>
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值