三栏布局的实现方法

1. 什么是三栏布局

  • 常见的一种页面布局方式,将页面分为左栏、中栏和右栏
  • 左右两侧的盒子宽度固定,中间的盒子会随屏幕自适应
  • 一般中间放主体内容,左右两边放辅助内容

2. 如何实现三栏布局

2.1 弹性布局

  • 最外层盒子设为弹性布局,左右两边的盒子固定宽度200px
  • 将中间的盒子flex设为1
    • 这样中间盒子的宽度就能一直得到全部宽度减去左右盒子的宽度,这个宽度会随着窗口的大小而变化
<style>*{margin: 0;padding: 0;}div{height: 200px;}.container{display: flex;}.left,.right{width: 200px;background: #66a4bd;}.middle{flex: 1;background: gray;}
</style><div class="container"><div class="left">left</div><div class="middle">middle</div><div class="right">right</div>
</div>
  • 缺点:先加载左边容器的,左右两边往往是辅助内容,这样用户体验不好
  • 为了优化这个问题,就出现了经典的 圣杯双飞翼 布局,它们的目的就是为了在HTML结构上,中间栏在最前面保证了最先渲染中间提升性能

2.2 grid布局

  • 左右两边的宽度固定,将剩余的空间给中间的主体部分
  • 要用到grid-template-columns:定义网格的列大小和数量
<style>.wrap {height: 200px;display: grid;grid-template-columns: 200px  1fr 200px;}.left {width: 200px;height: 100%;background-color: aqua;}.content {width: 100%;height: 100%;background-color: cadetblue;flex: 1;}.right {width: 200px;height: 100%;background-color: bisque;}
</style><div class="wrap"><div class="left">left</div><div class="content">content</div><div class="right">right</div>
</div>

2.3 圣杯布局

  • 先加载主体内容,增加用户体验

  • 实现原理: float + margin负值 + position: relative

  • 要保证中间栏最先加载,那就要把middle容器写在前面

    <body><div class="container"><div class="middle">middle</div><div class="left">left</div><div class="right">right</div></div>
    </body>
    
  • 给父容器添加`padding:0 200px,腾开位置

  • middle中间容器设置width:100%,此时的宽度继承了父容器的100%

  • 并给三个子容器都设置float: left,都向左浮动,去到同一行
    在这里插入图片描述

  • 页面效果:第一行位置放不下,左右两个容器被挤到了第二行,按道理来说它们应该是在第一行两块红色区域位置的

  • 给左右容器相对定位,让它们相对自己原本文档流的位置进行定位

    .left{width: 200px;background: #76d1ea;position: relative;margin-left: -100%; //向左挪动父容器宽度的100%left: -200px;  //再向左挪动自身的200宽度}
    

在这里插入图片描述

  • 此时right接替了left原本的位置,同理,这时候只需要给right设置:margin-right: -200px; ,就可以实现三栏布局了

  • 有一个问题就是:

    • 有一个最小宽度,当页面小于最小宽度时布局就会乱掉
    • 由于设置了相对定位,所以当left原来的位置和right的位置产生重叠时,由于浮动的原因一行放不下就会换行
    • 所以布局就被打乱了,使用双飞翼布局就可以避免这个问题
<style>*{margin: 0;padding: 0;}.container{height: 100px;padding: 0 200px;}.middle, .left, .right{height: 100%;float: left;}.middle{width: 100%;background: gray;}.left{width: 200px;background: #76d1ea;position: relative;margin-left: -100%; left: -200px; }.right{width: 200px;background: #76d1ea;position: relative;margin-right: -200px; }
</style><div class="container"><div class="middle">middle</div><div class="left">left</div><div class="right">right</div>
</div>

2.4 双飞翼布局

  • 先把HTML结构稍微改造一下,在middle容器里面多用了个inner容器

    <div class="container"><div class="middle"><div class="inner">middle</div></div><div class="left">left</div><div class="right">right</div>
    </div>
    
  • 已经设置了middle的width:100%,这时候我们只需要设置inner容器为padding:0 200px,我们要的效果同样是把左右两个容器摆放到对应的红框位置
    在这里插入图片描述

  • left、middle、right同样使用浮动

  • left设置margin-left:-100%(父容器的整个宽度)

  • right设置margin-left:-200px

  • 这样便实现了三栏布局的效果,连定位都不使用,且当页面过小时,布局不会乱

<style>*{margin: 0;padding: 0;}.container{height: 100px;}.middle, .left, .right{float: left;height: 100%;}.middle{width: 100%;background: gray;}.inner{height: 100%;padding: 0 200px;}.left{width: 200px;background: pink;margin-left: -100%;}.right{width: 200px;background: pink;margin-left: -200px;}
</style>
<div class="container"><div class="middle"><div class="inner">middle</div></div><div class="left">left</div><div class="right">right</div>
</div>

两个布局结构上不同:
在这里插入图片描述

  • 相同:让三列浮动,通过负外边距形成三列布局

  • 不同:在于如何处理中间主列的位置

    • 圣杯布局:利用父容器的左、右内边距 + 两个列的相对定位
    • 双飞翼布局:把主列嵌套在一个新的父级块中,并利用主列的左、右外边距进行布局调整

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

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

相关文章

爬虫入门到精通_框架篇16(Scrapy框架基本使用_名人名言的抓取

1 目标站点分析 抓取网站&#xff1a;http://quotes.toscrape.com/ 主要显示了一些名人名言&#xff0c;以及作者、标签等等信息&#xff1a; 点击next&#xff0c;page变为2&#xff1a; 2 流程框架 抓取第一页&#xff1a;请求第一页的URL并得到源代码&#xff0c;进行下…

Spring Cloud Gateway核心之Filter、自定义全局Filter、自定义局部Filter介绍

SpringCloudGateway-核心之Filter-自定义全局Filter-自定义局部Filter介绍 核心之Filter 路由过滤器允许以某种方式修改传入的 HTTP 请求或传出的 HTTP 响应。 路由过滤器的范围仅限于特定路由。 Spring Cloud Gateway 包含许多内置的 GatewayFilter Factory。 AddRequestHead…

基于鹦鹉优化算法(Parrot optimizer,PO)的无人机三维路径规划(提供MATLAB代码)

一、无人机路径规划模型介绍 无人机三维路径规划是指在三维空间中为无人机规划一条合理的飞行路径&#xff0c;使其能够安全、高效地完成任务。路径规划是无人机自主飞行的关键技术之一&#xff0c;它可以通过算法和模型来确定无人机的航迹&#xff0c;以避开障碍物、优化飞行…

《计算机网络》考研:2024/3/7 2.1.4 奈氏准则和香农定理

2024/3/7 (作者转行去干LLMs了&#xff0c;但是又想搞定考研&#xff0c;忙不过来了就全截图了呜呜呜。。。 生活真不容易。) 2.1.4 奈氏准则与香农定理

RocketMQ、Kafka、RabbitMQ 消费原理,顺序消费问题【图文理解】

B站视频地址 文章目录 一、开始二、结果1、RocketMQ 消费关系图1-1、queue和consumer的关系1-2、consumer 和线程的关系 2、Kafka 消费关系图1-1、partitions和consumer的关系1-2、consumer 和线程的关系 3、RabbitMQ 消费关系图1-1、queue和consumer的关系1-2、consumer 和线程…

基于美洲狮优化算法(Puma Optimizar Algorithm ,POA)的无人机三维路径规划(提供MATLAB代码)

一、无人机路径规划模型介绍 无人机三维路径规划是指在三维空间中为无人机规划一条合理的飞行路径&#xff0c;使其能够安全、高效地完成任务。路径规划是无人机自主飞行的关键技术之一&#xff0c;它可以通过算法和模型来确定无人机的航迹&#xff0c;以避开障碍物、优化飞行…

【牛客】VL68 同步FIFO

描述 请设计带有空满信号的同步FIFO&#xff0c;FIFO的深度和宽度可配置。双口RAM的参考代码和接口信号已给出&#xff0c;请在答案中添加并例化此部分代码。 电路的接口如下图所示。端口说明如下表。 接口电路图如下&#xff1a; 双口RAM端口说明&#xff1a; 端口名I/O描述…

k8s中replication controller组件

背景 为了保证正常运行的pod的数量满足我们的要求&#xff0c;k8s中退出了replication controller的概念&#xff0c;这个组件的主要作用就是保证有指定数量的pod运行在集群中 replication controller组件 1.我们先看一下replication controller组件的配置文件定义 kind&am…

docker容器的数据卷

1配置数据卷 docker run --namen01 -d --restartalways -p 80:80 -v /qy172/data/nginx/html:/usr/share/nginx/html nginx 2Docker应用部署 1搜索mysql镜像 docker search mysql 2拉取mysql镜像 docker pull mysql:5.6 3创建容器&#xff0c; 设置端口映射、目录映射 d…

Go微服务:基于net/rpc模块实现微服务远程调用

基于RPC协议实现微服务 基于rpc实现跨语言调用&#xff0c;不限定服务提供方使用的语言在微服务架构中&#xff0c;每个微服务都被封装成了进程&#xff0c;相互独立在这里提供了客户端和服务端演示调用示例 1 &#xff09;服务端 新建 server/msg 目录&#xff0c;后执行 $…

GEE:基于ERA5数据集(U和V风速分量)计算风速的幅值和风向

作者:CSDN @ _养乐多_ 本文将介绍使用Google Earth Engine (GEE)平台提供的API加载ERA5月度数据集,该数据集包含了从1979年至今的全球月度气象数据。然后,定义了一个数据计算函数,用于将U和V风速分量转换为风速的幅值和风向。 结果如下图所示, 文章目录 一、核心函数1…

代码随想录day36:动态规划part4,背包问题

文章目录 day36&#xff1a;动态规划part4&#xff0c;背包问题01背包416.分割等和子集 day36&#xff1a;动态规划part4&#xff0c;背包问题 01背包 https://kamacoder.com/problempage.php?pid1046 二维数组版本&#xff1a; dp[i][j]里的i和j表达的是什么了&#xff0…

基于docker 配置hadoop-hive-spark-zeppelin环境进行大数据项目的开发

转载于&#xff1a; 基于docker的spark-hadoop分布式集群之一&#xff1a; 环境搭建 - Fordestiny - 博客园 (cnblogs.com) ---------------------------------------------------------- 如有侵权请私信&#xff0c;看到私信后会立即删除... ------------------------------…

计算机设计大赛 行人重识别(person reid) - 机器视觉 深度学习 opencv python

文章目录 0 前言1 技术背景2 技术介绍3 重识别技术实现3.1 数据集3.2 Person REID3.2.1 算法原理3.2.2 算法流程图 4 实现效果5 部分代码6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习行人重识别(person reid)系统 该项目…

hive分区和分桶你熟悉吗?

两种用于优化查询性能的数据组织策略&#xff0c;数仓设计的关键概念&#xff0c;可提升Hive在读取大量数据时的性能。 1 分区&#xff08;Partitioning&#xff09; 根据表的某列的值来组织数据。每个分区对应一个特定值&#xff0c;并映射到HDFS的不同目录。 常用于经常查…

Keepalived工具的基本介绍(原理:VRRP协议)

目录 一、keepalived工作原理 1、VRRP 1.1 VRRP相关术语 1.2 VRRP相关技术 1.3 VRRP工作过程 2、keepalived介绍 2.1 Keepalived架构 3、keepalived的工作原理 3.1Keepalived高可用故障切换转移原理 4、脑裂 4.1什么是脑裂&#xff1f; 4.2造成脑裂的原因有哪些&am…

力扣--76. 最小覆盖子串

给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串&#xff0c;则返回空字符串 "" 。 注意&#xff1a; 对于 t 中重复字符&#xff0c;我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。如…

外边距折叠的原因和解决

参考文章 什么时候出现外边距塌陷 外边距塌陷&#xff0c;也叫外边距折叠&#xff0c;在普通文档流中&#xff0c;在垂直方向上的2个或多个相邻的块级元素&#xff08;父子或者兄弟&#xff09;外边距合并成一个外边距的现象&#xff0c;不过只有上下外边距才会有塌陷&#x…

podman checkpoint 性能优化

项目原因,需要使用checkpoint相关功能 团队一直比较熟悉 docker,于是开始对docker的checkpoint进行性能测试。 性能对比 docker环境 麒麟V10 SP3docker: 24criu:3.15进程: java进程, 内存约5GHDD命令 docker checkpoint create 容器ID checkpointName整个checkpoint 耗…

有什么针对新闻媒体行业的安全解决方案

对媒体行业而言&#xff0c;门户网站是最易受到攻击的地方。常见的攻击方式有网页篡改、挂马和被植入暗链等。门户网站作为新闻媒体对外的第一扇门&#xff0c;通常承载了大量的流量&#xff0c;一旦遭到攻击&#xff0c;造成的影响会更具有可怕的“传播力”。那么我们应该如何…