学习 Flex 布局
Flex 是 CSS3 推出的一种布局方式,到现在为止已经有超过十年时间了,所有现代浏览器都已经支持了,详细参考CanIUse
给一个元素的 display
属性设置为 flex
就可以给这个元素开启 Flex 布局,其内部的子元素将会受到影响
.box {
display: flex;
}
给这个容器内添加几个元素就可以看到效果
<div class="box">
<div class="item-1">1</div>
<div class="item-2">2</div>
<div class="item-3">3</div>
</div>
可以看到的是默认情况下应该独占一行的 <div>
元素现在全部挤在了一行,这就是 flex 的效果,display
的值除了 flex
还有一个 inline-flex
,两者的区别就像 block
和 inline-block
类似
flex-direction
在平面上布局有 4 个方向,由 flex-direction
属性指定
.box {
flex-direction: row | column | row-reverse | column-reverse;
}
一旦布局方向确定后,则该方向将成为 flex 的主轴,和主轴垂直的一个方向称为交叉轴,图中箭头是用来表示主轴方向的
flex-direction: row
flex-direction: column
flex-direction: row-reverse
flex-direction: column-reverse
justify-content
元素在轴线上有 3 种普通对齐方式,其中 justify-content
属性定义元素在主轴上的位置,align-items
和 align-content
属性定义元素在交叉轴上的位置,值分别有起点,居中和终点
.box {
align-content: flex-start | flex-end | center;
align-items: flex-start | center | flex-end;
justify-content: flex-start | center | flex-end;
}
align-items: flex-start|center|flex-end
align-content: flex-start|flex-end|center
还有 3 种在轴线上均匀分布的方式,由 justify-content
定义在主轴上的分布方式,align-content
定义在交叉轴上的分布方式
.box {
align-content: space-between | space-evenly | space-around;
justify-content: space-between | space-evenly | space-around;
}
align-content: space-between|space-evenly|space-around
align-items
不同于主轴,元素在交叉轴上默认是拉伸的
.box {
align-items: stretch;
}
align-items: stretch
另外还有一个特殊对齐方式是 baseline
,这是根据文字的基线对齐,改变每一项文字的大小可以看出效果
align-items: baseline
flex-wrap
当容器无法容纳所有元素的时候,可以通过 flex-wrap
属性设置是否折叠
.box {
flex-wrap: nowrap | wrap | wrap-reverse;
}
flex-wrap: wrap
flex-wrap: wrap-reverse
需要注意的是 wrap-reverse
值会改变交叉轴的方向,下面例子可以说明这一点
align-items: flex-start; flex-wrap: wrap-reverse
前面的属性都是设置在容器上的,接下来的属性都是设置到容器中的元素上的
order
order
可以改变元素的顺序,默认值为 0,按从小到大顺着主轴排列
.item-2 {
order: -1;
}
align-self
单独改变一个元素在交叉轴上的对齐方式,值和 align-items
一致
.item-2 {
align-self: flex-start | center | flex-end;
}
align-self: flex-end
能不能在主轴上单独改变一个元素的对齐方式呢,比如有没有一个 justify-self
属性,浏览器中有是有,但是好像没什么用。
flex
flex
是一个组合属性,由 flex-grow
,flex-shrink
和 flex-basis
组成
.item {
flex: flex-grow | flex-shrink | flex-basis;
}
flex-grow
属性规定分配容器剩余空间的比例,数值越大就越多
.item-1 {
flex: 2;
}
.item-2 {
flex: 1;
}
.item-3 {
flex: 3;
}
全部设置为 1 这样所有元素就会平分容器的空间
.item {
flex: 1;
}
默认值是 0,不占用剩余空间
flex-shrink
属性规定当元素空间不足以容纳这所有元素的时候,每个元素应该如何缩小来腾出足够的空间,数值越大需要缩小越多
.item {
flex: 0 1;
}
默认值是 1
flex-basis
规定这个元素在主轴上占据的空间,默认值是 auto
,表示元素占据的空间由其自身决定,其值可以是各种长度单位
.item {
flex: 0 1 60px;
}
将 flex
属性分开写就像这样
.item {
flex-grow: 0;
flex-shrink: 1;
flex-basis: 60px;
}
实际应用
Flex 可以更方便地使用栅格布局以及响应式布局,比如可以在屏幕宽的时候按行布局,屏幕窄的时候按列布局,只需要简单修改一下 flex-direction
属性即可
垂直居中
万恶的垂直居中在 CSS 的世界里实际实现并不像说出来那么简单,不过那都成为过去了,有了 Flex 之后,这个需求将变得非常容易
.box {
display: flex;
}
.item {
align-self: center;
}
学习 Flex 布局的更多相关文章
- 在微信小程序中学习flex布局
网页布局(layout)是CSS的一个重点应用. 布局的传统解决方案,基于盒状模型,依赖display属性 + position属性 + float属性.它对于那些特殊布局非常不方便,比如,垂直居中就 ...
- 学习flex布局(弹性布局)
Flex是Flexible Box的缩写,意为弹性布局.是W3C早期提出的一个新的布局方案.可以便捷的实现页面布局,目前较高版本的主流浏览器都能兼容,兼容情况如下: Flex在移动端开发上已是主流,比 ...
- CSS flex 布局学习笔记
写在前面 Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性. 任何一个容器都可以指定为 Flex 布局. 采用 Flex 布局的元素 ...
- CSS学习笔记:flex布局
目录 一.Flex布局简介 1. Flex布局的主要作用 2. Flex布局应用场景 二.Flex布局的使用 1. Flex布局的两种相关元素 2. 父项属性 2.1 flex- direction ...
- Flex布局(引用阮一峰大神)
Flex 布局教程:语法篇 http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html Flex 布局教程:实例篇 http://www.ruan ...
- flex布局小记
越来越深刻的感到日事日毕的必要性,很久之前就做了备忘说要深刻学习flex布局,没想到一拖就拖到了这个时候! 一,什么是flex布局: flex布局即flexible box布局,也就是弹性盒模型或者弹 ...
- 玩游戏 学Flex布局
大家好,今天推荐一个学习Flex布局的网页小游戏,非常不错,是国外的牛人开发的,值得一试,重复几次,就会大概了解Flex的属性了! 地址: http://flexboxfroggy.com/#zh-c ...
- display: flex; 布局
废话不多说,供上我学习Flex布局的启蒙文章,一切的答案,尽在这里,仔细阅读,多多回味!保证你有所收获! http://www.ruanyifeng.com/blog/2015/07/flex-gra ...
- 30 分钟学会 Flex 布局
30 分钟学会 Flex 布局 有酒 617 人赞同了该文章 为什么我要写这一篇关于 Flex 布局的教程? 因为它十分简单灵活,区区简单几行代码就可以实现各种页面的的布局,以前我在学习页面布局的 ...
随机推荐
- vue-cli脚手架目录(2.0)
vue-cli脚手架目录一览 最近在学习vue,看的稀里糊涂.今天从头开始,把cli配置的vue项目目录和配置文件搞清楚. 先看看整个项目目录结构: 再看看build文件夹下相关文件及目录: co ...
- SpiningUP 强化学习 中文文档
2020 OpenAI 全面拥抱PyTorch, 全新版强化学习教程已发布. 全网第一个中文译本新鲜出炉:http://studyai.com/course/detail/ba8e572a 个人认为 ...
- windows 下载~安装nginx
nginx 中文文档 http://www.nginx.cn/doc/ 到nginx官网下载安装包http://nginx.org/en/download.html 解压安装包 进入windows的c ...
- 分享几个 PHP 编码的最佳实践
对于初学者而言,可能很难理解为什么某些做法更安全. 但是,以下一些技巧可能超出了 PHP 的范围. 始终使用大括号 让我们看下面的代码: if (isset($condition) && ...
- Asp.net 的DropDownList 控件动态加载
在做连接数据库表,在页面上用DropDownList 下拉框查询某条数据时,因为数据库里的数据,随时都有可能增加或减少,而下拉框关联的某个字段的值并不一定是固定的. 表信息: CREATE TABLE ...
- Openstack计算Nova组件
欢迎来到虚拟机的世界,如果我们将Openstack环境里运行在各个无力节点上的各种服务看座生命体,而不是死的指令集合,那么就是一个虚拟机的世界. Openstack的计算组件,也就是Nova项目实现了 ...
- Apex_1. 解决“违反主键约束性”
1.有创建序列号的可以把序列号调到当前记录ID的最大值+1: 2.进入系统文件system.properties,找到下面代码,把system.id.generator.type的值改为1: #系统默 ...
- Spring 全局异常拦截根据业务返回不同格式数据 自定义异常
1.全局异常拦截:针对所有异常进行拦截 可根据请求自定义返回格式 2.自定义异常类 处理不同业务的异常 接下来开始入手代码: 1).自定义异常类 @ControllerAdvice//添加注解 记得开 ...
- MongoDB操作符之$elemMatch
问题 如果MongoDB 数据库集合中仅存在一条记录 { "_id" : ObjectId("5e6b4ef546b5f44e5c5b276d"), " ...
- MySQL优化之避免索引失效的方法
在上一篇文章中,通过分析执行计划的字段说明,大体说了一下索引优化过程中的一些注意点,那么如何才能避免索引失效呢?本篇文章将来讨论这个问题. 避免索引失效的常见方法 1.对于复合索引的使用,应按照索引建 ...