【基础知识】Flex-弹性布局原来如此简单!!

news/2023/12/9 17:41:16

简言

布局的传统解决方案是基于盒状模型,依赖 display + position + float 方式来实现,灵活性较差。2009年,W3C提出了一种新的方案-Flex,Flex是Flexible Box的缩写,意为”弹性布局”。Flex可以简便、完整、响应式地实现多种页面布局。下面我们就从基础语法开始,一起来感受下Flex的魅力吧!

1 基本概念

采用 Flex 布局的元素,称为 Flex 容器(flex container),简称"容器"。它的所有子元素自动成为容器成员,称为 Flex 项目(flex item),简称"项目"。

容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis)。主轴的开始位置(与边框的交叉点)叫做main start,结束位置叫做main end;交叉轴的开始位置叫做cross start,结束位置叫做cross end。

Flex项目默认沿主轴排列。单个项目占据的主轴空间叫做main size,占据的交叉轴空间叫做cross size。

Flex属性分为两部分,一部分作用于容器称容器属性,另一部分作用于项目称为项目属性。下面我们就分部的来介绍它们。

2 Flex容器属性

2.1 flex容器定义

基本语法:

.box {
  display: flex; /* 或者 inline-flex */
}
复制代码

上述写法,定义了一个flex容器,根据设值的不同可以是块状容器或内联容器。这使得直接子结点拥有了一个flex上下文。

2.2 flex-direction

flex-direction属性决定主轴的方向(即项目的排列方向)。

基本语法:

.box {
    flex-direction: row | row-reverse | column | column-reverse;
}
复制代码
  • row 表示从左向右排列
  • row-reverse 表示从右向左排列
  • column 表示从上向下排列
  • column-reverse 表示从下向上排列

演示程序:

演示代码

2.3 flex-wrap

缺省情况下,Flex项目都排在一条线(又称"轴线")上。我们可以通过flex-wrap属性的设置,让Flex项目换行排列。

基本语法:

.box {
    flex-wrap: nowrap | wrap | wrap-reverse;
}
复制代码
  • nowrap(缺省):所有Flex项目单行排列
  • wrap:所有Flex项目多行排列,按从上到下的顺序
  • wrap-reverse:所有Flex项目多行排列,按从下到上的顺序

演示程序:

演示代码

观察上述演示程序 ,理解不同属性的含义。点击演示区域,可启动或停止演示。

2.4 flex-flow

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

基本语法:

.box {
    flex-flow: <‘flex-direction’> || <‘flex-wrap’>
}
复制代码

2.5 justify-content

justify-content属性定义了项目在主轴上的对齐方式及额外空间的分配方式。

基本语法:

.box  {
    justify-content: flex-start | flex-end | center | space-between | space-around | space-evenly;
}
复制代码
  • flex-start(缺省):从启点线开始顺序排列
  • flex-end:相对终点线顺序排列
  • center:居中排列
  • space-between:项目均匀分布,第一项在启点线,最后一项在终点线
  • space-around:项目均匀分布,每一个项目两侧有相同的留白空间,相邻项目之间的距离是两个项目之间留白的和
  • space-evenly:项目均匀分布,所有项目之间及项目与边框之间距离相等

演示程序:

演示代码

2.6 align-items

align-items属性定义项目在交叉轴上的对齐方式。

基本语法:

.box {
  align-items: stretch | flex-start | flex-end | center | baseline;
}
复制代码
  • stretch(缺省):交叉轴方向拉伸显示
  • flex-start:项目按交叉轴起点线对齐
  • flex-end:项目按交叉轴终点线对齐
  • center:交叉轴方向项目中间对齐
  • baseline:交叉轴方向按第一行文字基线对齐

演示程序:

演示代码

2.7 align-content

align-content属性定义了在交叉轴方向的对齐方式及额外空间分配,类似于主轴上justify-content的作用。

基本语法:

.box {
    align-content: stretch | flex-start | flex-end | center | space-between | space-around ;
}
复制代码
  • stretch (缺省):拉伸显示
  • flex-start:从启点线开始顺序排列
  • flex-end:相对终点线顺序排列
  • center:居中排列
  • space-between:项目均匀分布,第一项在启点线,最后一项在终点线
  • space-around:项目均匀分布,每一个项目两侧有相同的留白空间,相邻项目之间的距离是两个项目之间留白的和

演示程序:

演示代码

3 Flex项目属性

3.1 order

缺省情况下,Flex项目是按照在代码中出现的先后顺序排列的。然而order属性可以控制项目在容器中的先后顺序。

基本语法:

.item {
  order: <integer>; /* 缺省 0 */
}
复制代码

order值从小到大顺序排列,可以为负值,缺省为0。

演示程序:

演示代码

3.2 flex-grow

flex-grow属性定义项目的放大比例,flex-grow 值是一个单位的正整数,表示放大的比例。默认为0,即如果存在额外空间,也不放大,负值无效。

如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍。

基本语法:

.item {
  flex-grow: <number>; /* 缺省 0 */
}
复制代码

演示程序:

演示代码

3.3 flex-shrink

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

基本语法:

.item {
  flex-shrink: <number>; /* 缺省 1 */
}
复制代码

演示程序:

演示代码

3.4 flex-basis

flex-basis属性定义项目在分配额外空间之前的缺省尺寸。属性值可以是长度(20%,10rem等)或者关键字auto。它的默认值为auto,即项目的本来大小。

基本语法:

.item {
  flex-basis: <length> | auto; /* 缺省 auto */
}
复制代码

演示程序:

演示代码

3.5 flex

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

基本语法:

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

一般推荐使用这种简写的方式,而不是分别定义每一个属性。

3.6 align-self

align-self属性定义项目的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。

基本语法:

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

除了auto值以外,align-self属性与容器的align-items属性基本一致。

演示程序:

演示代码

4 兼容性

ChromeSafariFirefoxOperaIEAndroidiOS
21+6.1+22+12.1+11+4.4+7.1+

Flexbox需要一些特定的前缀以支持大多数的浏览器。甚至还存在完全不同的属性名称或属性值。这就需要Autoprefixer或类似的CSS后处理器的辅助,具体内容请参考相关文档。

5 相关资源

A Complete Guide to Flexbox

Flexbox in the CSS specifications

Flexbox at MDN

Flex 布局语法教程


http://www.niftyadmin.cn/n/2493169.html

相关文章

C语言-数据存储

以下都是在32位机器下进行.. 1.整形&#xff08;char&#xff09;类型的存储&#xff1a; &#xff08;1&#xff09;整形&#xff1a; 在计算机中所有数字都是以二进制的补码形式存储。 原码&#xff1a;正整数的原码就是其二进制数字&#xff0c;其他位往前补0&…

IO流技术

IO流常用基类 字节流的抽象基类&#xff1a;InputStream,OutputStream 字符流的抽象基类&#xff1a;Reader,Writer Writer类 子类&#xff1a;BufferedWriter&#xff0c;CharArrayWriter&#xff0c;FilterWriter&#xff0c;OutputStreamWriter&#xff0c;PipedWriter&…

动态内存函数(c语言)

1.malloc函数 c语言提供了一个动态内存开辟的函数&#xff1a;void*malloc(size_t size) 这个函数向内存申请一块连续可用的空间&#xff0c;并返回指向这块空间的指针 如果开辟成功&#xff0c;返回一个指向开辟好空间的指针&#xff0c;如果开辟失败&#xff0c;返回NULL&…

Java开发万年历

自己做出来的万年历&#xff1a; 以下代码&#xff1a; public class Test2 { public static void main(String[] args) { Scanner sc new Scanner(System.in); System.out.println("请输入年份和月份&#xff1a;"); int y sc.nextInt(); int m sc.nextInt()…

24、sam- 详解

http://note.youdao.com/share/?id312fa04209cb87f7674de9a9544f329a&typenote#/ https://davetang.org/wiki/tiki-index.php?pageSAM 编辑距离Edit Distance&#xff1a;从字符串a变到字符串b&#xff0c;所需要的最少的操作步骤&#xff08;插入I&#xff0c;删除D&…

c语言——程序环境和预处理

一.程序的翻译环境和执行环境 在ANSIC的任何一种实现中&#xff0c;存在两个不同的环境。 第1种是翻译环境&#xff0c;在这个环境中源代码被转换为可执行的机器指令。 第2种是执行环境&#xff0c;它用于实际执行代码。 组成一个程序的每个源文件通过编译过程分别转换成目标代…

HTML5权威指南----读书笔记

<!DOCTYPE html> <html> <head><meta name keywords content"HTML5权威指南----读书笔记"><meta name description content"HTML5权威指南----读书笔记"><meta charset"utf-8"><title>HTML5权威指南…

巴士博弈_自主穿梭巴士内部和服务的设计

巴士博弈“Welcome on board!”, I said as a group of four co-creation participants entered the meeting room. We had marked a 3.2-metre by 1.2-metre rectangle on the floor with masking tape and asked our participants to imagine that they were travelling in a…

写一个宏,可以将一个整数的二进制位的奇数位和偶数位交换。(c语言)

思路&#xff1a;10的二进制是00000000000000000000000000001010&#xff0c;然后交换奇数位和偶数位那么就是第一位和第二位交换&#xff0c;第三位和第四位交换&#xff0c;以此类推 解题步骤&#xff1a; &#xff08;1&#xff09;将00000000000000000000000000001010的奇…

2018年4月2日推荐文章精选 “推荐好文,一篇看尽”

记录一次邮件容灾恢复过程 作者&#xff1a;Juck_Zhang简介&#xff1a;客户目前使用的是Exchange Server 2013,两前两后&#xff0c;数据盘是存储挂载过来的&#xff0c;邮件备份使用的是NBU&#xff0c;由于机房漏水&#xff0c;导致存储服务器宕机。导致绝大部分数据丢失。 …

单链表——c语言

1.什么是链表 链表是一种常见的数据结构。它与常见的数组是不同的&#xff0c;使用数组时先要指定数组包含元素的个数&#xff0c;即为数组的长度&#xff0c;但是如果向这个数组中加入的元素超过了数组的大小时&#xff0c;便不能将内容全部保存。   链表这种存储方式&#…

汉克时代 签2份合同_在动荡的时代找到一份工作

汉克时代 签2份合同These are uncertain times. COVID-19 has caused global turmoil, resulting in many of my fellow design friends being furloughed or simply laid off. I’ve spent the better part of my evenings on the phone, listening, hearing the pain of thei…

Windbg内核调试之二: 常用命令

运用Windbg进行内核调试, 熟练的运用命令行是必不可少的技能. 但是面对众多繁琐的命令, 实在是不可能全部的了解和掌握. 而了解Kernel正是需要这些命令的指引, 不断深入理解其基本的内容. 下面, 将介绍最常用的一些指令, 使初学Kernel调试的朋友们能有一个大致的了解. 至于如何…

mac os - npm 库

在mac系统中&#xff0c;我们下载的库一般都在&#xff0f;usr/local中 node npm下载的库在/usr/local/lib的node_modules中 这里面还有python的pip下载的库&#xff0c;在&#xff0f;usr/local/lib/python 2.7/site-packages中 和大多数mac使用者一样&#xff0c;在安装pytho…

链表刷题篇

一. 题目链接&#xff1a;链表 - LeetBook - 力扣&#xff08;LeetCode&#xff09;全球极客挚爱的技术成长平台 (leetcode-cn.com) 思路&#xff1a; 原链表如图 1.定义一个新head头指针&#xff0c;标记为new&#xff0c;将它初始为NULL&#xff0c;并非指向NULL&#xff0…

php--学习

PHP - 多维数组 多维数组指的是包含一个或多个数组的数组。 注释&#xff1a;数组的维度指示您需要选择元素的索引数。 对于二维数组&#xff0c;您需要两个索引来选取元素对于三维数组&#xff0c;您需要三个索引来选取元素PHP - 两维数组 $cars array(array("Volvo&quo…
最新文章