三栏布局

固比固(浮动布局)

知识点。保存。忘记来看

左 内容 右 两边固定,内容自适应

和元素位置有关系

​ 当DOM元素位置为

	<aside class="left">1</aside>
    <aside class="right">3</aside>
    <div class="contain">2</div>
原理: 内容在文档流, 左边栏左浮动, 右边栏右浮动
	由于浮动元素不会覆盖在另一个BFC(块级格式上下文,也就是块级盒子出现的区域)区域上。

样式分布为:

* {
 margin: 0;
 padding: 0;
}
.left {
 float: left;
 width: 30px;
 height: 100vh;
 background-color: aqua;
}
.right {
 float: right;
 width: 30px;
 height: 100vh;
 background-color: aqua;
}
.contain {
 background-color: blue;
 height: 100vh;
}
缺点 : 最后渲染文档流
优点: 兼容性比较好,但是 浮动布局具有局限性,浮动元素脱离文档流, 要做清楚浮动,这个处理不好的话,会带来很多问题(父元素塌陷等问题)

定位布局

也涉及不到什么原理,就是 定位元素脱离文档流。 左边栏和右边栏固定宽度,中间元素用padding 隔开位置,防止绝对定位元素遮盖文档流。

dom结构

<div class="main">2</div>
<aside class="left">1</aside>
<aside class="right">3</aside>
*{
    margin: 0;
    padding: 0;
}
body {
    position: relative;
}
.left, .right {
    position: absolute;
}
.left {
    top: 0;
    left: 0;
    background: burlywood;
    height: 100vh;
    width: 200px;
}
.right {
    top: 0;
    right: 0;
    background: chartreuse;
    height: 100vh;
    width: 200px;
}
.main {
    padding: 0 200px;
    background-color: cornflowerblue;
    height: 100vh;
}

圣杯布局

实现原理:

实际上就是 中间内容宽度占盒子的100%,三个元素都浮动,下面两个元素就会在下一行排列。不占据BFC。 然后margin-left 让元素 遮盖中间内容。 然后相对定位。把中间露出来。

​ 这个需要首先渲染 中间内容元素。

<div class="main">2</div>
<aside class="left">1</aside>
<aside class="right">3</aside>

三个元素都浮动。 包裹三个元素的父元素设置padding(留白) 为一会儿露出遮盖的中间内容

​ 左边栏 margin-left: -100%

​ 右边栏 margin-left: -左边栏的宽

​ 相对定位 左边栏 left: -左边栏的宽度

​ 相对定位 右边栏 right: -左边栏的宽度

 * {
        margin: 0;
        padding: 0;
    }
    body {
        width: 400px;
        height: 400px;
        margin: auto;
        border: 5px solid red;
        padding: 100px;
    }
    .main, .left, .right {
        float: left;
    }
    .main {
        height: 100px;
        width: 100%;
        background-color: cornflowerblue;
    }
    .left {
        height: 100px;
        width: 20px;
        background: cyan;
        margin-left: -100%; 
        position: relative;
        left: -20px; 
    }
    .right {
        width: 20px;
        height: 100px;
        background: darkgoldenrod;
         margin-left: -20px;
        position: relative;
        right: -20px;
    }
最后注意清除浮动。
body:after {
        content: '';
        display: block;
        clear: both;
    }

缺点: 当main部分小于 left 的时候(宽度).布局会混乱

双飞翼布局

​ 双飞翼布局和圣杯差不多。

双飞翼也是使用浮动 margin-left 使元素排列在一行,因为遮盖了中间内容。这个使用的方式是 为内容 嵌套一层元素。 使用margin 顶开距离。
<div class="main">
    <div class="item">内容</div>
</div>
<aside class="left">左边</aside>
<aside class="right">右边</aside>
* {
    margin: 0;
    padding: 0;
}
body {
    border: 5px solid red;
    width: 500px;
    height: 500px;
    margin: auto;
}
.main, .left, .right {
    float: left;
}
.main {
    
    background-color: aqua;
    width: 100%;
}
.main .item {
    margin: 0 200px 0 200px;
}
.left {
    width: 200px;
    background-color: blanchedalmond;
    margin-left: -100%;
}
.right {
    width: 200px;
    background-color: brown;
    margin-left: -200px;
}

还是注意清除浮动。

body:after {
    content: '';
    display: block;
    clear: both;
}

优点:先渲染内容, 当main 小于 left 的时候, 不会像圣杯布局那样混乱页面。

缺点: 多了一层dom节点。

flex 的三栏布局 (固比固)

可以这么设置

<style>
    body {
        display: flex;
    }
    .left, .right {
        width: 200px;
        background-color: brown;
        /* 不允许缩小 */
        flex-shrink: 0;
    }
    .main {
        flex: 1;
        background-color: chartreuse;
    }
</style>
<body>  
      
        <aside class="left"></aside>
        <div class="main"></div>
        <aside class="right"></aside>
</body>

这样设置 先渲染的不是主要内容。

我们可以利用 order 属性,先渲染 主要内容。

<style>
    body {
        display: flex;
    }
    .left, .right {
        width: 200px;
        background-color: brown;
        /* 不允许缩小 */
        flex-shrink: 0;
    }
    .main {
        flex: 1;
        background-color: chartreuse;
        order: 1;
    }
    .left {
        order: 0;
    }
    .right {
        order: 2;
    }
</style>
<body>  
        <div class="main"></div>
        <aside class="left"></aside>
        <aside class="right"></aside>
</body>

添加一个属性。 使其优先渲染 主要内容。

缺点: IE8 及以下浏览器不兼容

小结:

浮动布局:
	 内容在文档流, 左边栏左浮动, 右边栏右浮动。由于浮动元素不会覆盖在另一个BFC(块级格式上下文,也
	 就是块级盒子出现的区域)区域上。
定位布局:
	定位元素脱离文档流。 左边栏和右边栏固定宽度,中间元素用padding 隔开位置,防止绝对定位元素遮盖文档
	流。
圣杯布局:
    中间内容宽度占盒子的100%,三个元素都浮动,下面两个元素就会在下一行排列。不占据BFC。 然后
    margin-left 让元素 遮盖中间内容。 然后相对定位。把中间露出来。
双飞翼布局:
 双飞翼布局和圣杯差不多。
 双飞翼也是使用浮动 margin-left 使元素排列在一行,因为遮盖了中间内容。这个使用的方式是   
 为内容 嵌套一层元素。 使用margin 顶开距离。
flex 的三栏布局 (固比固):
 左右固定,中间  flex:1。然后使用order,优先渲染 主要内容。 主要内容设置order: 1
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值