当前位置: 首页 > news >正文

【基础类】—三栏页面布局的方案和优缺点

一、假设高度已知,中间宽度自适应,三栏(列)布局的方案有哪些?

float浮动、absolute绝对定位、flex弹性盒子、table表格布局、grid网格布局

  1. 浮动 float
<style>* {margin: 0;padding: 0;}.container {width: 100%;}.float .left {width: 200px;height: 200px;background-color: red;float: left;}.float .right {width: 200px;height: 200px;background-color: blue;float: right;}.float .center {height: 200px;background-color: green;margin: 0 200px;}</style><!-- 浮动布局 --><div class="container float"><div class="left"></div><div class="right"></div><div class="center">浮动布局实现三栏布局</div></div>

实现总结:
1-1 通过左右浮动,实现左右两栏的占位
1-2 通过内容margin, 实现中间内容宽度自适应
1-3 right的元素必须放在center元素的前面,因为需要有.right元素通过右浮动

  1. 绝对定位 absolute
<style>* {margin: 0;padding: 0;}.container {width: 100%;}/* 绝对定位布局 */.absolute {position: relative;}.absolute > div {position: absolute;}.absolute .left {width: 200px;height: 200px;background-color: red;left: 0;}.absolute .center {left: 200px;right: 200px;height: 200px;background-color: green;}.absolute .right {width: 200px;height: 200px;background-color: blue;right: 0;}</style><!-- 绝对定位布局 --><div class="container absolute"><div class="left"></div><div class="center">绝对定位布局实现三栏布局</div><div class="right"></div></div>

实现总结:
2-1. 通过绝对定位 + 定位两侧 (left: 0 和 right:0), 实现两侧占位
2-2. 通过绝对定位 + 减去两侧的宽度(left:200px.right:200px),实现中间宽度自适应

  1. flex弹性布局
<style>* {margin: 0;padding: 0;}.container {width: 100%;}/* 弹性盒子 */.flexbox {display: flex;}.flexbox .left {width: 200px;height: 200px;background-color: red;}.flexbox .center {flex: 1;height: 200px;background-color: green;}.flexbox .right {width: 200px;height: 200px;background-color: blue;}</style><!-- 弹性盒子布局 --><div class="container flexbox"><div class="left"></div><div class="center">弹性盒子实现三栏布局</div><div class="right"></div></div>

实现总结:
3-1. 通过给父元素设置弹性盒子布局 display: flex,给左右两侧设置宽度,实现两侧占位
3-2. 通过给center元素设置剩余宽度: flex:1, 实现宽度自适应

  1. table 表格布局
<style>
/* table布局 */
.table {display: table;width: 100%;height: 200px;}.table > div {display: table-cell;}.table .left {width: 200px;background-color: red;}.table .center {background-color: green;}.table .right {width: 200px;background-color: blue;}
</style>
<!-- table布局 --><div class="container flexbox"><div class="left"></div><div class="center">table实现三栏布局</div><div class="right"></div></div>

实现总结:
4-1 给父元素设置为表格布局display: table,并设置高度 height: 200px;
4-2 给子元素设置为表格单元格布局display: table-cell,可以继承表格的高度,同时自动计算宽度
4-3 给左右两侧设置宽度,中间宽度会自动计算实现自适应

  1. grid布局
<style>
/* 网格布局 */.grid {/* 网格布局 */display: grid;/* 网格宽度 */width: 100%;/* 网格布局的高度 */grid-template-rows: 200px;/* 网格布局的三栏的宽度 *//* 1fr 表示剩余的空间平分 === flex:1 */grid-template-columns: 200px 1fr 200px;grid-template-columns: 200px auto 200px;}.grid .left {background-color: red;}.grid .center {background-color: green;}.grid .right {background-color: blue;}
</style>
<!-- 网格布局 --><div class="container grid"><div class="left"></div><div class="center">网格布局实现三栏布局</div><div class="right"></div></div>

实现总结:
5-1:给父元素设置网格布局和宽度,display: grid; width: 100%;
5-2:通过父元素设置子元素的高度, grid-template-rows: 200px;
5-3:通过父元素设置三栏或多栏的宽度,使用下列任意方式
grid-template-columns: 200px 1fr 200px;
grid-template-columns: 200px auto 200px;

在这里插入图片描述

二、这五种方案分别有什么优缺点?

  1. float 浮动
    缺点:浮动之后,是脱离文档流的,需要清除浮动,如果处理不好会导致页面错位
    优点:兼容性强
  2. absolute绝对定位
    缺点:因为绝对定位已经脱离文档流了,导致里面的子元素也是脱离文档流的,导致这个方案的可使用性较差
    优点:快捷
  3. flex弹性盒子
    缺点:较老的浏览器不支持,比如IE6-IE9等
    优点:完美的解决方案,没有float和绝对定位的相关的问题
  4. table表格布局
    缺点:对SEO不够友好,不利于搜索引擎收录;当三栏中任意一栏的高度超出,其他两栏的高度也会改变
    优点:兼容性强,支持IE8
  5. grid网格布局
    缺点:兼容性弱
    优点:网格布局可以做复杂的布局,同时代码量较少

三、把高度已知改为未知,需要左右两侧的高度根据中间内容撑开,哪些方案还可以适用,哪些方案不可以适用

在这里插入图片描述

  1. 弹性盒子、表格、网格布局 不改动代码情况下,支持高度自适应
  2. 浮动、绝对定位,原有代码不支持高度自适应

四、这个五种方案的兼容性如何,写实际业务代码,最优的布局方案是哪个

根据每个方案的使用场景的范围, 技术的老旧、以及兼容性强弱来排序
弹性布局 > 网格布局 > 浮动 > 表格 > 绝对定位

相关文章:

【基础类】—三栏页面布局的方案和优缺点

一、假设高度已知&#xff0c;中间宽度自适应&#xff0c;三栏&#xff08;列&#xff09;布局的方案有哪些&#xff1f; float浮动、absolute绝对定位、flex弹性盒子、table表格布局、grid网格布局 浮动 float <style>* {margin: 0;padding: 0;}.container {width: 1…...

OPENCV C++(四)形态学操作+连通域统计

形态学操作 先得到一个卷积核 Mat kernel getStructuringElement(MORPH_RECT,Size(5,5)); 第一个是形状 第二个是卷积核大小 依次为腐蚀 膨胀 开运算 闭运算 Mat erodemat,dilatemat,openmat,closemat;morphologyEx(result1, erodemat, MORPH_ERODE, kernel);morphologyEx…...

tomcat上部署jpress

一.确保有jdk&#xff0c;tomcat和mysql环境 二.新建jpress数据库&#xff0c;新建jpress用户并赋予所有权限 三.将jpress的war上传到tomcat/apache-tomcat-8.5.70/webapps&#xff0c;具体根据你的实际tomcat安装路径为准&#xff0c;上传完成后他会自己解包 四.到浏览器完…...

篇十:外观模式:简化复杂系统

篇十&#xff1a;“外观模式&#xff1a;简化复杂系统” 开始本篇文章之前先推荐一个好用的学习工具&#xff0c;AIRIght&#xff0c;借助于AI助手工具&#xff0c;学习事半功倍。欢迎访问&#xff1a;http://airight.fun/。 另外有2本不错的关于设计模式的资料&#xff0c;分…...

linux gcc __attribute__

__attribute__ 1. 函数属性1.1 __attribute__((noreturn))1.2 __attribute__((format))1.3 __attribute__((const)) 2. 变量属性2.1. __attribute__((aligned))2.2. __attribute__((packed)) 3. 类型属性 __attribute__ 是 GCC 编译器提供的一种特殊语法&#xff0c;它可以用于…...

【SpringCloud】RabbitMQ基础

1.初识MQ 1.1.同步和异步通讯 微服务间通讯有同步和异步两种方式&#xff1a; 同步通讯&#xff1a;就像打电话&#xff0c;需要实时响应。 异步通讯&#xff1a;就像发邮件&#xff0c;不需要马上回复。 两种方式各有优劣&#xff0c;打电话可以立即得到响应&#xff0c;…...

css, resize 拖拉宽度

效果如下&#xff1a; 可直接复制预览查看属性值: 关键样式属性&#xff1a; resize: horizontal; overflow-x: auto; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content…...

Python识别抖音Tiktok、巨量引擎滑块验证码识别

由于最近比较忙&#xff0c;所以本周搞了一个相对简单的验证码&#xff0c;就是抖音Tiktok的滑块验证码&#xff0c;这也是接到客户的一个需求。这种验证码通常在电脑端登录抖音、巨量引擎的的时候出现。 首先看一下最终的效果&#xff1a; 验证码识别过程 1、利用爬虫采集图…...

EvilBox One靶场笔记

EvilBox: One靶场笔记 信息收集 先fscan找主机192.168.1.102 namp扫端口 开放80,22端口 然后扫目录 └─$ gobuster dir -r -u http://192.168.1.102/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,txt,bak,html在扫secret目录&#xff0c;找…...

shell脚本中的export无效

写了一段shell脚本&#xff1a; #!/bin/bash source Tools/simulation/gazebo-classic/setup_gazebo.bash $(pwd) $(pwd)/build/px4_sitl_default export ROS_PACKAGE_PATH$ROS_PACKAGE_PATH:$(pwd) export ROS_PACKAGE_PATH$ROS_PACKAGE_PATH:$(pwd)/Tools/simulation/gazebo…...

前沿分享-鱼形机器人

可能并不太前沿了&#xff0c;是21年底的新闻了&#xff0c;但是看见了就顺便发一下吧。 大概就是&#xff0c;通过在pH响应型水凝胶中编码不同的膨胀速率而构建了一种环境适应型变形微机器人,让微型机器人直接向癌细胞输送药物从而减轻药物带来副作用。 技术原理是&#xff0c…...

摄像机终端IP地址白名单配置流程

海康摄像头配置白名单流程 1.登录海康摄像机前端 2.进入配置-系统-安全管理-IP地址过滤 3.IP地址过滤方式选择“允许” 4.点击添加按钮输入对应的IP地址或者IP网段 5.最后勾选启用IP地址过滤&#xff0c;然后保存 大华摄像头配置白名单流程 1.登录大华摄像机前端 2.进入设…...

Glibc—查看版本

方式1&#xff1a;直接查看ldd版本 ldd --versionldd (Buildroot) 2.30 Copyright (C) 2019 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICU…...

C++物理引擎Box2D的下载,编译,VS2013配置环境

文章目录 网站和下载地址编译工具:编译box2dhelloworld测试网站和下载地址 https://box2d.org/ 下载地址 https://hub.nuaa.cf/erincatto/box2d/tags 编译工具: 1.VS2013 2.cmake 下载地址 https://cmake.org/ 编译box2d 下载box2d源码2.4.0,解压。在box2d-2.4.0目录下…...

STL容器详解——map容器

一、map容器介绍 作为关联式容器的一种&#xff0c;map 容器存储的都是 pair 对象&#xff0c;也就是用 pair 类模板创建的键值对。其中&#xff0c;各个键值对的键和值可以是任意数据类型&#xff0c;包括 C 基本数据类型&#xff08;int、double 等&#xff09;、使用结构体…...

VR全景在建筑工程行业能起到哪些作用?

在建筑工程领域&#xff0c;数字化技术为行业的发展起到巨大的推动作用&#xff0c;虽然建筑施工行业主要是依赖于工人劳动力和施工设备&#xff0c;但是VR全景在该行业中方方面面都能应用&#xff0c;从设计建模到项目交付&#xff0c;帮助建筑师以及项目方更好的理解每个环节…...

P1257 平面上的最接近点对

题目 思路 详见加强加强版 代码 #include<bits/stdc.h> using namespace std; #define int long long const int maxn4e510; pair<int,int> a[maxn]; int n; double d1e16; pair<int,int> vl[maxn],vr[maxn]; void read() { cin>>n;for(int i1;i<…...

8月1日上课内容 第一章web基础与http协议

dns与域名 网络是基于tcp/ip协议进行通信和连接的 应用层--传输层---网络层----数据链路层-----物理层 ip地址&#xff0c;我们每一台主机都有一个唯一的地址标识(固定的ip地址)&#xff0c;区分用户和计算机通信。 ip地址:32位二进制数组成的&#xff0c;不方便记忆 192.168.…...

Gson 添加数据默认值问题记录

问题&#xff1a;在用Gson add(key&#xff08;string类型&#xff09;&#xff0c;value&#xff08;必须是JsonElement子类&#xff09;&#xff09;时发现&#xff0c;value 传了 "" 空字符串&#xff08;非null&#xff09;&#xff0c;默认解析后返回null&#…...

利用Arthas+APM监控进行Java性能深度定位

大家可能都用过APM监控&#xff0c;包括开源的Skywalking、商用的卓豪&#xff08;ZOHO&#xff09;ManageEngine APM应用性能监控、以及云监控产品如听云&#xff08;Server监控&#xff09;&#xff0c;这些APM监控产品大大方便了我们实时监控应用性能&#xff0c;并实现性能…...

抖音无水印视频批量下载全攻略:从痛点解决到高效管理

抖音无水印视频批量下载全攻略&#xff1a;从痛点解决到高效管理 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback suppor…...

跨平台兼容计算引擎:解锁非NVIDIA GPU的CUDA计算潜能

跨平台兼容计算引擎&#xff1a;解锁非NVIDIA GPU的CUDA计算潜能 【免费下载链接】ZLUDA CUDA on non-NVIDIA GPUs 项目地址: https://gitcode.com/GitHub_Trending/zl/ZLUDA 在高性能计算领域&#xff0c;硬件壁垒常常限制着开发者的创新空间——当你手中的Intel GPU无…...

别再让数据睡大觉了!手把手教你用泛微Ecology10的报表分析模块,10分钟搞定业务看板

唤醒沉睡数据&#xff1a;10分钟用泛微Ecology10打造动态业务看板 每天早晨&#xff0c;市场部张经理都会收到IT部门发来的Excel报表——那是前一天的销售数据汇总。等他费劲地对比完各个sheet&#xff0c;再手动合并ERP的库存信息时&#xff0c;往往已经过去半小时。更糟的是&…...

Wan2.2-I2V-A14B私有部署避坑指南:基于RTX4090D镜像的保姆级教程

Wan2.2-I2V-A14B私有部署避坑指南&#xff1a;基于RTX4090D镜像的保姆级教程 1. 开篇&#xff1a;为什么选择私有部署&#xff1f; 当你第一次接触Wan2.2-I2V-A14B这个强大的文生视频模型时&#xff0c;可能会被它的效果惊艳到。但随之而来的部署问题往往让人头疼——环境配置…...

零基础前端入门:借助快马AI生成你的第一个可交互魔鬼面具网页

最近想学前端开发&#xff0c;但面对一堆陌生的术语和复杂的配置&#xff0c;总感觉无从下手。直到发现了InsCode(快马)平台&#xff0c;用自然语言描述就能生成可运行的代码&#xff0c;简直是新手福音&#xff01;这次尝试做了一个可交互的魔鬼面具网页&#xff0c;整个过程特…...

实战指南:基于快马AI构建企业级软件安装程序,实现环境检测与静默部署

今天想和大家分享一个实战经验&#xff1a;如何用InsCode(快马)平台快速构建企业级软件安装程序。这个需求来源于我们团队最近的一个项目交付&#xff0c;客户要求安装包必须像专业商业软件那样稳定可靠。 环境检测功能实现 安装程序最基础也最重要的就是环境检测。我们通过平…...

Cubli_Mini自平衡机器人搭建指南:从原理到实践的完整路径

Cubli_Mini自平衡机器人搭建指南&#xff1a;从原理到实践的完整路径 【免费下载链接】Cubli_Mini 项目地址: https://gitcode.com/gh_mirrors/cu/Cubli_Mini 项目简介&#xff1a;探索自平衡技术的开源平台 Cubli_Mini是一款基于ESP32微控制器的自平衡立方体机器人&a…...

用I.MX6ULL和MX1508驱动28BYJ-48步进电机:从硬件接线到Linux驱动调试全记录

I.MX6ULL与MX1508驱动28BYJ-48步进电机实战指南 1. 项目概述与硬件选型 28BYJ-48步进电机因其性价比高、控制简单等特点&#xff0c;在嵌入式开发领域广受欢迎。这款四相八拍永磁减速型电机&#xff0c;配合I.MX6ULL开发板和MX1508驱动模块&#xff0c;可以构建一个完整的电机控…...

猫抓浏览器扩展:3分钟掌握网页视频嗅探下载的终极指南

猫抓浏览器扩展&#xff1a;3分钟掌握网页视频嗅探下载的终极指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否经常遇到网页上精彩的视频…...

告别重复造轮子:用快马AI一键生成web后台管理CRUD模块代码

告别重复造轮子&#xff1a;用快马AI一键生成web后台管理CRUD模块代码 最近在开发一个电商后台管理系统时&#xff0c;我发现大部分时间都花在了重复性的CRUD&#xff08;增删改查&#xff09;代码编写上。产品管理模块需要列表展示、分页查询、条件筛选、表单验证等一系列标准…...