CSS实战笔记(十一) 自适应三栏布局

简介: CSS实战笔记(十一) 自适应三栏布局
+关注继续查看

前言


自适应三栏布局是常见的布局之一,一般实现为两边定宽而中间自适应


正文


1、通过 Float 实现


<div class="wrap">
    <div class="left">
        <p>Hello World</p>
    </div>
    <div class="right">
        <p>Thank You</p>
    </div>
    <!-- center 必须写在最后 -->
    <div class="center">
        <p>Say Hello To Tomorrow</p>
        <p>Say Goodbye To Yesterday</p>
    </div>
</div>
.wrap {
    /* BFC */
    overflow: hidden;
    zoom: 1; /* compatible with IE6 */
}
.left {
    background-color: lightskyblue;
    /* float + margin*/
    float: left;
    margin-right: 20px;
}
.right {
    background-color: deepskyblue;
    /* float + margin*/
    float: right;
    margin-left: 20px;
}
.center {
    background-color: skyblue;
    /* BFC */
    overflow: hidden;
    zoom: 1; /* compatible with IE6 */
}


2、通过 Flex 实现


<div class="wrap">
    <div class="left">
        <p>Hello World</p>
    </div>
    <div class="center">
        <p>Say Hello To Tomorrow</p>
        <p>Say Goodbye To Yesterday</p>
    </div>
    <div class="right">
        <p>Thank You</p>
    </div>
</div>


.wrap {
    /* flex container */
    display: flex;
}
.left {
    background-color: lightskyblue;
    /* flex item */
    flex-grow: 0;
    /* margin */
    margin-right: 20px;
}
.center {
    background-color: skyblue;
    /* flex item */
    flex-grow: 1;
}
.right {
    background-color: deepskyblue;
    /* flex item */
    flex-grow: 0;
    /* margin */
    margin-left: 20px;
}


3、通过 Grid 实现


<div class="wrap">
    <div class="left">
        <p>Hello World</p>
    </div>
    <div class="center">
        <p>Say Hello To Tomorrow</p>
        <p>Say Goodbye To Yesterday</p>
    </div>
    <div class="right">
        <p>Thank You</p>
    </div>
</div>


.wrap {
    /* grid container */
    display: grid;
    grid-template-columns: auto 1fr auto;
    grid-column-gap: 20px;
}
.left {
    background-color: lightskyblue;
}
.center {
    background-color: skyblue;
}
.right {
    background-color: deepskyblue;
}


4、圣杯布局和双飞翼布局


圣杯布局和双飞翼布局都是典型的自适应三栏布局,而且它们要求中间栏必须放在 DOM 结构的最前面优先渲染

(1)圣杯布局

<div class="wrapper">
    <!-- center 必须写在最前 -->
    <div class="center">
        <p>Say Hello To Tomorrow</p>
        <p>Say Goodbye To Yesterday</p>
    </div>
    <div class="left">
        <p>Hello World</p>
    </div>
    <div class="right">
        <p>Thank You</p>
    </div>
</div>


* {
    margin: 0;
    padding: 0;
}
.wrapper {
    /* 4、给容器设置内边距,为左右两栏预留位置 */
    padding-left: 220px;
    padding-right: 220px; 
}
.center {
    background-color: skyblue;
    /* 1、三栏同时设置左浮动,此时它们处于同一行 */
    float: left;
    /* 2、中间栏设置宽度自适应,此时左右两栏被挤到下一行 */
    width: 100%;
}
.left {
    width: 200px;
    background-color: lightskyblue;
    /* 1、三栏同时设置左浮动,此时它们处于同一行 */
    float: left;
    /* 3、左右两栏设置负外边距,使它们回到同一行 */
    margin-left: -100%;
    /* 5、左右两栏设置相对定位,使其移到左右两边 */
    position: relative;
    left: -220px;
}
.right {
    width: 200px;
    background-color: deepskyblue;
    /* 1、三栏同时设置左浮动,此时它们处于同一行 */
    float: left;
    /* 3、左右两栏设置负外边距,使它们回到同一行 */
    margin-left: -200px;
    /* 5、左右两栏设置相对定位,使其移到左右两边 */
    position: relative;
    right: -220px;
}


(2)双飞翼布局

<div class="wrapper">
    <!-- center 必须写在最前 -->
    <!-- center 多包一层 wrapper-->
    <div class="center-wrapper">
        <div class="center">
            <p>Say Hello To Tomorrow</p>
            <p>Say Goodbye To Yesterday</p>
        </div>
    </div>
    <div class="left">
        <p>Hello World</p>
    </div>
    <div class="right">
        <p>Thank You</p>
    </div>
</div>


* {
    margin: 0;
    padding: 0;
}
.center {
    background-color: skyblue;
    /* 4、给中间栏本身设置外边距,为左右两栏预留位置 */
    margin-left: 220px;
    margin-right: 220px;
}
.center-wrapper {
    /* 1、三栏同时设置左浮动,此时它们处于同一行 */
    float: left;
    /* 2、中间栏设置宽度自适应,此时左右两栏被挤到下一行 */
    width: 100%;
}
.left {
    width: 200px;
    background-color: lightskyblue;
    /* 1、三栏同时设置左浮动,此时它们处于同一行 */
    float: left;
    /* 3、左右两栏设置负外边距,使它们回到同一行 */
    margin-left: -100%;
}
.right {
    width: 200px;
    background-color: deepskyblue;
    /* 1、三栏同时设置左浮动,此时它们处于同一行 */
    float: left;
    /* 3、左右两栏设置负外边距,使它们回到同一行 */
    margin-left: -200px;
}

目录
相关文章
|
1天前
|
前端开发 容器
css极速入门 —— grid布局
css极速入门 —— grid布局
20 1
|
8天前
|
容器
|
8天前
|
前端开发 容器
今天来谈谈CSS有哪些布局
今天来谈谈CSS有哪些布局
|
8天前
|
开发者 容器
|
18天前
|
前端开发 容器
前端CSS居中布局
前端CSS居中布局
50 0
|
1月前
|
前端开发
CSS布局讲解-float浮动布局使用
CSS布局讲解-float浮动布局使用
|
1月前
|
容器
粉丝提问篇之css3的多列布局与p标签结合出现的样式
粉丝提问篇之css3的多列布局与p标签结合出现的样式
15 0
|
1月前
|
Web App开发 设计模式 前端开发
DIV+CSS布局总结
DIV+CSS布局总结
|
1月前
|
前端开发 容器
css的布局方式有哪些,有什么优缺点
css的布局方式有哪些,有什么优缺点
14 0
|
1月前
|
前端开发 UED 容器
css中的布局方式与各自优缺点
css中的布局方式与各自优缺点
14 0
相关产品
云迁移中心
推荐文章
更多