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月前
|
前端开发 UED 容器
在 CSS 中使用 Flex 布局实现页面自适应时需要注意什么?
【10月更文挑战第22天】在使用 Flex 布局实现页面自适应时,需要对其基本原理和特性有深入的理解,同时结合具体的布局需求和场景,进行细致的调整和优化。通过合理的设置和注意事项的把握,才能实现理想的自适应效果,提升用户体验。还可以根据实际情况进行更深入的探索和实践,以不断提升 Flex 布局的应用能力。
|
2月前
|
前端开发 JavaScript 开发者
掌握 CSS 弹性布局(Flexbox):构建复杂页面布局的高效秘籍与实战案例
CSS弹性布局(Flexbox)是现代网页设计中构建复杂页面布局的高效工具。本文将深入浅出地介绍Flexbox的核心概念、使用技巧及实际应用案例,帮助读者快速掌握这一强大布局方法。
|
2月前
|
前端开发 容器
实现CSS品字布局
【10月更文挑战第27天】
|
8月前
|
Web App开发 XML 前端开发
CSS中的非布局样式+CSS布局 前端开发入门笔记(十一)
CSS中的非布局样式+CSS布局 前端开发入门笔记(十一)
87 0
|
前端开发
网站开发之DIV+CSS简单布局网站入门篇(五)
这篇文章主要介绍如何使用DIV和CSS简单布局一个网站的首页,通常将网站划分为顶部(Logo、导航条)、中部(页面主要内容、左右栏目)、底部(制作方介绍、超链接)。这是非常基础的一篇引入性文章,采用案例的方式进行介绍的,希望对你有所帮助。运行结果如下图所示:main.html主页面代码:主要通过di
3647 0
|
前端开发 容器 JavaScript
CSS Grid布局入门
相信大家都比较熟悉flex布局了,最近有空研究了波grid布局,感觉虽然兼容性还不是太高,应用不是太普遍,但是功能非常强大。未来应该是grid+flex为主流,grid是二维布局,很灵活,适合整体构架,而flex是一维布局,适合处理局部细节。
1190 0
|
前端开发 JavaScript
|
Web App开发 前端开发 容器
CSS布局快速入门
最近因为项目需要,不得不重新看看CSS/HTML之类的东西,不看不要紧,一看吓一跳 原来不知道真的是太多,以前从未认真对待过,这次总结了一下学习所得,算是对自己 有个交代,也可能让想了解CSS/HTML布局应用的朋友快速入门: 1. CSS 与HTML元素直接关联,以HTML h1元素为例。
865 0
|
Web App开发 前端开发
div+css布局入门
      你正在学习CSS布局吗?是不是还不能完全掌握纯CSS布局?通常有两种情况阻碍你的学习:第一种可能是你还没有理解CSS处理页面的原理。在你考虑你的页面整体表现效果前,你应当先考虑内容的语义和结构,然后再针对语义、结构添加CSS。
904 0