CSS实现三栏自适应布局(两边固定,中间自适应)

绝对定位的元素会脱离文档流,它们是相对于包含块(通常是最近的具有相对定位、绝对定位或固定定位属性的父元素)进行定位的。当你把一个绝对定位的元素的高度设置为100%时,它会相对于其包含块的高度来确定自己的高度。如果包含块是整个屏幕,那么这个绝对定位的元素设置为100%高度就会占满整个屏幕。

相反,float属性用于让元素浮动在其父元素内部,但是它不会使父元素的高度被撑开,因此,一个使用float的元素设置高度为100%并不会让它占满整个屏幕,因为float的元素仍然存在于父元素的文档流中,而并不会脱离文档流。

因此,通过绝对定位的元素设置高度为100%,可以让这个元素占满整个屏幕,而使用float的元素设置高度为100%则不能实现同样的效果,因为float元素并没有脱离文档流。

方法一、绝对定位(absolute + margin)

给左右两边的元素设置absolute,这样左右两边的元素脱离标准文档流的控制,中间的元素自然会上来,然后给中间的元素设置margin留出左右两边元素的位置。左右两边的元素放在前面可以不计较位置,但中间的元素必须放在最后,否则中间元素的margin设置会把左右两边元素顶到下面。

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>/* 这里样式的初始化也很重要,不然有空隙 */* {margin: 0;padding: 0;}body {/* 为了使得中间的 div 能够自适应屏幕100%的高度,要这样设置 */height: 100vh;}.left,.right {/* 绝对定位的左右 div 是直接放在 body 元素中的,而 body 的高度会自动扩展以适应内容的高度,也可以通过设置 height: 100vh 让其填满整个视口高度(但只涉及左右div的时候没有必要),因为脱离了文档流,高度被设置为 100% 时,其定位的参考对象是 body 或者视口,所有可以占满整个屏幕。*/width: 200px;height: 100%;position: absolute;}.left {background-color: green;left: 0;}.right {background-color: blue;right: 0;}.center {/* 中间的 div 还在正常文档流布局中,没有脱离文档流,它现在的父元素是body,要是body没有设置显性高度值的话,那它的高度设置为 100% 是无效的。 */height: 100%;margin: 0 200px;background-color: red;}</style>
</head><body><div class="left">left</div><div class="right">right</div><div class="center">center</div>
</body></html>

注:随着浏览器窗口缩小,会发生压缩,左右元素重叠 

方法二、自身浮动(float)

给左右元素分别设置左浮动和右浮动,之后给中间的元素设置margin,设置方法同方法一,三个div的顺序也和方法一的一样。

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>* {margin: 0;padding: 0;}body {height: 100vh;}.left,.right {width: 200px;height: 100%;}.left {background-color: green;float: left;}.right {background-color: blue;float: right;}.center {height: 100%;margin: 0 200px;background-color: red;}</style>
</head><body><div class="left">left</div><div class="right">right</div><div class="center">center</div>
</body></html>

注:随着浏览器窗口缩小,右边元素会被挤到下一行 

方法三、圣杯布局(BFC+负margin) 

使用margin负值法,使用圣杯布局首先需要将中间元素用div包住,设置float使其形成一个BFC,并且要设置宽度,整个宽度和左边元素的margin负值要相互配合,也就是margin-left = "-中间元素外层div宽度" ,右边元素的margin负值要和它自己的宽度配合,也就是margin-left = “-右边元素宽度”。什么圣杯布局,就是拿中间元素当底,左右元素调整位置打配合。

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>* {margin: 0;padding: 0;}body {/* 这里依旧发挥着重要的作用 */height: 100vh;}.wrap {width: 100%;/* 这里的100%高度影响着center的高度 */height: 100%;float: left;}.left,.right {width: 200px;height: 100%;}.left {background-color: green;float: left;margin-left: -100%;}.right {background-color: blue;float: left;margin-left: -200px;}.center {height: 100%;background-color: red;}</style>
</head><body><div class="wrap"><div class="center">center</div></div><div class="left">left</div><div class="right">right</div>
</body></html>

注:随着浏览器窗口缩小,会发生压缩,左右元素重叠,继续缩小之后右边元素会又会被挤到下一行,但是同方法二有不同。 

方法四、 flex布局

 将左中右三个元素用div包裹起来,给外层div设置display:flex,之后给中间元素设置flex:1,三个元素的顺序是固定的,中间元素要放在中间,不能兼容IE8及以下浏览器。

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>* {margin: 0;padding: 0;}body {/* 灵魂酱汁 */height: 100vh;}.wrap {width: 100%;height: 100%;display: flex;}.left,.right {width: 200px;height: 100%;}.left {background-color: green;}.right {background-color: blue;}.center {/* 灵魂酱汁 */flex: 1;height: 100%;background-color: red;}</style>
</head><body><div class="wrap"><div class="left">left</div><div class="center">center</div><div class="right">right</div></div>
</body></html>

注:随着浏览器窗口的缩小,会发生压缩,但是不会重叠和换行 

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

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

相关文章

Flutter 中 AutomaticKeepAliveClientMixin 的介绍及使用

在 Flutter 中&#xff0c;当你在一个页面中滑动列表或者进行其他一些操作时&#xff0c;如果你返回到该页面&#xff0c;可能会发现之前的状态已经丢失了。这在某些情况下可能是不可取的&#xff0c;特别是当你想要保留之前的状态&#xff0c;而不是每次都重新加载页面时。 为…

2024届数字IC秋招-华为机试-数字芯片-笔试真题和答案(一)(含2022年和2023年)

文章目录 前言1、已知a = 1b1;b = 3b001,那么{a,{2{b}}} = ( )2、在一个SOC中数据通路中,Master到Slaver 的单命令完成Latency是100Cycle,能支持的最大命令Outstanding是10,则完成10个命令访问的最小平均Latency大约是( )3、generate语句中的循环控制变量应该定义为( )类…

C#WPS导出EXCEL

1、首先安装金山WPS &#xff0c;然后在安装包中找到 etapi.dll 这个文件&#xff0c;导入到项目中&#xff0c;然后添加引用 在引用中出现EXCEL 就是已经将API导入到了程序中&#xff0c; 2、在命名空间中引用 using Excel; 3、开始编写导出程序&#xff0c;本例以datagridvi…

微信小程序压缩图片到200kb,递归设置压缩质量

一、背景 我们有个人脸识别门闸的功能&#xff0c;小程序上上传人脸照片&#xff0c;然后门闸识别人脸开门。图片大小要在在200kb&#xff0c;但是也不能压缩的太小&#xff0c;因为大小有可能识别不到或者要走很近才能识别。所以选择递归的方式实现图片的压缩。 二、代码实现…

技术解析:应对国内大流量攻击的新挑战与分布式清洗防御策略

近日&#xff0c;国内网络环境中出现的大流量攻击事件频发&#xff0c;且攻击规模呈指数级增长&#xff0c;部分攻击流量甚至超过了1.5Tbps。 这背后的主要原因是攻击者利用海外流量资源&#xff0c;通过复杂的网络技术和协议转换&#xff0c;将国际IPv4/IPv6流量巧妙伪装并转…

实战自动化创建用户,并设置密码

一、主程序 #!/bin/bash# 创建用户并设置密码的函数 create_user() {local username$1local password$2if id "$username" &>/dev/null; thenecho "用户 $username 已经存在。"elseecho "正在创建用户 $username ..."useradd $usernamee…

【PostgreSQL内核学习(二十九)—— 执行器(ExecCreateTableAs)】

执行器&#xff08;ExecCreateTableAs&#xff09; ExecCreateTableAs 函数RangeVarGetCreationNamespace 函数RangeVar 结构体IntoClause 结构体 声明&#xff1a;本文的部分内容参考了他人的文章。在编写过程中&#xff0c;我们尊重他人的知识产权和学术成果&#xff0c;力求…

python篇---图片转成视频

python篇—图片转成视频 import cv2 import os# 设置图片文件夹路径和视频输出路径 image_folder /workspace/11 video_name output_video.mp4# 获取图片文件夹中的所有图片文件名&#xff0c;并按顺序排序 images [img for img in os.listdir(image_folder) if img.endswi…

C++的引用和内联函数,auto

什么是引用 引用就是取别名 可以给一个变量取多个别名,也可以给别名取别名 别名与本名拥有同一地址,对任意别名修改,也会同时修改其他别名和本名 引用的作用 引用的作用与指针重叠度很高 图中函数的参数int& a,int& b,a是x的别名,b是y的别名 则ab的交换就是xy的交…

ActiveMQ消息中间件面试专题

1.什么是 ActiveMQ? activeMQ 是一种开源的&#xff0c;实现了 JMS1.1 规范的&#xff0c;面向消息(MOM)的中间件&#xff0c;为应用程序提供高效的、 可扩展的、稳定的和安全的企业级消息通信 2. ActiveMQ 服务器宕机怎么办&#xff1f; 这得从 ActiveMQ 的储存机制说起。…

怎么快速围绕“人、货、场”做零售数据分析?

做零售数据分析多了&#xff0c;不难发现零售数据分析的关键就是“人、货、场”&#xff0c;那么怎么又快又灵活地分析这三个关键点&#xff1f;不妨参考下奥威BI零售数据分析方案。 奥威BI零售数据分析方案是一套吸取大量项目经验&#xff0c;结合零售企业数据分析共性需求打…

【Java8新特性】四、强大的Stream api

​ 这里写自定义目录标题 一、了解Stream二、流(stream)到底是什么&#xff1f;三、Stream操作的三个步骤四、创建Stream的四种方式五、Stream 的中间操作1、筛选和切片2、map 映射3、排序 六、Stream 的终止操作1、查找和匹配2、归约3、收集 一、了解Stream Stream是Java8中…

同旺科技 USB TO SPI / I2C 专业版 极限测试 ---- 读取数据

所需设备&#xff1a; 1、USB 转 SPI I2C 适配器&#xff1b;内附链接 备注&#xff1a;带EXCEL调试的只适用于专业版&#xff1b; 软件配置&#xff1a; 设置如下&#xff0c;读取65500个字节&#xff0c;单条指令&#xff0c;速率20Mhz; 数据&#xff1a; 时钟信号&#…

Day10:学习尚上优选项目

学习计划&#xff1a;完成尚硅谷的尚上优选项目 学习进度&#xff1a;尚上优选项目 知识点&#xff1a; 五、尚上优选微信小程序端 订单支付 需求分析 页面效果功能分析对应接口 开发接口 创建service-payment模块 创建子模块service-payment创建配置文件创建启动类引入依赖…

微信扫码授权登录成功后,重定向用户回到他们最初尝试访问的URL

你的需求是在微信扫码授权登录成功后&#xff0c;重定向用户回到他们最初尝试访问的URL&#xff0c;而不是重定向到一个固定的页面。为了实现这一点&#xff0c;你需要在用户登录前&#xff0c;将他们尝试访问的页面URL保存起来&#xff0c;然后在登录成功后&#xff0c;使用这…

了解 Python 中 gc.collect() 命令

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 在 Python 中&#xff0c;gc.collect() 命令是用于手动触发垃圾回收机制&#xff0c;以回收无法访问的对象所占用的内存。Python 的垃圾回收机制主要基于引用计数&#xff0c;辅以 “标记-清除” 和 “…

echarts坐标轴、轴线、刻度、刻度标签

坐标轴 x、y轴 x 轴和 y 轴都由轴线、刻度、刻度标签、轴标题四个部分组成。部分图表中还会有网格线来帮助查看和计算数据 普通的二维数据坐标系都有x轴和y轴&#xff0c;通常情况下&#xff0c;x轴显示在图表底部&#xff0c;y轴显示在左侧&#xff0c;一般配置如下&#xf…

【数据结构】树与森林(树的存储结构、森林与二叉树的转化、树与森林的遍历)

目录 树和森林树的存储结构一、树的双亲表示法&#xff1a;二、树的孩子表示法方法一&#xff1a;定长结点的多重链表方法二&#xff1a;不定长结点的多重链表方法三&#xff1a;孩子单链表表示法 三、树的二叉链表(孩子-兄弟)存储表示法 森林与二叉树的转换树和森林的遍历先根…

QT使用单例模式创建全局引用类

单例模式介绍 单例模式是一种设计模式,用于确保类只能创建一个实例,并提供一种全局访问该实例的方式。在单例模式中,类的构造函数被私有化,这样就不能通过常规方式创建对象实例。相反,类提供一个静态方法或静态变量来获取其唯一的实例。 单例模式通常用于管理全局状态或…

设计一个健壮的漏洞检测模块需要考虑多个方面

设计一个健壮的漏洞检测模块需要考虑多个方面&#xff0c;包括漏洞数据库、扫描策略、结果解析和报告生成等。以下是一个简化的设计概述和一些模拟数据及测试示例。 漏洞检测模块设计 漏洞数据库&#xff1a; 包含一个已知的漏洞列表&#xff0c;每个漏洞都有唯一的标识符、描…