面试官:请说说flex布局_番茄出品.md

news2024/11/27 9:45:30

面试官:请说说flex布局_番茄出品.md

start

  • 依然记得当初学习 flex 布局时,用 flex 布局:画麻将。一筒到九筒,应有尽有。
  • 但是光和面试官说,我用 flex 布局画过麻将,并没有什么用。面试官问你一个语法,直接语塞了。
  • 今天我们来复习一下, flex 布局的语法,然后结合代码,演示一下。
  • 本文作者: lazyTomato
  • 编写时间:2023-09-19

1. 前言

flex 布局(Flexible Box)又称弹性布局。

是2009年提出的新布局方式,考虑到目前2023年,IE已经退出历史舞台,所以兼容性可以兼容主流大部分浏览器了。

兼容性-flex布局-caniuse

请添加图片描述

2. 语法

flex布局的语法,主要分两类,第一是容器,第二是容器中的项。

类型语法
容器flex-direction flex-wrap flex-flow justify-content align-items align-content
order flex-grow flex-shrink flex-basis flex align-self

2.1 容器

2.1.1 flex-direction

决定主轴的方向(即项目的排列方向)。

.box {
  flex-direction: row | row-reverse | column | column-reverse;
}
// row(默认值):主轴为水平方向,起点在左端。
// row-reverse:主轴为水平方向,起点在右端。
// column:主轴为垂直方向,起点在上沿。
// column-reverse:主轴为垂直方向,起点在下沿。

2.1.2 flex-wrap

定义,如果一条轴线排不下,如何换行。

.box{
  flex-wrap: nowrap | wrap | wrap-reverse;
}
// nowrap 默认不换行
// wrap 换行,第一行在上方。
// wrap-reverse:换行,第一行在下方。

2.1.3 flex-flow

flex-flow属性是flex-direction属性和flex-wrap属性的简写形式,默认值为row nowrap

.box {
  flex-flow: <flex-direction> || <flex-wrap>;
}

2.1.4 justify-content

justify-content属性定义了项目在主轴上的对齐方式。

.box {
  justify-content: flex-start | flex-end | center | space-between | space-around;
}

// flex-start(默认值):左对齐
// flex-end:右对齐
// center: 居中
// space-between:两端对齐,项目之间的间隔都相等。
// space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。

2.1.5 align-items

align-items属性定义项目在交叉轴上如何对齐。

.box {
  align-items: flex-start | flex-end | center | baseline | stretch;
}

// flex-start:交叉轴的起点对齐。
// flex-end:交叉轴的终点对齐。
// center:交叉轴的中点对齐。
// baseline: 项目的第一行文字的基线对齐。
// stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度。

2.1.6 align-content

align-content属性定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。

.box {
  align-content: flex-start | flex-end | center | space-between | space-around | stretch;
}

// flex-start:与交叉轴的起点对齐。
// flex-end:与交叉轴的终点对齐。
// center:与交叉轴的中点对齐。
// space-between:与交叉轴两端对齐,轴线之间的间隔平均分布。
// space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。
// stretch(默认值):轴线占满整个交叉轴。

2.2 项

2.2.1 order

order属性定义项目的排列顺序。数值越小,排列越靠前,默认为0。

2.2.2 flex-grow

flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。

2.2.3 flex-shrink

flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。

.item {
  flex-shrink: <number>; /* default 1 */
}

2.2.4 flex-basis

flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。

.item {
  flex-basis: <length> | auto; /* default auto */
}

2.2.5 flex

flex属性是flex-grow, flex-shrinkflex-basis的简写,默认值为0 1 auto。后两个属性可选。

.item {
  flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
}

2.2.6 align-self

align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch

.item {
  align-self: auto | flex-start | flex-end | center | baseline | stretch;
}

3. 实战演示代码

本小节:主要对比较疑难的属性做代码演示

3.1 最常见的居中

请添加图片描述

在这里插入图片描述

display: flex;
justify-content: center;
align-items: center;

/* 上述样式可以实现居中 
+ `justify-content`属性定义了项目在主轴上的对齐方式。
+ 有时候输入 just 之后,编辑器提示会出现 `justify-items` 属性,这个属性是网格布局(grid)的居中属性,不要和 justify-content 混淆。
*/

3.2 order 属性

在这里插入图片描述

上述截图演示了一下,项的 order 属性,默认的元素 order 为 0 ,然后项会依据 order 的大小进行排序。

`order` 属性定义项目的排列顺序。数值越小,排列越靠前,默认为 0。

3.3 flex-grow 、 flex-shrink、flex-basis、flex

早期学习的过程中,没有太注意到这一块的内容。flex布局的自适应计算规则,有一些奇怪。

强烈推荐阅读 深入理解 flex-grow、flex-shrink、flex-basis–蘑菇街前端团队

首先复习一下每个属性的意义:

  • flex-grow:放大元素(属性决定了子容器要占用父容器多少剩余空间);

  • flex-shrink:缩放元素(针对元素溢出的内容,缩放元素比例);

  • flex-basis:flex 元素在主轴方向上的初始大小;

    元素大小的优先级: max-width/min-width > flex-basis > width > box

  • flex:flex-grow, flex-shrinkflex-basis的简写,默认值为0 1 auto。后两个属性可选;

3.3.1 flex-grow 计算方式

1. 默认情况下的 flex-grow 为 0,不会对剩余空间进行占用,此时剩余空间为:100px

在这里插入图片描述

2. 只给第一个元素设置flex-gorw:1,直接占用所有的剩余空间

在这里插入图片描述

3. 给多个元素设置flex-grow 会怎样?

在这里插入图片描述

由此可以推算一下 flex 布局中 flex-grow 放大的计算规则:

  • 当前元素的 flex-grow 的值/所有元素的 flex-grow 的值*剩余空间的大小
  • 1/(1+1+2)*100px = 25px
4. 如果没有剩余空间,则flex-grow不会生效

在这里插入图片描述

5. flex-grow为负数,为小于1的情况

设置flex-gorw为负数的话,可以当做是 0

在这里插入图片描述

如果 flex-grow 的总和小于 1,则按元素的flex-gorw * 剩余空间

在这里插入图片描述

6. flex-grow 小结:
  1. 默认情况下的 flex-grow 都为 0,负值可以当 0 看待;
  2. 元素的 flex-grow 的总和小于 1,则按元素的flex-gorw * 剩余空间 计算;
  3. 元素的 flex-grow 的总和大于 1,则当前元素的 flex-grow 的值/所有元素的 flex-grow 的值*剩余空间的大小
  4. 没有剩余空间,则 flex-grow 不会生效

3.3.2 flex-shrink 计算方式

1.flex-shrink属性,默认为1

在这里插入图片描述

2. 缩放内容,还是依据 flex-shrink 属性的比例进行缩放

在这里插入图片描述

3.缩放公式
  • 三个flex item元素的width: w1, w2, w3

  • 三个flex item元素的flex-shrink:a, b, c

  • 计算总压缩权重: sum = a * w1 + b * w2 + c * w3

  • 计算每个元素压缩率: S1 = a * w1 / sumS2 =b * w2 / sumS3 =c * w3 / sum

  • 计算每个元素宽度:width - 压缩率 * 溢出空间

4. 如果子容器没有超出父容器,设置 flex-shrink 无效
5.flex-shrink 小结:
  1. 默认情况下的 flex-shrink 都为1,负值可以当 1 看待;

  2. 压缩公式

    + 三个flex item元素的width: w1, w2, w3
    
    + 三个flex item元素的flex-shrink:a, b, c
    
    + 计算总压缩权重: sum = a * w1 + b * w2 + c * w3
    
    + 计算每个元素压缩率: `S1 = a * w1 / sum`,`S2 =b * w2 / sum`,`S3 =c * w3 / sum`
    
    + 计算每个元素宽度:width - 压缩率 * 溢出空间
    
  3. 没有溢出空间,则 flex-shrink 不会生效

3.3.3 flex-basis

MDN定义:指定了 flex 元素在主轴方向上的初始大小

在这里插入图片描述

记住优先级即可:

max-width/min-width > flex-basis > width > box

3.3.4 flex

flex-grow, flex-shrinkflex-basis的简写,默认值为0 1 auto。后两个属性可选;

4. 相关博客

  • Flex 布局教程:语法篇–阮一峰

  • Flex 布局教程:实例篇–阮一峰

  • 深入理解 flex-grow、flex-shrink、flex-basis–蘑菇街前端团队

END

  • 总结一下上述内容,flex 布局主要针对两处内容:容器以及容器中的项。
  • 主要的属性有:设置主轴方向的;设置是否换行;设置主轴对齐方式;以及flex属性等。
  • 相对来说,flex属性的值,无论是放大还是缩放,这两个属性是根据元素的,剩余空间或者溢出空间,按比例进行放大和缩放的。

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

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

相关文章

Hadoop:YARN、MapReduce、Hive操作

目录 分布式计算概述 YARN概述 YARN架构 核心架构 辅助架构 MapReduce 概述 配置相关文件 提交MapReduce到YARN Hive Hive架构 Hive在VMware部署 Hive的启动 数据库操作 数据表操作 内部表操作 外部表操作 数据加载和导出 数据加载LOAD 数据加载 - INSERT SEL…

生物的神经系统与机器的人工神经网络

生物的神经系统与机器的人工神经网络 文章目录 前言一、人工神经网络二、生物的神经系统三、关系四、相似与区别4.1. 相似&#xff1a;4.2. 区别: 总结 前言 因为本人是学生物的&#xff0c;并且深度学习的核心——人工神经网络与生物的神经系统息息相关&#xff0c;故想要在本…

单片机测量任务运行时间

前言 1.之前是直接看定时器的计数值来粗略估计&#xff0c;可能会存在一些差错&#xff0c;也不够方便&#xff1b;所以做一个比较通用的计算任务运行时间的小Demo。 2.用定时器的计数值查看开始的Tick和结束的Tick&#xff0c;然后定时器每隔1毫秒溢出一次&#xff0c;通过简…

QML 碰到的奇怪问题

text elied属性失效 elied属性就是当Text的文本文字超过Text的宽度时。文字会出现省略的效果。 import QtQuick 2.9 import QtQuick.Window 2.3Window {visible: truewidth: 640height: 480title: qsTr("Hello World")Rectangle{anchors.centerIn: parentwidth: pa…

颜色扩散类dp及其优化:0919T2

http://cplusoj.com/d/senior/p/330 此题前半部分是AGC058B 这是一个颜色扩散类dp&#xff0c;对于这类dp&#xff0c;存在一个性质。 假如一个区间被 i i i 染&#xff0c;一个被 j j j 染&#xff0c;则必然满足 i < j i<j i<j&#xff08;这是下标&#xff09…

基于SSM的智慧城市实验室主页系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

e签宝,再「进化」

基于ePaaS&#xff0c;e签宝不仅打造了电子签领域的生态圈&#xff0c;也正在赋能整个SaaS行业奔向生态化的良性业态&#xff0c;这将使得SaaS厂商的边界愈发清晰&#xff0c;逐渐实现“量产”&#xff0c;奔向规模化。 作者|斗斗 出品|产业家 1957年11月&#xff0c;江苏…

文件字符输出流(FileWriter)(基础流)

1、不追加的情况 package com.csdn.d4_char_stream; import java.io.FileWriter; import java.io.IOException; import java.io.Writer; public class FileWriterDemo01 {public static void main(String[] args) throws IOException {//1、创建一个字符输出流管道与目标文件接…

Android进阶之路 - 盈利、亏损金额格式化

在金融类型的app中&#xff0c;关于金额、数字都相对敏感和常见一些&#xff0c;在此仅记录我在金融行业期间学到的皮毛&#xff0c;如后续遇到新的场景也会加入该篇 该篇大多采用 Kotlin 扩展函数的方式进行记录&#xff0c;尽可能熟悉 Kotlin 基础知识 兄弟 Blog StringUti…

Kafka为什么是高性能高并发高可用架构

目录 1 前言2 顺序写入3 页缓存4 零拷贝5 Broker 性能6 流数据并行7 总结 1 前言 我们都知道 Kafka 是基于磁盘进行存储的&#xff0c;但 Kafka 官方又称其具有高性能、高吞吐、低延时的特点&#xff0c;其吞吐量动辄几十上百万。小伙伴们是不是有点困惑了&#xff0c;一般认为…

Linux——IO

✅<1>主页&#xff1a;&#xff1a;我的代码爱吃辣 &#x1f4c3;<2>知识讲解&#xff1a;Linux——文件系统 ☂️<3>开发环境&#xff1a;Centos7 &#x1f4ac;<4>前言&#xff1a;是不是只有C/C有文件操作呢&#xff1f;python&#xff0c;java&…

Code Ocean :一个用于数据科学和科学研究的在线平台【源码+文章解析】

Code Ocean&#xff08;https://codeocean.com/&#xff09;是一个用于数据科学和科学研究的在线平台&#xff0c;旨在帮助研究人员更轻松地管理、共享和复制研究代码和数据。以下是Code Ocean的主要用途和功能&#xff1a; 代码和数据的管理&#xff1a;Code Ocean允许研究人…

辨析目录表、文件打开表、文件分配表、索引表、FCB、inode、fd等文件系统常见名词

文章目录 1 解释2 形象配图 以下内容仅供简单的辨析这些文件系统最基本的名词&#xff0c;如果需要更深入的了解&#xff0c;请查阅相关转移书籍&#xff0c;如《现代操作系统》、《操作系统概念》 、《操作系统精髓与设计原理》等书籍。 1 解释 2 形象配图 文件打开表 文件分…

工控机连接Profinet转Modbus RTU网关与水泵变频器Modbus通讯

Profinet转Modbus RTU网关是一个具有高性能的通信设备&#xff0c;它能够将工控机上的Profinet协议转换成水泵变频器可识别的Modbus RTU协议&#xff0c;实现二者之间的通信。通过这种方式&#xff0c;工控机可以直接控制水泵变频器的运行状态&#xff0c;改变其工作频率&#…

Windows10下的GTSAM因子图安装与使用

Windows10下的GTSAM因子图安装与使用 一、windows系统预安装1. windows 10安装gcc2.windows 10 安装 boost3.CMake 安装与查看4.CMake 配置boost 二、GTSAM安装与使用三、CMAKE 创建立 使用GTSAM的Visual Studio项目参考文献 一、windows系统预安装 1. windows 10安装gcc htt…

【深度学习框架格式转化】【CPU】Pytorch模型转ONNX模型格式流程详解【入门】

【深度学习框架格式转化】【GPU】Pytorch模型转ONNX模型格式流程详解【入门】 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【深度学习框架格式转化】【GPU】Pytorch模型转ONNX模型格式流程详解【入门】前言PyTorch模型环境搭建(CPU)安装onn…

LCP 50. 宝石补给(每日一题)

欢迎各位勇者来到力扣新手村&#xff0c;在开始试炼之前&#xff0c;请各位勇者先进行「宝石补给」。 每位勇者初始都拥有一些能量宝石&#xff0c; gem[i] 表示第 i 位勇者的宝石数量。现在这些勇者们进行了一系列的赠送&#xff0c;operations[j] [x, y] 表示在第 j 次的赠送…

解决VS Code安装远程服务器插件慢的问题

解决VS Code安装远程服务器插件慢的问题 最近想在服务器上做juypter notebook的代码运行&#xff0c;发现要给服务器安装Jupyter插件&#xff0c;但是安装速度奇慢无比&#xff08;因为服务器不连外网&#xff09;&#xff0c;一开始查看从VS Code插件市场下载插件的博客&…

网络编程day02(socket套接字)

今日任务&#xff1a; TCP\UDP服务端客户端通信 TCP&#xff1a;代码 服务端&#xff1a; #include <stdio.h> #include <string.h> #include <stdlib.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #in…

项目提交按钮没防抖,差点影响了验收

前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 表妹一键制作自己的五星红旗国庆头像&#xff0c;超好看 前言 一个运行了多年的ToB的项目&#xff0c;由于数据量越来越大&#xff0c;业务越来越复杂&…