CSS弹性布局

2023-11-13

弹性布局

弹性布局,也称为flex box,常用于一些自适应网站,可以让网站随浏览器大小变化而变化的网站,从而给用户更好的使用体验。

基本属性

1 . 声明弹性布局
通过display:flex;,可以让元素声明为flex容器,简称“容器”,而它的所有子元素也会自动变成flex item,简称“项目”,从而具备一些额外的属性。

 <div style="display:flex">
    <div style="width:200px;background:blue;height:200px;"></div>
    <div style="width:200px;background:red;height:200px;"></div>
    <div style="width:200px;background:yellow;height:200px;"></div>
  </div>

Alt
实际效果
Alt
可以看到,并排的三个方块随着浏览器的收缩而变小,这就是弹性布局最直观的使用。

2.设置方向
设置了弹性布局的元素,不仅可以水平排列,还可以进行竖直排列。

通过设置flex-direction属性可以设置元素排列方向,如果不设置,就默认是水平排列。

  <div style="display:flex;flex-direction:column;">
    <div style="width:200px;background:blue;height:200px;"></div>
    <div style="width:200px;background:red;height:200px;"></div>
    <div style="width:200px;background:yellow;height:200px;"></div>
  </div>

Alt
实际效果
Alt
竖直的时候是无法进行压缩的。

我们再详细聊一下这个方向的问题。
Alt
一个容器里面是存在两根轴,一根是水平的主轴(main axis)和一根垂直的交叉轴(cross axis)。而主轴开始的位置叫做main start,结束的位置叫做main end;交叉轴的开始位置叫做cross start,结束位置叫做cross end。

其实说轴就可能太专业了,实际上就是朝不同方向而已,不用想的太复杂。

通过flex-direction属性,就可以控制元素按照哪个方向进行排列,row是水平方向,column方向。

3.设置起点
我们还可以通过该属性设置元素排列的起点,选择从左到右排列,从右到左排列,从上到下或者从下到上。.

弹性布局中默认水平排列,排列方向是从左到右。

我们看看其它方向的例子。

  <div style="display:flex;flex-direction:row-reverse;">
    <div style="width:200px;background:blue;height:200px;"></div>
    <div style="width:200px;background:red;height:200px;"></div>
    <div style="width:200px;background:yellow;height:200px;"></div>
  </div>

Alt
如上所述,通过赋值为row-reverse,可以改变元素为从右到左排列,同时紧靠浏览器右侧。

  <div style="display:flex;flex-direction:column-reverse;">
    <div style="width:200px;background:blue;height:200px;"></div>
    <div style="width:200px;background:red;height:200px;"></div>
    <div style="width:200px;background:yellow;height:200px;"></div>
  </div>


Alt
我们可以看到,通过设置属性为column-reverse,可以改变元素排列顺序,但是并不会让元素整体靠在容器下部,这个与水平方向不同,需要注意一下。

4. 设置主轴元素对齐方式
如果只是简单的让元素水平排列,那也太没意思了吧,如果借助justify-content属性,我们可以实现更多的排列方式。

(1)flex-start:左对齐。当没有设置这个属性时,默认以这种方式显示。

  <div style="display:flex;justify-content:flex-start;">
    <div style="width:200px;background:blue;height:200px;"></div>
    <div style="width:200px;background:red;height:200px;"></div>
    <div style="width:200px;background:yellow;height:200px;"></div>
    <div style="width:200px;background:orange;height:200px;"></div>
  </div>

Alt
(2)flex-end:右对齐。

   <div style="display:flex;justify-content:flex-end;">
    <div style="width:200px;background:blue;height:200px;"></div>
    <div style="width:200px;background:red;height:200px;"></div>
    <div style="width:200px;background:yellow;height:200px;"></div>
    <div style="width:200px;background:orange;height:200px;"></div>
  </div>

Alt
(3)center:居中

     <div style="display:flex;justify-content:center;">
    <div style="width:200px;background:blue;height:200px;"></div>
    <div style="width:200px;background:red;height:200px;"></div>
    <div style="width:200px;background:yellow;height:200px;"></div>
    <div style="width:200px;background:orange;height:200px;"></div>
  </div>

Alt
(4)space-between:两边元素靠边,中间每个元素间隔相等。

     <div style="display:flex;justify-content:space-between;">
    <div style="width:200px;background:blue;height:200px;"></div>
    <div style="width:200px;background:red;height:200px;"></div>
    <div style="width:200px;background:yellow;height:200px;"></div>
    <div style="width:200px;background:orange;height:200px;"></div>
  </div>

Alt
(5)space-around:各个元素均分排列,每个元素只有间隔都相同,但是中间的间隔,比两边元素的间隔大一倍。

  <div style="display:flex;justify-content:space-around;">
    <div style="width:200px;background:blue;height:200px;"></div>
    <div style="width:200px;background:red;height:200px;"></div>
    <div style="width:200px;background:yellow;height:200px;"></div>
    <div style="width:200px;background:orange;height:200px;"></div>
  </div>

Alt
5. 设置垂直方向对齐方式
如果各个元素按照特定需求进行垂直方向的对齐?

这就需要依靠align-items属性。
(1)flex-start:让所有元素靠上。这是默认情况,没有设置对应属性则会默认采取这种措施。

  <div style="display:flex;align-items:flex-start;">
    <div style="width:200px;background:blue;height:500px;"></div>
    <div style="width:200px;background:red;height:300px;"></div>
    <div style="width:200px;background:yellow;height:400px;"></div>
    <div style="width:200px;background:orange;height:300px;"></div>
  </div>

Alt
(2)flex-end:让所有元素靠下。

注意了,这里要分两种情况进行探讨,一种是父元素固定大小的,一种是父元素不固定大小的。

父元素固定大小的时候,所有元素紧贴父元素的下边框进行排列。

   <div style="width:600px;height:800px;border:5px solid black;display:flex;align-items:flex-end;">
    <div style="width:200px;background:blue;height:500px;"></div>
    <div style="width:200px;background:red;height:300px;"></div>
    <div style="width:200px;background:yellow;height:400px;"></div>
    <div style="width:200px;background:orange;height:300px;"></div>
  </div>

Alt
父元素没有固定大小,则以长度最长的元素的下边框为底,所有元素水平排列。如下所示,

      <div style="display:flex;align-items:flex-end;">
    <div style="width:200px;background:blue;height:500px;"></div>
    <div style="width:200px;background:red;height:300px;"></div>
    <div style="width:200px;background:yellow;height:400px;"></div>
    <div style="width:200px;background:orange;height:300px;"></div>
  </div>

Alt
(3)center:让各个元素的中间位置处于同一水平线。

这里也分两种情况,一种是父元素固定大小,另一种是父元素不固定大小。

父元素固定大小,则会让所有元素的中间位置处于父元素的中线上。如下所示,

     <div style="width:600px;height:800px;border:5px solid black;display:flex;align-items:center;">
    <div style="width:200px;background:blue;height:500px;"></div>
    <div style="width:200px;background:red;height:300px;"></div>
    <div style="width:200px;background:yellow;height:400px;"></div>
    <div style="width:200px;background:orange;height:300px;"></div>
  </div>

Alt
另一种是父元素大小不固定的,则以最大的元素中心为轴,让所有元素中心点处于同一水平线。如下图所示,

    <div style="display:flex;align-items:center;">
    <div style="width:200px;background:blue;height:300px;"></div>
    <div style="width:200px;background:red;height:500px;"></div>
    <div style="width:200px;background:yellow;height:200px;"></div>
    <div style="width:200px;background:orange;height:200px;"></div>
  </div>

Alt
我们可以看到,每个元素的中间点都在同一水平线上,同时所有元素并没有在屏幕中间。
6. 设置自动换行
根据前面的示例,当水平方向放不下所有元素的时候,元素的会被压缩。

那有没有方法可以不压缩,而是自动换行呢?

现在我们可以借助flex-wrap属性实现这个需求。

      <div style="display:flex;flex-wrap:wrap;">
    <div style="width:200px;background:blue;height:200px;"></div>
    <div style="width:200px;background:red;height:200px;"></div>
    <div style="width:200px;background:yellow;height:200px;"></div>
    <div style="width:200px;background:orange;height:200px;"></div>
  </div>

Alt
如上所示,当位置不足以容纳所有元素的时候,就会把元素放置到下一行。

flex-wrap的取值还有nowrap,wrap,wrap-reverse。
(1)nowrap:默认值,也就是不换行。
(2)wrap:自动换行,排在后面的元素移到下一行。也就是上面那个示例。
(3)wrap-reverse:自动换行,排在后面的元素移到上一行。示例如下,

   <div style="display:flex;flex-wrap:wrap-reverse;">
    <div style="width:200px;background:blue;height:200px;"></div>
    <div style="width:200px;background:red;height:200px;"></div>
    <div style="width:200px;background:yellow;height:200px;"></div>
    <div style="width:200px;background:orange;height:200px;"></div>
  </div>

Alt
我们可以看到,橙色作为最后一个元素,会自动移到上一行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CSS弹性布局 的相关文章

  • 摩卡 - Chai Karma“套件未定义”

    我对 jscript tdd 很陌生 遇到了问题 希望有人能告诉我我在做什么 在浏览器中运行测试 通过 HTML 文件 一切正常 通过节点和业力运行它们我得到以下异常 我想在 node js 主机的 karma 中使用 Mocha 和 Ch
  • 图像无法在带有 DOM 的 IE 中加载:控制台中的 7009 错误(无法解码)

    当在 IE 中的单个页面上加载许多图像时 在 IE11 中重现 其中一些图像开始加载失败 并在控制台中出现类似以下警告的内容 DOM7009 无法解码 URL 处的图像 某些唯一的 url 当我查看网络流量时 似乎确实从服务器收到了每个图像
  • 带有淘汰赛js的隐形recaptcha

    我正在完成隐形验证码 但我在实现它时遇到问题 谷歌开发人员页面中的代码显示它应该是这样的
  • 可以在初始 DOM 解析期间/之前修改 DOM 吗?

    是否可以在初始 DOM 解析期间或之前修改 DOM 或者我是否必须等到 DOM 被解析和构建之后才能与其交互 更具体地说 是否有可能阻止 DOM 中的脚本元素使用用户脚本 内容脚本或 Chrome 或 Firefox 中的类似脚本运行 在解
  • 有没有办法使用 Rspec/Capybara/Selenium 将 javascript console.errors 打印到终端?

    当我运行 rspec 时 是否可以让 capybara selenium 向 rspec 报告任何 javascript console errors 和其他异常 我有一大堆测试失败 但当我手动测试它时 我的应用程序正在运行 如果不知道仅在
  • 如何将函数附加到弹出窗口关闭事件(Twitter Bootstrap)

    我做了一些搜索 但我只能认为我可以将事件附加到导致其关闭的按钮 https stackoverflow com questions 13205103 attach event handler to button in twitter boo
  • 将 GMT 时间转换为当地时间

    我以这种格式从我的服务器获取 GMT 时间 Fri 18 Oct 2013 11 38 23 GMT 我的要求是使用Javascript将此时间转换为本地时间 例如 如果用户来自印度 首先我需要采用时区 5 30并将其添加到我的服务器时间并
  • 尝试将数据存储在点击器网站中

    我正在尝试存储一个名为的变量score无论何时刷新 您都会一次又一次地使用它 我不明白的是它的代码是什么 我尝试了一些方法 但似乎都不起作用 这是我的答题器网站 但是当我尝试使用 JavaScript 来存储它时 它不起作用window o
  • 网站的主体和元素固定在 980px 宽度上,不会缩小

    我试图在 Rails 应用程序顶部启动前端 仅 HTML CSS 页面 但在使用 320px 视口时遇到问题 有些元素不会按比例缩小 我不明白为什么 我已经完成了检查元素 为各种元素提供了max width 100 and or width
  • Javascript split 不是一个函数

    嘿朋友们 我正在使用 javascript sdk 通过 jQuery facebook 多朋友选择器在用户朋友墙上发布信息 但是我收到此错误friendId split 不是函数 这是我的代码 function recommendToFr
  • window.location 和 location.href 之间的区别

    我对之间的区别感到困惑window location and location href 两者似乎都以相同的方式行事 有什么不同 window location是一个对象 它保存有关当前文档位置的所有信息 主机 href 端口 协议等 lo
  • 为什么我们在打字稿中使用 HTMLInputElement ?

    我们为什么使用 document getElementById ipv as HTMLInputElement value 代替 document getElementById ipv value 功能getElementById返回具有类
  • DataTables row.add 到特定索引

    我正在替换这样的行项目 var targetRow entity row dataTable targetRow closest table dataTable DataTable dataTable row targetRow remov
  • 有没有办法在 onclick 触发时禁用 iPad/iPhone 上的闪烁/闪烁?

    所以我有一个有 onclick 事件的区域 在常规浏览器上单击时 它不会显示任何视觉变化 但在 iPad iPhone 上单击时 它会闪烁 闪烁 有什么办法可以阻止它在 iPad iPhone 上执行此操作吗 这是一个与我正在做的类似的示例
  • 在移动设备上滚动

    这个问题更多的是一个建议研究 我确实希望它对其他人有帮助 并且它不会关闭 因为我不太确定在哪里寻求有关此事的建议 在过去的 6 个月里 我一直在进行移动开发 我有机会处理各种设备上的各种情况和错误 最麻烦的是滚动问题 当涉及到在网站的多个区
  • 对于只触及我的工作表的 Google 表格脚本,收到“此应用程序未经验证”

    我正在编写一个 Google Sheets 脚本 我只想访问与 gs 文件关联的同一电子表格中的数据 似乎我应该有权在自己的电子表格中运行脚本 但是每当我运行一个函数时 我都会得到一个This app isn t verified信息 我该
  • 如何隐藏/禁用 Highcharts.js 中的图例框?

    我想问是否可以使用 HighCharts js 库隐藏图表中的所有图例框 var chart object chart renderTo render to type graph type colors graph colors title
  • 带参数的事件监听器

    我想将参数传递给 JavaScript 中的事件侦听器 我已经找到了解决方案 但我无法理解它们为什么或如何工作以及为什么其他解决方案不起作用 我有 C C 背景 但是 Javascript 函数的执行有很大不同 您能否帮助我理解以下示例如何
  • 如何在执行新操作时取消先前操作的执行?

    我有一个动作创建器 它会进行昂贵的计算 并在每次用户输入内容时调度一个动作 基本上是实时更新 但是 如果用户输入多个内容 我不希望之前昂贵的计算完全运行 理想情况下 我希望能够取消执行先前的计算并只执行当前的计算 没有内置功能可以取消Pro
  • CSS溢出文本显示在几行中,没有断字

    我有一些长文本显示在 div 中 该 div 具有固定的宽度和高度 我希望文本显示在几行上 作为 div 高度 并且句子单词不会中断 一行中的单词前缀和下一行中的继续 此外 我想在末尾添加省略号最后一句话 CSS white space n

随机推荐

  • C语言--学生管理系统--(完整代码)

    本系统分成了三个文件 main c student c student h 功能 实现对班级成员的增加 删除 修改 遍历 根据成绩排序 增加 会检查 现在班级已有的人数 班级是否已满 没有学号重复检测 删除 根据学号查询 gt 删除 会判断
  • 【Java开发环境配置】1-JDK安装教程&环境变量配置(21)

    一 JDK概念 JDK 是Java开发工具包 Java Development Kit 的缩写 它是一种用于构建在 Java 平台上发布的应用程序 applet 和组件的开发环境 其中包括了Java编译器 JVM 大量的Java工具以及Ja
  • stata豪斯曼检验报错

    xsmle gdp gt cz gdzc ersan ur model sdm wmat Wzhusj hausman nolog Warning All regressors will be spatially lagged 在使用xsm
  • 转载:switch/case语句中,每个case都要加花括号

    前言 多写代码 才能发现问题 即使现成的代码 手打一遍也有收获 这不遇到一个很无语的问题 问题及原因 解决方法见以下转载内容 原创者 ChirlChen 博客地址 https blog csdn net qqmindyourwill art
  • 网络编程之网络丢包故障如何定位?如何解决?

    引言 本期分享一个比较常见的网络问题 丢包 例如我们去ping一个网站 如果能ping通 且网站返回信息全面 则说明与网站服务器的通信是畅通的 如果ping不通 或者网站返回的信息不全等 则很可能是数据被丢包了 类似情况想必大家都不陌生 针
  • 3分钟搞懂:JavaScript 和 ECMAScript

    JavaScript 和 ECMAScript ECMAScript 是 JavaScript 语言的国际标准 JavaScript 是 ECMAScript 的一种实现 Adobe ActionScript 和 JScript 同样实现了
  • 基于Bochs安装GeekOs

    开发环境介绍 1 Ubuntu 16 04 2 boch2 6 11 下载地址 http sourceforge net projects bochs files bochs 2 6 11 3 nasm 2 08 01 下载地址 http
  • CommonJS,ES6 Module以及webpack模块打包原理

    CommonJS ES6 Module以及webpack模块打包原理 模块化历程 CommonJS 模块 导出 导入 ES6 Module 模块 导出 命名导出 默认导出 导入 导入命名导出的模块 导入默认导出的模块 CommonJS 与
  • 夯实C++基础:1.C++生命周期和编程范式、预处理、编译相关

    一直告诉自己要保持学习 但真的工作之后 反而不知道从哪里开始学起 就这么拖着光有想法没有行动 除了加班没有那么晚刷刷题之外 就从看课有人带着学开始夯实基础吧 反正学啥都比不学好 之后可以看设计模式 网络编程 STL深入学一学 也可以看书ef
  • MySQL的安装教程

    MySQL的安装教程 今天来唠一唠MySQL的事 首先是mysql的一些知识点 接下来我们先说MySQL的安装教程 1 安装程序安装 首先 去数据库的官网http www mysql com下载MySQL 一般为 msi文件 下载好之后双击
  • Matlab:从csv文件中读取某一列的数据

    第一种 M CSVREAD FILENAME 直接读取csv文件的数据 并返回给M 第二种 M CSVREAD FILENAME R C 读取csv文件中从第R 1行 第C 1列的数据开始的数据 这对带有头文件说明的csv文件 如示波器等采
  • 华为OD面经(给了口头offer祈祷流程审批能过ε=(´ο`*)))唉)

    1 上来一到算法题相对简单 2 介绍一下自己的项目 问了java的jvm相关如jvm在遇到线程挂掉时的日志操作啥的有做过吗 spring的好处原理 springboot的好处原理 微服务的锁 日志相关 垃圾回收算法 redis的原理 has
  • c#+npgsql采坑记录

    c npgsql 数据库作业采坑记录 做数据库作业时踩了些坑 做个记录 1 pgsql的主键int的模糊查询 pgsql中以int作为主键 比如student以sid作为主键 当sid为int时 模糊查询会使索引失效 而mysql没有这个问
  • Vue的大坑 input手动赋值后无法修改问题

    当获取数据之后 手动赋值给input 会出现渲染成功 能读取数据 但是无法修改情况 代码如下 根据ID查询返回订单信息 async editOrdersAddress orderId const data res await this ht
  • 力学应用计算机实例,PART 5 相图计算机计算 相图计算与 及扩散动力学模拟及其应用实例.ppt...

    PART 5 相图计算机计算 相图计算与 及扩散动力学模拟及其应用实例 ppt 亚点阵模型假设 每一亚点阵内的原子只与其他亚点阵内的原子相邻 这一点可以通过亚点阵的选取来保证 最近邻相互作用是常数 各亚点阵之间的相互作用忽略不计 过剩自由能
  • 前端开发模式的迭代

    前端开发模式的迭代 前端开发给人的印象一直是变化太快 不断出现新的框架 库 开发模式 这些开发模式有什么不同 为什么要不断迭代 本文将分享几种常见的前端开发模式 讲解前端开发模式的演变过程 传统开发模式 前端是 Web 应用的组成部分 前端
  • OpenSSL RSA加密和解密

    rsa加密的密钥格式常见的有两种 一种是PKCS 1 密钥头为 BEGIN RSA PUBLIC KEY 一种是PKCS 8 密钥头为 BEGIN PUBLIC KEY 以字符串公钥为例 对PKCS 1格式的密钥加载使用的函数是PEM re
  • vue自定义指令给指定元素添加水印

    在utils创建一个waterMark js文件 import Vue from vue Vue directive watermark update el binding gt function addWaterMarker parent
  • 基于管道的popen和pclose函数

    标准I O函数库提供了popen函数 它启动另外一个进程去执行一个shell命令行 这里我们称调用popen的进程为父进程 由popen启动的进程称为子进程 popen函数还创建一个管道用于父子进程间通信 子进程要么从管道读信息 要么向管道
  • CSS弹性布局

    弹性布局 弹性布局 也称为flex box 常用于一些自适应网站 可以让网站随浏览器大小变化而变化的网站 从而给用户更好的使用体验 基本属性 1 声明弹性布局 通过display flex 可以让元素声明为flex容器 简称 容器 而它的所