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;
}

目录
相关文章
|
2月前
|
前端开发 JavaScript 容器
CSS 实战录: 双栏、四等分、不等间距、自适应...
CSS 实战录: 双栏、四等分、不等间距、自适应...
95 0
|
1月前
|
前端开发 UED 容器
在 CSS 中使用 Flex 布局实现页面自适应时需要注意什么?
【10月更文挑战第22天】在使用 Flex 布局实现页面自适应时,需要对其基本原理和特性有深入的理解,同时结合具体的布局需求和场景,进行细致的调整和优化。通过合理的设置和注意事项的把握,才能实现理想的自适应效果,提升用户体验。还可以根据实际情况进行更深入的探索和实践,以不断提升 Flex 布局的应用能力。
|
1月前
|
前端开发
css页面顶部底部固定,中间自适应几种方法
【10月更文挑战第22天】css页面顶部底部固定,中间自适应几种方法
|
1月前
|
前端开发 容器
实现CSS品字布局
【10月更文挑战第27天】
|
2月前
|
前端开发 容器
使用 CSS Grid 布局实现响应式设计
【10月更文挑战第1天】使用 CSS Grid 布局实现响应式设计
59 4
|
2月前
|
前端开发 JavaScript
JavaScript动态渲染页面爬取——CSS位置偏移反爬案例分析与爬取实战
JavaScript动态渲染页面爬取——CSS位置偏移反爬案例分析与爬取实战
35 0
|
4月前
|
前端开发
2s 利用 HTML+css动画实现企业官网效果
2s 利用 HTML+css动画实现企业官网效果
HTML+CSS 实现通用的企业官网页面(记得收藏)
HTML+CSS 实现通用的企业官网页面(记得收藏)