flex布局学习笔记

flex布局

推荐网址:弹性框完整指南 |CSS-Tricks - CSS-Tricks

基础知识和术语

由于flexbox是一个完整的模块,而不是一个单一的属性,它涉及很多事情,包括它的整套属性。其中一些应该在容器(父元素,称为“flex 容器”)上设置,而其他的则应该在子元素(称为“flex items”)上设置。

如果“常规”布局同时基于块流和内联流方向,则挠性布局基于“柔性流方向”。请从规范中查看此图,解释 flex 布局背后的主要思想。

在这里插入图片描述

项目将按照(从到)或十字轴(从到)进行布局。main axis main-start main-end cross-start cross-end

  • 主轴 – 柔性容器的主轴是柔性项目布局所依据的主轴。当心,它不一定是水平的;这取决于属性(见下文)。flex-direction
  • main-start | main-end – 弹性项目放置在容器内,从 main-start 开始,一直到主端。
  • 主尺寸 – 弹性项目的宽度或高度(以主维度中的为准)是项目的主要尺寸。弹性项的主尺寸属性是“宽度”或“高度”属性,以主维度中的个体为准。
  • 交叉轴 – 垂直于主轴的轴称为交叉轴。它的方向取决于主轴方向。
  • 交叉开始 | 交叉端 – 柔性线填充物料并放入容器中,从挠性容器的交叉起始侧开始,向交叉端方向移动。
  • 交叉大小 – 弹性项的宽度或高度(以十字尺寸中的较大者为准)是项的交叉大小。交叉大小属性是交叉维度中的“宽度”或“高度”中的任何一个。

弹性框属性

在这里插入图片描述

父项 的属性(弹性容器)

显示

这定义了一个弹性容器;内联或块,具体取决于给定的值。它为其所有直接子级启用弹性上下文。

.container {display: flex; /* or inline-flex */
}

请注意,CSS 列对 flex 容器没有影响。

柔性方向

在这里插入图片描述

这将建立主轴,从而定义柔性项目在柔性容器中的放置方向。弹性框是(除了可选的包装)单向布局概念。将弹性项目视为主要在水平行或垂直列中布局。

.container {flex-direction: row | row-reverse | column | column-reverse;
}
  • row(默认值):从左到右
  • row-reverse:从右到左;ltr``rtl
  • column:与上相同,但从上到下row
  • column-reverse:与相同,但从下到上row-reverse

柔性包装

在这里插入图片描述

默认情况下,弹性项目将全部尝试适合一行。您可以更改此设置,并允许使用此属性根据需要包装项。

.container {flex-wrap: nowrap | wrap | wrap-reverse;
}
  • nowrap(默认值):所有弹性项目都将在一行上
  • wrap:弹性项目将从上到下换行到多行。
  • wrap-reverse:弹性项目将从下到上换行到多行。

这里有一些弹性包装的视觉演示。

柔性流

这是 和 属性的简写,它们共同定义了 flex 容器的主轴和交叉轴。默认值为 。flex-direction``flex-wrap``row nowrap

.container {flex-flow: column wrap;
}

证明内容

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这定义了沿主轴的对齐方式。当一行上的所有弹性项目都不灵活或灵活但已达到其最大大小时,它有助于分配剩余的额外可用空间。当项目溢出行时,它还对项目的对齐方式施加一些控制。

.container {justify-content: flex-start | flex-end | center | space-between | space-around | space-evenly | start | end | left | right ... + safe | unsafe;
}
  • flex-start(默认值):项目将打包到弹性方向的起点。
  • flex-end:项目在弹性方向的末尾打包。
  • start:物品在方向的起点打包。writing-mode
  • end:物品在方向的末尾打包。writing-mode
  • left:项目打包到容器的左边缘,除非这对 没有意义,否则它的行为类似于 。flex-direction``start
  • right:项目被打包到容器的右边缘,除非这对 没有意义,否则它的行为类似于 。flex-direction``end
  • center:项目沿线居中
  • space-between:物品均匀分布在行中;第一项在起跑线上,最后一项在终点线上
  • space-around:物品均匀分布在行中,周围空间相等。请注意,从视觉上看,空间并不相等,因为所有项目的两侧都有相等的空间。第一项将有一个相对于容器边缘的空间单位,但下一项之间有两个空间单位,因为下一项有自己的适用间距。
  • space-evenly:对项目进行分布,以使任意两个项目之间的间距(以及边缘的空间)相等。

请注意,浏览器对这些值的支持是细微差别的。例如,从未获得某些版本的Edge的支持,并且开始/结束/左/右还没有在Chrome中。MDN有详细的图表。最安全的值是 、 和 。space-between``flex-start``flex-end``center

您还可以将两个其他关键字与这些值配对:和 。使用可确保执行此类定位的方式,您不能推动元素使其呈现在屏幕外(例如顶部),从而使内容也无法滚动(称为“数据丢失”)。safe``unsafe``safe

对齐项

在这里插入图片描述

这定义了弹性项目沿当前行的交叉轴布局方式的默认行为。将其视为十字轴(垂直于主轴)的版本。justify-content

.container {align-items: stretch | flex-start | flex-end | center | baseline | first baseline | last baseline | start | end | self-start | self-end + ... safe | unsafe;
}
  • stretch(默认值):拉伸以填充容器(仍遵循最小宽度/最大宽度)
  • flex-start / start / self-start:项目放置在十字轴的开头。这些之间的区别是微妙的,是关于尊重规则或规则。flex-direction``writing-mode
  • flex-end / end / self-end:项目放置在十字轴的末端。区别又是微妙的,是关于尊重规则与 规则。flex-direction``writing-mode
  • center:项目在十字轴上居中
  • baseline:项目对齐,例如其基线对齐

和修饰符关键字可以与所有这些关键字(尽管注意浏览器支持)结合使用,并帮助您防止对齐元素,从而使内容变得无法访问。safe``unsafe

对齐内容

在这里插入图片描述

当交叉轴上有额外空间时,这将对齐 flex 容器的线条,类似于在主轴内对齐单个项目的方式。justify-content

**注意:**此属性仅在多行灵活容器上生效,其中设置为 或 )。单行灵活容器(即 where 设置为其默认值 )将不会反映 。flex-wrap``wrap``wrap-reverse``flex-wrap``no-wrap``align-content

.container {align-content: flex-start | flex-end | center | space-between | space-around | space-evenly | stretch | start | end | baseline | first baseline | last baseline + ... safe | unsafe;
}
  • normal(默认值):项目打包在其默认位置,就像未设置任何值一样。
  • flex-start / start:包装到容器开头的物品。(更多支持)尊重方向,而尊重方向。flex-start``flex-direction``start``writing-mode
  • flex-end / end:包装到容器末端的物品。(更多的支持)尊重方向,而结束尊重方向。flex-end``flex-direction``writing-mode
  • center:在容器中居中的项目
  • space-between:项目均匀分布;第一行位于容器的开头,最后一行位于末尾
  • space-around:项目均匀分布,每行周围空间相等
  • space-evenly:物品均匀分布,周围空间相等
  • stretch:线条拉伸以占用剩余空间

和修饰符关键字可以与所有这些关键字(尽管注意浏览器支持)结合使用,并帮助您防止对齐元素,从而使内容变得无法访问。safe``unsafe

间距、行间距、列间距

在这里插入图片描述

gap 属性显式控制弹性项之间的间距。它仅在不在外边缘的项目之间应用该间距。

.container {display: flex;...gap: 10px;gap: 10px 20px; /* row-gap column gap */row-gap: 10px;column-gap: 20px;
}

该行为可以被认为是最小的排水沟,就像排水沟以某种方式变大(因为类似的东西),那么只有当空间最终变小时,间隙才会生效。justify-content: space-between;

它不仅仅适用于弹性框,也适用于网格和多列布局。gap

前缀弹性框

Flexbox 需要一些供应商前缀来支持大多数浏览器。它不仅包括带有供应商前缀的预置属性,而且实际上还有完全不同的属性和值名称。这是因为 Flexbox 规范随着时间的推移而变化,创建了“旧”、“补间”和“新”版本。

也许处理这个问题的最好方法是编写新的(也是最终的)语法,并通过自动前缀器运行你的CSS,它可以很好地处理回退。

或者,这里有一个 Sass 来帮助一些前缀,这也让你知道需要做什么:@mixin

@mixin flexbox() {display: -webkit-box;display: -moz-box;display: -ms-flexbox;display: -webkit-flex;display: flex;
}@mixin flex($values) {-webkit-box-flex: $values;-moz-box-flex:  $values;-webkit-flex:  $values;-ms-flex:  $values;flex:  $values;
}@mixin order($val) {-webkit-box-ordinal-group: $val;  -moz-box-ordinal-group: $val;     -ms-flex-order: $val;     -webkit-order: $val;  order: $val;
}.wrapper {@include flexbox();
}.item {@include flex(1 200px);@include order(2);
}

例子

让我们从一个非常简单的例子开始,解决一个几乎每天都有的问题:完美居中。如果你使用flexbox,那就再简单不过了。

.parent {display: flex;height: 300px; /* Or whatever */
}.child {width: 100px;  /* Or whatever */height: 100px; /* Or whatever */margin: auto;  /* Magic! */
}

这依赖于在柔性容器中设置为的边距会吸收额外的空间。因此,设置边距将使项目在两个轴上完美居中。auto``auto

现在让我们再使用一些属性。考虑一个包含 6 个项目的列表,所有项目都具有固定尺寸,但可以自动调整大小。我们希望它们均匀分布在水平轴上,以便在我们调整浏览器大小时,一切都可以很好地缩放,并且没有媒体查询。

.flex-container {/* We first create a flex layout context */display: flex;/* Then we define the flow direction and if we allow the items to wrap * Remember this is the same as:* flex-direction: row;* flex-wrap: wrap;*/flex-flow: row wrap;/* Then we define how is distributed the remaining space */justify-content: space-around;
}

做。其他一切都只是一些造型问题。下面是一支包含此示例的笔。请务必转到 CodePen 并尝试调整窗口大小以查看会发生什么。

让我们尝试其他方法。想象一下,我们在网站的最顶部有一个右对齐的导航元素,但我们希望它以中型屏幕为中心,在小型设备上以单列为中心。足够简单。

/* Large */
.navigation {display: flex;flex-flow: row wrap;/* This aligns items to the end line on main-axis */justify-content: flex-end;
}/* Medium screens */
@media all and (max-width: 800px) {.navigation {/* When on medium sized screens, we center it by evenly distributing empty space around items */justify-content: space-around;}
}/* Small screens */
@media all and (max-width: 500px) {.navigation {/* On small screens, we are no longer using row direction but column */flex-direction: column;}
}

让我们尝试更好的东西,玩弹性物品的灵活性!带有全宽页眉和页脚的移动优先 3 列布局怎么样?并且独立于源顺序。

.wrapper {display: flex;flex-flow: row wrap;
}/* We tell all items to be 100% width, via flex-basis */
.wrapper > * {flex: 1 100%;
}/* We rely on source order for mobile-first approach* in this case:* 1. header* 2. article* 3. aside 1* 4. aside 2* 5. footer*//* Medium screens */
@media all and (min-width: 600px) {/* We tell both sidebars to share a row */.aside { flex: 1 auto; }
}/* Large screens */
@media all and (min-width: 800px) {/* We invert order of first sidebar and main* And tell the main element to take twice as much width as the other two sidebars */.main { flex: 3 0px; }.aside-1 { order: 1; }.main    { order: 2; }.aside-2 { order: 3; }.footer  { order: 4; }
}

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

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

相关文章

这些嵌入式系统安全性的知识你需要了解

这可能是 工程师在面对嵌入式系统应用程序的安全性时可能提出的第一个问题。 不幸的是,有大量的“安全软件包”可用,并且对安全性不熟悉的嵌入式工程师可能只将安全性称为加密或病毒防护。尽管加密是安全性的一种工具,而病毒扫描程序从技术上…

Python爬虫实现(requests、BeautifulSoup和selenium)

Python爬虫实现(requests、BeautifulSoup和selenium) requests实现 Python requests 是一个常用的 HTTP 请求库,可以方便地向网站发送 HTTP 请求,并获取响应结果。 下载requests库 pip install requests 实例: # 导…

基于Android系统图书管理系统

摘要 随着移动终端使用率的快速增加,Android智能产品已日益成为越来越多的人们选择的移动终端产品。伴随着Android智能手机与平板电脑已经在我们生活大量的使用,越来越多的基于Android开发平台的应用也随之产生。 便捷的图书检索和借阅:用户可…

ACL(访问控制列表)

文章目录 一、ACL定义常见功能 二、基于ACL的包过滤定义包过滤的方向包过滤的工作流程注意事项 三、ACL分类四、常用命令 首先可以看下思维导图,以便更好的理解接下来的内容。 一、ACL 定义 ACL,也称为访问控制列表,是一种网络安全工具&…

【爬虫】8.1. 深度使用tesseract-OCR技术识别图形验证码

深度使用tesseract-OCR技术识别图形验证码 文章目录 深度使用tesseract-OCR技术识别图形验证码1. OCR技术2. 准备工作3. 简单作用了解3.1. 验证码图片爬取-screenshot_as_png3.2. 识别测试-image_to_string3.2.1. 正确识别3.2.2. 错误识别3.2.3. 灰度调节 3.3. 识别实战-使用im…

卫星地图-航拍影像-叠加配准套合(ArcGIS版)

卫星地图-航拍影像-叠加配准套合(ArcGIS版) 发布时间:2018-01-17 版权:BIGEMAP 第一步 工具准备 BIGEMAP地图下载器:Bigemap系列产品-GIS行业基础软件kml\shp 相关教程:CAD文件直接导入BIGEMAP进行套合配准(推荐&am…

TC测试自动化Shell脚本

在使用TC测试的发现手动进行丢包延迟抖动等场景的组合以及TC命令的切换效率很低,写了一个脚本可以提升效率,也可以根据自己的需求进行脚本更改! 使用方法: 1)运行sh脚本 2)输入TC想要限制的网卡名和服务器…

数字信封技术概论

数字信封技术是一种通过加密手段实现信息保密性和验证的技术,它在保护敏感信息传输过程中得到了广泛应用。本文将详细介绍数字信封技术的原理、实现和应用场景。 一、数字信封技术的原理 数字信封技术是一种将对称密钥通过非对称加密手段分发的方法。在数字信封中…

【Fiddler】mac m1 机器上使用 fiddler 抓取接口

mac m1 机器上使用 fiddler 抓取接口(非虚拟机模式) author: jwensh date:2023.09.12 文章目录 mac m1 机器上使用 fiddler 抓取接口(非虚拟机模式)1. 环境准备2. 进行配置3. 使用情况 1. 环境准备 想要抓取 mac 上浏览器的接口&a…

JAVA8接口使用问题

JAVA8接口使用问题 文章目录 JAVA8接口使用问题1、默认方法冲突问题(1)亲爹优先原则(2)左右为难 2、常量冲突问题 1、默认方法冲突问题 (1)亲爹优先原则 当一个类,既继承一个父类,…

C语言数组和指针笔试题(一)(一定要看)

目录 一维数组例题1例题2例题3例题4例题5例题6例题7例题8例题9例题10例题输出结果 字符数组例题1例题2例题3例题4例题5例题6例题7 一维数组 int a[] {1,2,3,4}; 1:printf("%d\n",sizeof(a)); 2:printf("%d\n",sizeof(a0)); 3:printf("%d\n",si…

如何在JavaScript中实现链式调用(chaining)?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ JavaScript中的链式调用⭐ 示例⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴…

阿里云CDN架构接入WAF应用防火墙案例实践

文章目录 1.网站架构变化2.配置WAF应用防火墙2.1.配置网站接入WAF防火墙2.2.WAF防火墙生成CNAME地址2.3.配置WAF防火墙HTTPS证书2.4.WAF防火墙开启HTTP回源SLB 3.配置CDN加速器回源WAF防火墙4.将域名DNS解析指向CDN的域名5.测试网站是否能正常访问6.模拟攻击观察WAF的作用7.解除…

docker从零部署jenkins保姆级教程(下)

上一篇文章,我们完成了以下工作。 1)、docker部署jenkins 2)、建立第一个jenkins job 3)、通过jenkins job自动编译构建我们的github项目 上面所做的3个工作,其实都是为了这一篇文章打基础,不管是部署docker还是部署jenkins,我们最…

crAPI靶场学习记录

靶场搭建 [靶场下载地址](我fork了一份) docker安装,笔者是用的wsldocker. [lab0:**初始账户 **] 1. 注册一个账户,邮箱为[APIqq.com],密码为Admin123 1. 登陆后访问对应IP的8025端口,接收邮件获取车辆信息。 [lab1:**访问其它用户…

Altium Designer如何查看制定了哪些快捷键?

随着时代高速发展,Altium Designer(AD)、Allegro、Pads等是全球主流的三大EDA软件,因此越来越多工程师被要求学习这些软件,在使用EDA软件设计PCB过程时,熟悉和合理配置快捷键是提高工作效率的关键之一&…

flink的物理DataFlow图及Slot处理槽任务分配

背景 在flink中,有几个比较重要的概念,逻辑DataFlow图,物理DataFlow图以及处理槽执行任务,本文就来讲解下这几个概念 概念详解 假设有以下代码:数据源和统计单词算子的并行度是2,数据汇算子的并行度是1&…

Vue3 Element-Plus 主题切换方案

1. .html 文件中&#xff0c;设置 <html> 标签的 “data-theme” 属性 2. 单独创建主题的样式文件 .css/.scss &#xff0c;并导入 3. 样式文件中创建不同主题对象 4. 定义不同主题中的样式变量 注意&#xff1a;左右两个主题的变量名一样&#xff0c;值不同 5. 页面样式…

C++之智能指针shared_ptr死锁问题(二百)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…