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

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

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. 浮动、绝对定位,原有代码不支持高度自适应

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

pytorch(6)——神经网络基本骨架nn.module的使用

1 神经网络框架 1.1 Module类的使用 NN (Neural network): 神经网络 Containers: 容器 Convolution Layers: 卷积层 Pooling layers: 池化层 Padding Layers: 填充层 Non-linear Activations (weighted sum, nonlinearity): 非线性激活 Non-linear Activations (other): 非线…

Kubernetes (k8s)理论介绍

一&#xff1a;K8s 简介 1、K8s作用 2、K8s 来历 3、为什么要用 K8S? 4、Kubernetes 功能 二&#xff1a;Kubernetes 集群架构与组件 1、Kubernetes 集群架构与组件 2、核心组件 -Master 组件 &#xff08;1&#xff09;Kube-apiserver &#xff08;2&#xff09;Kube…

python爬虫(五)_urllib2:Get请求和Post请求

本篇将介绍urllib2的Get和Post方法&#xff0c;更多内容请参考:python学习指南 urllib2默认只支持HTTP/HTTPS的GET和POST方法 urllib.urlencode() urllib和urllib2都是接受URL请求的相关参数&#xff0c;但是提供了不同的功能。两个最显著的不同如下&#xff1a; urllib仅可以…

【Apollo学习笔记】—— Cyber RT之调度

文章目录 前言相关代码整理 调度介绍Cyber RT的改进实时操作系统资源限制&优先级协程 Cyber RT调度策略任务窃取两种任务类型componen组件自定义任务 Cyber调度实践配置文件DAG文件cyber_launch文件component组件BUILD文件 问题参考 前言 本文是对Cyber RT的学习记录,文章可…

Kafka的零拷贝

传统的IO模型 如果要把磁盘中的某个文件发送到远程服务器需要经历以下几个步骤 (1) 从磁盘中读取文件的内容&#xff0c;然后拷贝到内核缓冲区 (2) CPU把内核缓冲区的数据赋值到用户空间的缓冲区 (3) 在用户程序中调用write方法&#xff0c;把用户缓冲区的数据拷贝到内核下面…

【普通人维护windows的方法,不中毒,不弹窗,不卡顿】

前言 IT人也是普通人&#xff0c;我就说说普通人维护电脑的方法。 我的电脑配置 给大家看看&#xff0c;配置一般&#xff0c;运行软件和游戏&#xff0c;可以保持基本流程 日常维护措施 我不太喜欢设定一些非主流的配置&#xff0c;下了一个360卫士,360其他的套餐可以不用下…

Python开发环境Spyder介绍

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 Spyder简介 Spyder (前身是 Pydee) 是一个强大的交互式 Python 语言开发环境&#xff0c; 提供高级的代码编辑、交互测试、调试等特性&#xff0c;支持包括 Windows、Linux 和 OS X 系统。 &#x1f447; &#x1f44…

备忘录模式——撤销功能的实现

1、简介 1.1、概述 备忘录模式提供了一种状态恢复的实现机制&#xff0c;使得用户可以方便地回到一个特定的历史步骤。当新的状态无效或者存在问题时&#xff0c;可以使用暂时存储起来的备忘录将状态复原。当前很多软件都提供了撤销&#xff08;Undo&#xff09;操作&#xf…

Google Search Central (Google搜索支持的结构化数据标记)SEO开发设置

Google会根据结构化数据了解网页上的椰蓉&#xff0c;从而优化SEO排名。搜索引擎优化 (SEO) 是提高网站网页在搜索引擎上的曝光度以吸引更多相关流量的过程。 应用场景 海外独立站新闻网站所有需要SEO排名的网站基本都试用当然众多关于SEO的方法这只是其中一点&#xff0c;合理…

如何用断言帮助检测错误

Java中的断言通过测试我们认为是正确的代码来帮助检测错误。 使用assert关键字进行断言。 其语法为&#xff1a; assert condition; 这里condition是一个布尔表达式&#xff0c;我们假定在程序执行时为真。 启用断言 默认情况下&#xff0c;断言在运行时被禁用并被忽略。…

PHP语言基础知识(超详细)

文章目录 前言第一章 PHP语言学习介绍 1.1 PHP部署安装环境1.2 PHP代码工具选择 第二章 PHP代码基本语法 2.1 PHP函数知识介绍2.2 PHP常量变量介绍 2.2.1 PHP变量知识&#xff1a;2.2.2 PHP常量知识&#xff1a; 2.3 PHP注释信息介绍2.4 PHP数据类型介绍 2.4.1 整形数据类型2.4…

Vault数据备份恢复-MySQL

前言 Vault提供了可靠的功能来保护数据库和其他关键数据。 对于MySQL数据库,Vault提供了一个易于使用的解决方案,可以自动创建和管理定期备份,并支持从备份中快速恢复数据。本文将介绍Vault后端存储MySQL的备份恢复,包括如何设置Vault、如何进行数据备份和还原、如何保护…

day49-Springboot

Springboot 1. Springboot简介 1.1 简介&#xff1a;Springboot来简化Spring应用开发的一个框架&#xff0c;约定大于配置 1.2 优点&#xff1a; 可以快速的构建独立运行的Spring项目&#xff1b; 框架内有Servlet容器&#xff0c;无需依赖外部&#xff0c;所以不需要达成w…

二十三种设计模式第二十四篇--访问者模式(完结撒花)

在访问者模式&#xff08;Visitor Pattern&#xff09;中&#xff0c;我们使用了一个访问者类&#xff0c;它改变了元素类的执行算法。 通过这种方式&#xff0c;元素的执行算法可以随着访问者改变而改变。 这种类型的设计模式属于行为型模式。根据模式&#xff0c;元素对象已接…

如何监控制造业精密空调?看这技能就够了!

在半导体制造、电子元件生产、光学设备制造等领域&#xff0c;精密空调监控是关键的保障&#xff0c;因为微小的温度或湿度变化、微生物或颗粒物污染都可能对产品质量和性能造成巨大影响。 精密空调监控系统作为一种高度智能化的解决方案&#xff0c;能够实时监测和调节生产环境…

SQL注入之sqlmap

SQL注入之sqlmap 6.1 SQL注入之sqlmap安装 sqlmap简介&#xff1a; sqlmap是一个自动化的SQL注入工具&#xff0c;其主要功能是扫描&#xff0c;发现并利用给定的URL的SQL注入漏洞&#xff0c;目前支持的数据库是MS-SQL,MYSQL,ORACLE和POSTGRESQL。SQLMAP采用四种独特的SQL注…

新手入门Jenkins自动化部署入门详细教程

1. 背景 在实际开发中&#xff0c;我们经常要一边开发一边测试&#xff0c;当然这里说的测试并不是程序员对自己代码的单元测试&#xff0c;而是同组程序员将代码提交后&#xff0c;由测试人员测试&#xff1b; 或者前后端分离后&#xff0c;经常会修改接口&#xff0c;然后重新…

【Python】Python 实现猜单词游戏——挑战你的智力和运气!

文章目录 前言学到什么?导入 random 模块定义生命次数定义神秘单词并进行随机选择定义 clue&#xff08;猜测进度&#xff09; 列表&#xff0c;用问号 ? 初始化定义心形符号的 Unicode 编码初始化 guessed_word_correctly 变量定义更新猜测进度函数 update_clue主循环&#…

使用上 Spring 的事件机制

本文主要是简单的讲述了Spring的事件机制&#xff0c;基本概念&#xff0c;讲述了事件机制的三要素事件、事件发布、事件监听器。如何实现一个事件机制&#xff0c;应用的场景&#xff0c;搭配Async注解实现异步的操作等等。希望对大家有所帮助。 Spring的事件机制的基本概念 …

邪恶版ChatGPT来了!

「邪恶版」ChatGPT 出现&#xff1a;每月 60 欧元&#xff0c;毫无道德限制&#xff0c;专为“网络罪犯”而生。 WormGPT 并不是一个人工智能聊天机器人&#xff0c;它的开发目的不是为了有趣地提供无脊椎动物的人工智能帮助&#xff0c;就像专注于猫科动物的CatGPT一样。相反&…