flex布局之flex-grow和flex-shrink如何计算
此文已由作者张含会授权网易云社区发布。
欢迎访问网易云社区,了解更多网易技术产品运营经验。
关于盒模型布局
如何实现两栏布局?
(表格)
流式,
浮动,
定位
如何选择?
流式 > 浮动 > 定位
弹性盒模型FlexBox
容器和项目 .box .item
设置容器flex布局
.box{ display: flex;
}// 行内元素
.box{ display: inline-flex; }
容器属性
flex-direction 容器内项目的排列方向(常用)
.box { flex-direction: row | row-reverse | column | column-reverse; }
flex-wrap 容器内项目换行方式
.box{ flex-wrap: nowrap | wrap | wrap-reverse; }
注意:有些浏览器不支持flex-flow 是flex-direction和flex-wrap的简写属性
justify-content 容器内项目的水平对其方式 (常用)
.box {
justify-content: flex-start | flex-end | center | space-between | space-around;
}
align-items 容器内项目的垂直对齐方式(常用)
.box { align-items: stretch | flex-start | flex-end | center | baseline ; }
align-content 容器内项目的垂直对齐方式,多行生效,单行不生效
.box {
align-content: stretch | flex-start | flex-end | center | space-between | space-around ;
}
所以需要记住: flex-direction,justify-content,align-items
项目属性
order 排列顺序,越小越靠前,默认为0,可以为负数
.item{ order: <integer>; }
flex-grow 扩张比例,默认为0
.item{ flex-grow: <number>; }
flex-shrink 收缩比例,默认为1
.item{ flex-shrink: <number>; }
flex-basis 分配多余空间前占据的空间
.item { flex-basis: auto | <length>; /* default auto */
}flex 是 flex-grow,flex-shrink,flex-basis 的简写
.item { flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ] } .item{ flex: 1; }
align-self 项目的对齐方式,覆盖容器align-items的值
.item { align-self: auto | flex-start | flex-end | center | baseline | stretch; }
项目属性要记住flex
flex-grow 和 flex-shrink如何计算?
flex-grow
对于剩余空间,按照一定的比例分配到项目,以下例子的分配过程如下:
先计算剩余空间1000-200-400-200=200
剩余空间被分成4份,item1占2/4,item2占1/4,item3占1/4
item1共占200+200x2/4=300,item2共占400+200x1/4=450,item3共占200+200x1/4=250
<div class="box">
<div class="item">100</div>
<div class="item">200</div>
<div class="item">300</div>
</div> .box {
display: flex;
width: 1000px;
height: 300px;
}
.item{
height: 50px;
}
.item:first-child{
flex: 200px 2 1;
}
.item:nth-child(2){
flex: 400px 1 2;
}
.item:nth-child(3){
flex: 200px 1 1;
}
flex-shrink
对于溢出空间,按照一定的比例收缩到项目,以下例子的分配过程如下:
计算溢出空间200+400+200-400=400
注意flex-shrink是收缩比例, 是基于项目宽度的,加入item1的宽度需要收缩n的比例能满足条件,根据设置item2应该收缩2n,item2的收缩比例是n,200xn+400x2n+200xn=400,所以n=1/3(0.33)
item1所占的宽度为200x(1-0.33)=133.33,item2所占宽度为400x(1-2x0.33)=133.33,item3所占空间为200x(1-0.33)=133.33
注意:
如果设置item1的收缩比是1,item2的收缩比是100,item3的收缩比是1,根据公式计算收缩比例是1/1001,item2所占空间为400x(1-100x(1/1001)),约等于0,很明显,如果是0,项目内容是没办法显示的,所以项目的空间不会全部收缩,肯定会预留下项目内容所需要的最小空间,这时候的计算方式会发生变化,假设item2内容所占最小空间为20,所以item2只能收缩掉400-20=380,剩余20按比例收缩在item1和item3。
<div class="box">
<div class="item">100</div>
<div class="item">200</div>
<div class="item">300</div>
</div>
.box { display: flex; width: 400px; height: 300px;
box-sizing: border-box; background: #0f0;
justify-content: space-around;
}
.item{
box-sizing: border-box; height: 50px;
background: #f00; color: #fff;
line-height: 50px;
}
.item:first-child{ flex: 200px 1 1;
}
.item:nth-child(2){ flex: 400px 1 2;
}
.item:nth-child(3){ flex: 200px 1 1;
}
更多网易技术、产品、运营经验分享请点击。
相关文章:
【推荐】 JVM运行内存分配和回收
【推荐】 Kylin存储和查询的分片问题
flex布局之flex-grow和flex-shrink如何计算的更多相关文章
- flex布局全解析
前言 很长一段时间, 我知道有flex这个布局方式, 但是始终没有去学它. 3点原因: 感觉还比较新, 担心兼容性不好. 普通的布局方式能满足我的绝大多数需求. 好像蛮复杂的. 最近由于开发需要, 学 ...
- Flex 布局知识点梳理
传统的布局方案,在针对特殊布局时会很不方便,比如垂直居中,把一个容器等分为N列等等.自从 Flex 出现以后,这些都迎刃而解了,本文对Flex相关内容做一个简单梳理. 什么是 Flex Flex 是 ...
- CSS之Flex 布局
Flex 布局教程:语法篇 网页布局(layout)是 CSS 的一个重点应用. 布局的传统解决方案,基于盒状模型,依赖 display 属性 + position属性 + float属性.它对于那些 ...
- 前端flex布局学习笔记
flex布局,即为弹性布局,其为盒模型提供最大的灵活性,任何一个容器都可以指定为flex布局. eg:.box{ display:flex: } 行内元素也可以使用flex布局. 注意:设置flex布 ...
- css3弹性伸缩布局(一)—————flex布局
CSS3弹性伸缩布局简介 2009年,W3C提出了一种崭新的方案—-Flex布局(即弹性伸缩布局),它可以简便.完整.响应式地实现各种页面布局,包括一直让人很头疼的垂直水平居中也变得很简单地就迎刃而解 ...
- Flex布局在小程序的使用
一篇旧文,上手小程序时做的一些探索 Flex布局是一种十分灵活方便的布局方式,目前主流的现代浏览器基本都实现了对Flex布局的完全支持.而在微信小程序中,IOS端使用的渲染引擎WKWebView和安卓 ...
- Flex 布局教程:语法篇
作者: 阮一峰 网页布局(layout)是CSS的一个重点应用. 布局的传统解决方案,基于盒状模型,依赖 display属性 + position属性 + float属性.它对于那些特殊布局非常不方便 ...
- 在移动端中的flex布局
flex布局介绍: flex布局很灵活, 这种布局我们也可以称之为弹性布局, 弹性布局的主要优势就是元素的宽或者高会自动补全; flex布局实例: 比如有两个div,一个div的宽度为100px, ...
- 【转】Flex 布局语法教程
网页布局(layout)是CSS的一个重点应用. 布局的传统解决方案,基于盒状模型,依赖 display属性 + position属性 + float属性.它对于那些特殊布局非常不方便,比如,垂直居中 ...
- flex布局
一,啥是flex? 1.Flex是Flexible Box的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性.任何一个容器都可以指定为Flex布局. .box{ displa ...
随机推荐
- javascript Boolean
Boolean 对象表示两个值:true 或 false 创建Boolean对象的语法 new Boolean(value) //构造函数 Boolean(value; //转换函数 参数 参数va ...
- ArcGIS API for JavaScript开发初探——HelloMap
1.前言 在开始ArcGIS API for JavaScript开发之前我们需要了解一些基本的知识: 1.开发工具选什么? 前端技术的开发工具选择是一个仁者见仁智者见智的问题,有人喜欢Hbuilde ...
- [Java]在xp系统下java调用wmic命令获取窗口返回信息无反应(阻塞)的解决方案
背景:本人写了一段java代码,调用cmd命令“wmic ...”来获取系统cpu.mem.handle等资源信息.在win7操作系统下运行没有问题,在xp系统下却发现读取窗口反馈信息时无反应(阻塞) ...
- Hyper-V 2016 配置管理系列(准备篇)
2.1 推荐软硬件配置 2.2 Hyper主机前提准备 前提条件: 具有二级地址转换(SLAT)的64位处理器.要安装Hyper-V虚拟化组件(如Windows管理程序),处理器必须具有SLAT 足够 ...
- hive 报错FAILED: Error in metadata: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.metastore.HiveMetaStoreClient FAILED: Execu
使用hive一段时间以后,今天在使用的时候突然报错,如下: hive> show databases;FAILED: Error in metadata: java.lang.RuntimeEx ...
- yii:高级应用程序搭建数据库的详细流程
上一章已经把高级应用程序的环境搭配成功,那么下一步就是搭建数据库了. 首先,我们先去创建一个数据库,比如:demo 创建完之后,我们重要的就是将文件中的数据进行一个更新,在www/advancend/ ...
- go语言,安装包fetch error 问题解决方案
最近需要安装grequests,出现了下面的error [fdf@zxmrlc ~]$ go get github.com/levigross/grequests package golang.org ...
- 设置和重置ssh key
查看本地是否有已经生成好的ssh key $ cat ~/.ssh/id_rsa.pub 若有,先删除: $ cd ~ $ rm -rf .ssh 重新生成ssh key ssh-keygen -t ...
- fifo - 先进先出的特殊文件, 又名管道
描述 (DESCRIPTION) 一个 FIFO 特殊 文件 (又名 管道) 同 管道线 相似, 但是 它是 作为 文件 系统 的一部分 访问的. 可以 有 多个 进程 打开它 以供 读写. 当 进程 ...
- 高级vim 配置
[root@chenbj ~]# pwd /root [root@chenbj ~]# cat .vimrc set nocompatible set pastetoggle=<F9> s ...