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


http://www.niftyadmin.cn/n/1849609.html

相关文章

计算机排错系列(二)

一. 电脑的启动 计算机的启动过程如下流程图: 打开电源初始化→快速自检→初始化显卡,显示信息检其它其它硬件,显示信息→执行操作系统 二. 故障判断流程图及详解 了解了计算机的启动过程,我们再看一下计算机的故障判断流程. 打开计算机电源 ↓(是) 显示器屏幕是否出现画面(否)…

通过http如何下载文件。

1 void OnDownload_thread( void * p) 2 { 3 CClientDC dc( static_cast < CMainFrame *> (p)); 4 dc.TextOut( 50 , 100 , " 正在下载最新版本迅雷&#xff0c;请等待 " ); 5 6 char * Url " http://down.sandai.net:8080…

linux 清空文件_Linux系统入门:Bash初识

Bash Shell介绍什么是Bash ShellBash Shell是一个命令解释器&#xff0c;它在操作系统的最外层&#xff0c;负责用户程序与内核进行交互操作的一种接口&#xff0c;讲用户输入的命令翻译给操作系统&#xff0c;并将处理后的结果输出至屏幕。当我们使用远程连接工具连接linux服务…

JavaScript学习笔记(十五) 事件模型

0、DOM 标准 在开始学习 JavaScript 事件模型前&#xff0c;我们首先来了解一下什么是 DOM&#xff08;Document Object Model&#xff09; 简单来说&#xff0c;DOM 是 W3C 定义的访问 HTML 和 XML 文档的标准 按照不同的发展阶段&#xff0c;分为不同的级别&#xff0c;分…

Android 一个程序A启动程序B

2019独角兽企业重金招聘Python工程师标准>>> 1.首先&#xff0c;要获得程序B的包名 2.Intent intentgetPackageManager.getLaunchIntentForPackage(packageName); startActivity(intent); android获取程序包名&#xff1a;getPackageManager.getInstalledPackage…

如何求地球上两点之间的最短距离_蔡司三坐标Calypso平行平面之间距离的测量方法...

求平行平面之间的距离&#xff0c;这个命题的概念是模糊不清的。例如&#xff1a;1. 求平面1的中心到平面2的垂线&#xff1f;在Calypso内可以使用垂直线或者笛卡尔距离/直角坐标距离实现。但考虑实际两平面不可能理论平行&#xff0c;平面1的各顶点到平面2的垂直距离是不同的&…

马斯诺的行为科学体系的基础

马斯诺的行为科学体系的基础之一是把人的需求分成五个方面&#xff1a;一、生存需要&#xff1b;二、安全需要&#xff1b;三、从属和爱的需要&#xff1b;四、自尊的需要&#xff1b;五、自我实现的需要。东方人与其不完全一样&#xff0c;东方人的需求可分为&#xff1a;富余…

c# 用BitArray来管理包含关系

BitArray是.net自带的引用类型&#xff0c;在名称空间Systems.Collections下面。输入BitArray可以看到它的摘要&#xff1a;“管理位值的压缩数组&#xff0c;该值表示为布尔值&#xff0c;其中 true 表示位是打开的 (1)&#xff0c;false 表示位是关闭的 (0)”。 定义一个BitA…