flex弹性布局详解

目录
  • 初了解
  • 基本概念
  • 属性
    • 容器属性(container)
    • flex 项目属性(item属性)
  • 骰子布局实践

初了解

在学习弹性布局之前首先就要明白其概念
flex 就是flexible box的缩写,意为弹性布局,用来为盒装模型提供最大的灵活性
任何一个容器都可以指定为flex布局

.box{
  display: flex;
}

行内元素当然也可以使用flex布局

.box{
  display: inline-flex;
}

Webkit 内核的浏览器,必须加上-webkit前缀。

.box{
  display: -webkit-flex; /* Safari */
  display: flex;
}

注意:设为 Flex 布局以后,子元素的float、clear和vertical-align属性将失效。

基本概念

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

容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis)。主轴的开始位置(与边框的交叉点)叫做main start,结束位置叫做main end;交叉轴的开始位置叫做cross start,结束位置叫做cross end。
项目默认沿主轴排列。单个项目占据的主轴空间叫做main size,占据的交叉轴空间叫做cross size。
以上这些基础概念,请务必牢记,下面说属性时,不再重复说明!

属性

容器属性(container)

  • flex-direction
  • justify-content
  • align-items
  • flex-wrap
  • align-content
  • flex-flow

1.flex-direction

flex items默认都是沿着main axis(主轴)从main start 开始往main end方向排布
	flex-direction决定了main axis的方向,有四个取值row(默认值)、row-reverse、column、column-reverse
.box {
  flex-direction: row | row-reverse | column | column-reverse;
}

row(默认值):主轴为水平方向,起点在左端。
row-reverse:主轴为水平方向,起点在右端。
column:主轴为垂直方向,起点在上沿。
column-reverse:主轴为垂直方向,起点在下沿。

2.justify-content

justify-content决定了flex item在main axis上的对齐方式

	flex-start(默认值):与main start对齐
	flex-end:与main end对齐
	center:居中
	space-between:flex items 之间的距离相等,与main start、main end两端对齐
	space-evenly: flex items 之间的距离相等,flex items与main start 、main end 之间的距离等于flex items之间的距离
	space-around :flex items 之间的距离相等,flex items与main start 、main end 之间的距离等于flex items之间的距离的一半

这个属性的目的主要就是为了排列main axis的item位置

当然,这些属性你可以自己尝试一下,这里就不再一一尝试了,但是注意,这些都是容器的属性,要写在容器的css中!

3.align-items

决定flex items在cross axis上的对齐方式

	normal:在弹性布局中,效果和stretch一样
	stretch:前提是items不设置高度,当flex items 在cross axis 方向的size为auto时,会自动拉伸至填充flex container(或者换句话说:如果项目未设置高度或设为auto,将占满整个容器的高度。)
	flex-satrt:与cross start 对齐
	flex-end:与cross end 对齐
	center:居中对齐
	baseline:与基准线对齐

4.flex-wrap

 决定了flex container 是单行还是多行
	nowrap(默认):单行
	wrap:多行
	//这个比较少用
	wrap-reverse:多行(对比wrap,cross start 与cross end相反)

默认情况下,项目都排在一条线(又称"轴线")上。flex-wrap属性定义,如果一条轴线排不下,如何换行。

5 align-content

 决定了多行flex items 在cross axis的对齐方式 用法与justify-content相似 一个是横轴。一个控制竖轴
	stretch(默认值):与align-items的stretch类似,当items有高度的时候,无效果
	flex-start:与cross start 对齐
	flex-end :与cross end 对齐
	center:居中对齐
	space-between:flex items 之间的距离相等,与cross start、cross end两端对齐
	space-evently: flex items 之间的距离相等,flex items与cross start 、cross end 之间的距离等于flex items之间的距离
	space-around :flex items 之间的距离相等,flex items与cross start 、cross end 之间的距离等于flex items之间的距离的一半

6 flex-flow 是flex-direction与flex-wrap的简写

也就是说,当你使用这个属性的时候,你可以使用上述两个的属性值,例如:flex-flow: row wrap;(水平排列,多行显示)

flex 项目属性(item属性)

  • order
  • flex-grow
  • flex-shrink
  • flex-basis
  • align-self
  • flex

1 order

 order 决定flex items的排布顺序  (用的不多)
	可以设置为任意整数(正整数、负整数、0),值越小越排在前面
	默认值为0

这个属性了解即可,说实话没怎么用过

2 align-self

 可以通过align-self 覆盖flex container 设置的align-items
	auto(默认值):遵从flex container的align-items设置
	stretch、flex-start、flex-end、center、baseline效果与align-items一致

相当于继承父元素的align-items属性,如果没有父元素,则等同于stretch。

3 flex-grow

决定了flex items如何扩展
	可以设置为任意非父数字(小数,整数 0),默认为0
	当flex container 在main axis方向上有剩余得size时,flex-grow属性才会有效

	如果所有flex items 的flex-grow 综合sum不超过1,这直接乘以剩余size就是扩展大小、
	如果超过1 扩展size=剩余size*flex-grow/sum

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

4 flex-shrink

flex-shrink (shrink 缩小,收缩)与flex-grow相似,一个扩展,一个伸缩
	可以设置为任意非父数字(小数,整数 0),默认为1
	当flex items在main axis 方向上超过了flex container 的size flex-shrink属性才会生效、
	如果所有flex items 的flex-shrink 总和sum超过1,每个flex item 收缩的size为:
		flex item 超出flex container 的size*收缩比例/每个flex items 的收缩比例之和
	如果sum不超过1,每个flex item 收缩的size为:
		size = 超出的size * flex-shrink值
	flex items收缩后的最终size不能小于min-width\min-height

有扩大自然就会有缩小,flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。
如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。具体的可以自己动手尝试一下哦,最后将会给出一个骰子布局的案例!

5 flex-basis

用来设置flex items 在 main axis方向上的base size
	默认为auto,可以设置具体的宽度数值

	决定flex items最终base size 的因素,优先级从高到低
		max-width\max-height\min-width\min-height
		flex-basis
		width\height
		内容本身的size

flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目(item)的本来大小。也可以设置跟width,height一样的宽高,表示item将占据固定的空间!

6 flex

flex 是flex-grow || flex-shink||flex-basis的简写
可以指定1 2 3个值 依次按照上述顺序!默认值为 0 1 auto
.item {
  flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
}

注意:

该属性的默认值为 0 1 auto(注意顺序),后两个属性可选
该属性有两个快捷值:auto (1 1 auto) 和 none (0 0 auto)。
如果需要这三个属性的时候,建议使用flex,而不是单独的三个分离的属性,因为浏览器会推算相关值

骰子布局实践

光说不练假把式,手撕代码真功夫!
下面利用flex写了几个骰子布局,可以参考一下!

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			#container{
				background-color: #CCCCCC;
				height: 600px;
				width: 500px;
				/* flex */
				display: flex;
				justify-content: space-evenly;
				align-items: center;
			}
			.item{
				background-color: yellow;
				width: 100px;
				height: 100px;

			}
			/* 单点 */
			.one{
				/* 对点使用flex布局 */
				display: flex;
				justify-content: center;
				align-items: center;
			}
			/* 点 */
			.item-one{
				display: block;
				height: 20px;
				width: 20px;
				background-color: #1890FF;
				border-radius: 50%;
			}
			/* 三点 */
			.two{

				display: flex;
				justify-content: space-between;
			}
			.two span{
				margin: 2px;
				display: block;
				height: 20px;
				width: 20px;
				border-radius: 50%;
				background-color: #1890FF;
			}
			.two2{
				align-self: center;
			}
			.two3{
				align-self: flex-end;
			}
			/* 五点 */
			.three{
				display: flex;
				justify-content: space-around;
			}
			.three span{
				display: block;
				height: 20px;
				width: 20px;
				border-radius: 50%;
				background-color: #1890FF;
			}
			#three_one, #three_three{
				padding: 2px;
				display: flex;
				flex-direction: column;
				justify-content: space-between;
			}
			#three_two{
				display: flex;
				flex-direction: column;
				justify-content: center;
			}
			/* 六点 */
			.four{
				display: flex;
				justify-content: space-around;
			}
			.four span{
				display: block;
				height: 20px;
				width: 20px;
				border-radius: 50%;
				background-color: #1890FF;
			}
			#four1,#four2{
				padding: 2px;
				display: flex;
				flex-direction: column;
				justify-content: space-between;
			}
		</style>
	</head>
	<body>
		<div id="container">
			<!-- 一个点居中 -->
			<div class="item one">
				<span class="item-one"></span>
			</div>
			<!-- 三点 -->
			<div class="item two">
				<span class="two1"></span>
				<span class="two2"></span>
				<span class="two3"></span>
			</div>
			<!-- 五点 -->
			<div class="item three">
				<div id="three_one">
					<span></span>
					<span></span>
				</div>
				<div id="three_two">
					<span></span>
				</div>
				<div id="three_three">
					<span></span>
					<span></span>
				</div>
			</div>
			<!-- 六点 -->
			<div class="item four">
				<div id="four1">
					<span></span>
					<span></span>
					<span></span>
				</div>
				<div id="four2">
					<span></span>
					<span></span>
					<span></span>
				</div>
			</div>

		</div>
	</body>
</html>

测试结果

到此这篇关于最详细完整的flex弹性布局的文章就介绍到这了,更多相关flex弹性布局内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Flexbox+ReclyclerView实现流式布局

    本文实例为大家分享了Flexbox+ReclyclerView实现流式布局的具体代码,供大家参考,具体内容如下 效果: module build.gradle引入 implementation 'com.google.android.flexbox:flexbox:3.0.0' 布局 activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:androi

  • Vue移动端用淘宝弹性布局lib-flexible插件做适配的方法

    淘宝弹性布局lib-flexible lib-flexible并不单独使用,而是搭配px2rem-loader一起做适配方案,目的是自动将css中的px转换成rem,在项目中还是按照设计稿写上对应的固定像素(px)就行. 移动端适配的具体步骤 第一步:安装插件 lib-flexible npm i lib-flexible --save-dev 第二步:安装px2rem loader npm install px2rem-loader --save-dev 第三步:在main.js中引入lib-

  • Flexible.js可伸缩布局实现方法详解

    阿里团队开源的一个库.flexible.js,主要是实现在各种不同的移动端界面实现一稿搞定所有的设备兼容自适应问题. 实现方法: 通过JS来调整html的字体大小,而在页面中的制作稿则统一使用rem这个单位来制作.关键代码如下: ;(function(win, lib) { var doc = win.document; var docEl = doc.documentElement; var metaEl = doc.querySelector('meta[name="viewport&quo

  • js中flexible.js实现淘宝弹性布局方案

    本文的内容就是介绍淘宝弹性布局方案lib-flexible实践,分享给大家供大家参考,具体内容如下 1. 页面需求 这是要做的页面效果(不要对设计置评,这不是开发人员决定的): 这是尺寸标注图(750*1334): 然后美工在750*1334的设计稿之上,按我的要求提供以下素材的切图: 包括两个下载按钮的背景图片,logo,底部梯形的渐变背景和body部分的mobile 背景图.注意这些图片都是在750*1334的设计稿里面切出来的,所以尺寸都是设计稿里的原始尺寸,比如android.png:

  • flex弹性布局详解

    目录 初了解 基本概念 属性 容器属性(container) flex 项目属性(item属性) 骰子布局实践 初了解 在学习弹性布局之前首先就要明白其概念flex 就是flexible box的缩写,意为弹性布局,用来为盒装模型提供最大的灵活性任何一个容器都可以指定为flex布局 .box{ display: flex; } 行内元素当然也可以使用flex布局 .box{ display: inline-flex; } Webkit 内核的浏览器,必须加上-webkit前缀. .box{ di

  • Android LayoutInflater加载布局详解及实例代码

    Android  LayoutInflater加载布局详解 对于有一定Android开发经验的同学来说,一定使用过LayoutInflater.inflater()来加载布局文件,但并不一定去深究过它的原理,比如 1.LayoutInflater为什么可以加载layout文件? 2.加载layout文件之后,又是怎么变成供我们使用的View的? 3.我们定义View的时候,如果需要在布局中使用,则必须实现带AttributeSet参数的构造方法,这又是为什么呢? 既然在这篇文章提出来,那说明这三

  • Android  LayoutInflater加载布局详解及实例代码

    Android  LayoutInflater加载布局详解 对于有一定Android开发经验的同学来说,一定使用过LayoutInflater.inflater()来加载布局文件,但并不一定去深究过它的原理,比如 1.LayoutInflater为什么可以加载layout文件? 2.加载layout文件之后,又是怎么变成供我们使用的View的? 3.我们定义View的时候,如果需要在布局中使用,则必须实现带AttributeSet参数的构造方法,这又是为什么呢? 既然在这篇文章提出来,那说明这三

  • flex(弹性布局)教程之常用布局

    目录 一.Flex 布局是什么? 任何一个容器都可以指定为 Flex 布局. 行内元素也可以使用 Flex 布局. Webkit 内核的浏览器,必须加上-webkit前缀. 二.常用布局 公共样式: 垂直居中 子元素左右分布 水平垂直居中 水平垂直居中 图标在上文字在下 子元素平分父元素,且自适应等高 子元素平分父元素,两边对齐中间自适应相同宽度间隔,且自动换行 三栏布局,两边固定宽中间自适应 2009年,W3C 提出了一种新的方案----Flex 布局,可以简便.完整.响应式地实现各种页面布局

  • tomcat 集群监控与弹性伸缩详解

    目录 如何给 tomcat 配置合适的线程池 如何监控 tomcat 线程池的工作情况 tomcat 线程池扩缩容 tomcat 是如何避免原生线程池的缺陷的 如何给 tomcat 配置合适的线程池 任务分为 CPU 密集型和 IO 密集型 对于 CPU 密集型的应用来说,需要大量 CPU 计算速度很快,线程池如果过多,则保存和切换上下文开销过高反而会影响性能,可以适当将线程数量调小一些 对于 IO 密集型应用来说常见于普通的业务系统,比如会去查询 mysql.redis 等然后在内存中做简单的

  • 创建Go工程化项目布局详解

    目录 正文 /cmd /internal /pkg /docs,/example,/pkg,/third_parth,/tools 基础库项目布局 kit包应该具备的特点 应用程序项目布局 /api /configs /test 不应该包含/src目录 /internal /biz /data /service 布局示意图 数据流向 正文 如果你尝试学习Go,或者你正在为自己建立一个Poc或者一个玩具项目,这个项目布局是没有啥必要的,从一些简单的事情开始(一个main文件绰绰有余).当有更多的人

  • umi插件开发仿dumi项目实现页面布局详解

    目录 实现思路 使用默认项目提供的layout文件 自定义主题 准备工作 主题插件功能 modifyAppData 插件代码 生成layout路由对象 使用同步伪代码来描述上面流程 运行检查 实现思路 上一章我们已经完成/docs目录下文件自动生路由功能,本章我们将在此基础上,实现自动生成页面导航的功能. 使用默认模板提供的layout展示路由切换 使用自定义主题插件 使用默认项目提供的layout文件 在我们创建默认umi项目后,会在/src/layouts下生成一个布局文件: 同时在上一章节

  • 微信小程序 Flex布局详解

    微信小程序页面布局方式采用的是Flex布局. Flex布局,是W3c在2009年提出的一种新的方案,可以简便,完整,响应式的实现各种页面布局. Flex布局提供了元素在容器中的对齐,方向以及顺序,甚至他们可以是动态的或者不确定的大小的. Flex布局的主要特征是能够调整其子元素在不同的屏幕大小中能够用最适合的方法填充合适的空间. flex布局 Flex布局的特点: 任意方向的伸缩,向左,向右,向下,向上 在样式层可以调换和重排顺序 主轴和侧轴方便配置 子元素的空间拉伸和填充 沿着容器对齐 微信小

  • bootstrap的常用组件和栅格式布局详解

    Bootstrap 是最受欢迎的 HTML.CSS 和 JS 框架,用于开发响应式布局.移动设备优先的 WEB 项目. 因为Bootstrap需要jquery的支持,所以在使用Bootstrap之前要先把jquery插件导入,并且要把bootstrap.js文件放在jquery.js之后改动方可生效. Bootstrap中有许多好用的组件,只要以规定的class等命名就可以轻松使用这些插件.例如: 导航条: <nav class="navbar navbar-default"&g

  • Flex Data Binding详解

    Data BindIng 什么时候发生: 1.在绑定源属性值发生改变时发生. 2.在绑定源发出initialize事件时绑定发生一次. 让属性具有可绑定功能: 一般的,只要在属性前加上 [Bindable] 或 [Bindable(event="eventname")] 元标记即可 注意: 如果没有标出触发绑定的事件,正如[Bindable],Flex会自动为绑定加上propertyChange事件,当源数据发生变化时,Flex将自动派发该事件,触发数据绑定.如果修改后数据和源数据&q

随机推荐