左中右 三栏式 布局

news2024/11/15 21:25:28

一、中间 自适应,左右两边 宽度固定

方法1:box容器 Flex布局,center设置为 flex:1

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style type="text/css">
        #box {
            width: 100%;
            height: 100px;
            display: flex;
            margin: 10px;
        }

        #left,
        #right {
            width: 200px;
            height: 100px;
            margin: 10px;
            background-color: #999;
        }

        #center {
            flex: 1;
            height: 100px;
            margin: 10px;
            /*左右margin不会叠加*/
            background-color: #f00;
        }
    </style>
</head>

<body>
    <div id="box">
        <div id="left">left</div>
        <div id="center">center</div>
        <div id="right">right</div>
    </div>
</body>

</html>

方法2:左、右两栏 分别 float:left、float:right。center左右margin,或者激活center的BFC

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style type="text/css">
        .left,
        .right {
            width: 200px;
            height: 200px;
            background-color: #999;
        }

        .left {
            float: left;
        }

        .right {
            float: right;
        }

        .center {
            /* 方式二、 */
            /* margin: 0 200px; */

            overflow: hidden;
            /* 方式一、激活center的BFC,使之无法被 两边的浮动元素 覆盖*/

            height: 300px;
            background-color: #f00;
        }
    </style>
</head>

<body>
    <!--该布局法的好处是受外界影响小,但是不足是 三个元素的顺序,center一定要放在最后,这是            	
        和绝对定位不一样的地方,center占据文档流位置,所以一定要放在最后,左右两个元素位置没有关系。
        当浏览器窗口很小的时候,右边元素会被挤到下一行。-->
    <div class="left">left</div>
    <div class="right">right</div>
    <div class="center">center</div>
</body>

</html>

方法3:左、右两栏 分别 绝对定位,center左右margin

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style type="text/css">
        /*左右固定,中间自适应  利用绝对定位*/
        .container {
            width: 100%;
            height: 100%;
            position: relative;
        }

        .left {
            position: absolute;
            left: 0;
            top: 0;
            width: 400px;
            height: 200px;
            background-color: black;
            color: #fff;
        }

        .center {
            margin: 0 400px;
            overflow: hidden;
            height: 400px;
            background-color: yellow;
        }

        .right {
            position: absolute;
            top: 0;
            right: 0;
            width: 400px;
            height: 300px;
            background-color: red;
        }
    </style>
</head>

<body>
    <div class="container">
        <div class="left">left</div>
        <div class="center">center</div>
        <div class="right">right</div>
    </div>
</body>
</html>

 方法4:三栏都 float: left;center的宽度 进行 calc()计算

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style type="text/css">
        .container {
            overflow: hidden;
        }

        .left,
        .right {
            float: left;
            width: 100px;
            background: red;
        }

        .center {
            float: left;
            width: calc(100% - 200px);
            background: yellow;
        }
    </style>
</head>

<body>
    <div class="container">
        <div class="left">left</div>
        <div class="center">center</div>
        <div class="right">right</div>
    </div>
</body>

</html>

 方法5:双飞翼布局(重点)优先显示 main主要部分 !

分析:

1.首先container只是一个三栏布局整体的包裹,不是布局重点。main占据整行,main的子元素main-wrap才是中间的内容区域。main-wrap设置 左、右margin的目的是为left、right两栏留空

2.三栏都 float: left;

3.中间栏width:100%;左栏margin-left: -100%; 右栏 (负 自身宽度) margin-left: -190px

(解释:由于main宽100%,此时left、right两栏都被挤到第二行。设置各自的 “负margin-left值”使它们分别移动到 第一行的左右两边)

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style type="text/css">
        body {
            min-width: 550px;
        }

        .col {
            float: left;
        }

        #main {
            width: 100%;
            /* height: 200px; */
            background-color: #ccc;
        }

        #main-wrap {
            background-color: lightblue;
            margin: 0 190px;
            /*这是圣杯和双飞翼最明显的区别,在main内部使用的是margin,而圣杯是直接在container部分使用padding*/
        }

        #left,
        #right {
            width: 190px;
            height: 200px;
            background-color: #0000FF;
        }

        #left {
            margin-left: -100%;
        }

        #right {
            margin-left: -190px;
            background-color: #FF0000;
        }
    </style>
</head>

<body>
    <div id="container">
        <div id="main" class="col">
            <div id="main-wrap"> #main
                <br />ipsum dolor sit amet consectetur adipisicing elit. Rerum consequatur
                amet assumenda quasi, nulla unde laboriosam non id eum natus magni praesentium quibusdam ducimus sed!
                Fuga iusto veniam ipsam voluptatum?
            </div>
        </div>
        <div id="left" class="col">#left</div>
        <div id="right" class="col">#right</div>
    </div>
</body>

</html>

 

 


 方法6:圣杯布局(也是重点)优先显示 main主要部分 !

分析:

1.最外层wrapper设置padding-left、padding-right。目的是为left、right两栏留空。

2.三栏都 float: left;

3.main的width: 100%、 left栏margin-left: -100%、right栏margin-left: -100px(负 自身宽度)

(解释:由于main宽100%,此时left、right两栏都被挤到第二行。设置各自的 “负margin-left值”使它们分别移动到 第一行的左右两边)

4.left栏left: -100px;、right栏right: -100px;  两栏都 相对自身定位position: relative;

(解释:left、right两栏都 相对于自身, 分别 向左右两边 移动自身的宽度)

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style type="text/css">
        .wrapper {
            padding: 0 100px;
            overflow: hidden;
        }

        .col {
            float: left;
        }

        .main {
            width: 100%;
            height: 200px;
            background: yellow;
        }

        .left,
        .right {
            position: relative;
            width: 100px;
            height: 200px;
            background: red;
        }

        .left {
            margin-left: -100%;
            left: -100px;
        }

        .right {
            margin-left: -100px;
            right: -100px;
        }
    </style>
</head>

<body>
    <section class="wrapper">
        <section class="col main">main</section>
        <aside class="col left">left</aside>
        <aside class="col right">right</aside>
    </section>
</body>

</html>


总结

1. 为避免因窗口缩放,或窗口变窄而出现 布局错乱,可为三栏布局的外层包裹设置min-width。

2.双飞翼 与圣杯布局比较:

相同点:三栏都利用float,中间栏width100%,另外两栏利用“负margin-left”移动到上一行。

不同点:为left、right两栏留空的方式不同(不同的标签嵌套方式)!圣杯在最外层包裹上使用了padding,使得left、right两栏需要添加position:relative,相对自身向两边位移。

相较而言,双飞翼布局方式不需要 position,更直观一些。

详见:css三列布局--两边固定中间自适应和中间固定两边自适应_中间固定两边自适应布局_DOM曼珠沙华的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/410807.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

神经网络/深度学习(一)

感知机 多层感知机&#xff08;神经网络&#xff09; 误差逆传播&#xff08;error BackPropagation&#xff0c;简称BP&#xff09;算法 深度学习 卷积神经网络&#xff08;Convolutional Neural Networks, CNN&#xff09; 递归&#xff08;循环&#xff09;神经网络&#xf…

sonar覆盖率、代码覆盖率、分支覆盖率的计算方式

代码质量的覆盖率分为三种&#xff0c;覆盖率、代码覆盖率、分支覆盖率&#xff0c;那每一种的计算方式是怎么样的呢&#xff1f; 举例&#xff1a; 上面最有疑惑的是覆盖率&#xff0c;不知道怎么算出了来的&#xff0c;后面再说。 通过sonarqube可以分析出&#xff1a; 指标…

232:vue+openlayers选择左右两部分的地图,不重复,横向卷帘

第232个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+openlayers项目中自定义js实现横向卷帘。这个示例中从左右两个选择框中来选择不同的地图,做了不重复的处理,即同一个数组,两部分根据选择后的状态做disabled处理,避免重复选择。 直接复制下面的 vue+openlayers…

springmvc入门和两个配置类放置时的问题

springmvc 替换之前的servlet&#xff0c;用注解型标记进行操作的servlet类&#xff08;就是之前servlet类上面的Webservlet注解中参数&#xff1a;当前类的访问路径名&#xff09;&#xff0c;然后响应也用注解&#xff0c;据体如下&#xff1a; 先创建web项目 再导入需要的包…

边学边记——Java数据结构☞树和二叉树

目录 一.树 1.定义 2.一些基本概念 3.树的表示形式 二.二叉树 1.概念 2.两种特殊的二叉树 3.二叉树的性质 4.二叉树的存储 5.二叉树的遍历&#xff08;The traversal of A binary Tree&#xff09; 一.树 1.定义 树是一种非线性的数据结构&#xff0c;它是由n&#x…

1676_MIT 6.828 xv6中的CPU alarm_资料翻译整理

全部学习汇总&#xff1a; GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 我觉得看了几个MIT的课程之后让我觉得我的大学四年有点浪费时光&#xff0c;看起来MIT的课程的确是很有饱满度。 这里&#xff0c;再整理一份课程中的作业要求。 …

每天分享五款工具,让你的工作办公更顺心

快乐不是在于拥有什么,而在于我们和别人分享什么。每天分享五款工具&#xff0c;让大家工作办公更顺心就是我最大的快乐。 1.绘画——Krita Krita是一款免费的开源绘画软件&#xff0c;适合专业和业余的绘画爱好者&#xff0c;支持多种画笔和图层。你可以使用Krita来创作各种…

HTTP与TCP区别

1、TCP对应与传输层、而HTTP对应于应用层&#xff0c;所以HTTP协议是建立在TCP协议之上的&#xff1b; 2、HTTP底层是利用TCP协议传输的&#xff0c;所以支持http也就一定支持TCP&#xff1b; 3、TCP是网络传输协议&#xff0c; HTTP是超文本传输协议&#xff1b; TCP是底层协…

Java中创建线程的方式以及线程池创建的方式、推荐使用ThreadPoolExecutor以及示例

场景 Java中创建线程的方式有三种 1、通过继承Thread类来创建线程 定义一个线程类使其继承Thread类&#xff0c;并重写其中的run方法&#xff0c;run方法内部就是线程要完成的任务&#xff0c; 因此run方法也被称为执行体&#xff0c;使用start方法来启动线程。 2、通过实…

盘点手机Type-c充电接口5个实用功能

目录 1、手机通过Type-c转HDMI&#xff0c;高清输出电视 2、通过OTG Type-c扩展手机功能 3、实现手机通过网卡有线上网 4、电脑通过手机Type-C有线上网 5、手机通过Type-C收听高清音频 今天给大家聊聊手机Type-c充电接口的5个实用功能&#xff0c;希望对大家日常使用…

Java每日一练(20230410)

目录 1. 二叉树的锯齿形层序遍历 &#x1f31f;&#x1f31f; 2. 从中序与后序遍历序列构造二叉树 &#x1f31f;&#x1f31f; 3. 平衡二叉树 &#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专…

UE4 Niagara 烟花制作工程

效果图&#xff1a; 第一个做的是网上射出的粒子&#xff1a; 用了事件&#xff0c;把ID给启用&#xff0c;不然会报错 第一个发射的炮弹粒子制作完成 第二制作炮弹的拖尾&#xff1a; 很明显会用到Ribbon 让宽度从宽到窄 让位置和颜色与第一个做的粒子一致&#xff0c;所以…

【分享】集简云审批支付助手,实现OA付款单自动到招商银行支付

场景描述 支付管理是企业财务管理中的重要一环&#xff0c;直接涉及企业现金流的管理和资金的运用。 在现代商业环境下&#xff0c;企业支付管理越来越复杂&#xff0c;许多公司都存在支付流程不规范、支付环节复杂的问题&#xff0c;导致企业支付效率低下。一方面&#xff0…

CocosCreator实战篇 |CocosCreator实现《飞机大战》

&#x1f4e2;博客主页&#xff1a;肩匣与橘 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文由肩匣与橘编写&#xff0c;首发于CSDN&#x1f649; &#x1f4e2;生活依旧是美好而又温柔的&#xff0c;你也…

论文赏析——约翰·科斯塔斯:线性系统编码

© 1952 J. P. Costas © 2023 Conmajia 作者简介 约翰彼得科斯塔斯&#xff08;1923-2008&#xff09;&#xff0c;美国电气工程师&#xff0c;曾发明科斯塔斯环和科斯塔斯数组。科斯塔斯参加过第二次世界大战&#xff0c;并在战后进入麻省理工学院攻读博士学位&#…

Java反序列化漏洞及实例详解

目录 一、序列化和反序列化 序列化 用途 二、Java反序列化漏洞 数据出现 函数接口 漏洞发现 漏洞利用 三、Java序列化反序列化演示 四、靶场演示 一、序列化和反序列化 序列化 把 Java 对象转换为字节序列&#xff08;字节流&#xff09;的过程。 反序列化 把字节序…

WebRTC 系列(一、简介)

一、什么是 WebRTC WebRTC 全称是 Web RealTime Communication&#xff0c;是一个用于实时通讯的技术&#xff0c;Google 公司在 2010 年用 6829 万美元将其从 Global IP Solutions 公司收购&#xff0c;并于 2011 年开源&#xff0c;不得不说 Google 确实是一家伟大的公司&am…

uniapp 引入插件市场的echart插件,使用指南!+踩坑记录!!血泪史!!!

此文章适用于微信小程序中&#xff0c;在uniapp做的小程序中使用echarts 插件地址&#xff1a;echarts-for-wx - DCloud 插件市场 插件网页往下翻有详细的使用步骤&#xff0c;这里简短的贴上几张图片 以下是我 项目中的使用情况&#xff0c;分享给大家&#xff1a; 1.一键导…

网关和spring cloud网关技术Gateway

文章目录一、网关1.1 网关是什么1.2 API网关的作用二、Spring Cloud Gateway2.1 简介2.2 搭建步骤2.3 路由断言工厂2.3.1 什么是路由断言工厂2.3.2 Spring Cloud Gateway提供的11 种断言工厂2.4 网关过滤器2.4.1 介绍2.4.2 网关过滤器作用2.4.3 过滤器配置2.4.4 全局过滤器Glob…

【STM32学习】模数转换器——ADC

【STM32学习】模数转换器——ADC零、参考一、ADC转换耗时二、转换模式三、对某些寄存器的理解1、ADC_CR22、ADC_SQRX四、库函数注意事项零、参考 STM32固件库&#xff08;标准外设库&#xff09;入门学习 第七章 ADC数模转换&#xff08;一&#xff09; 刘凯&#xff1a;STM32…