flex布局中flex-basis|flex-grow|flex-shrink

整个才是正确的算法

flex-basis(基准值)

可以设置flex布局中容器的宽度,如果同时存在width属性,将把它给覆盖!

它也是计算flex-grow和flex-shrink的基准值,默认值是auto;

flex-grow(扩展比例)

当flex-item的总宽度小于容器时,flex-grow设置为0(默认值),那么他将不安比例来均分剩余的空间;

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<style type="text/css">
.flex-container{
width:400px;
background:red;
display:flex;
/*
总的空间空间长度400px
flex-item:100+100=200
child1分得的空间:=(1/3)*200=66.7
child1最终的宽度:=flex-basis+66.7=166.666666666(近似值) 同理可以计算 child2的值:
*/
}
.flex-item:nth-child(1){
flex-basis:100px;/*flex-basis将覆盖width的属性值滴呀*/
background:black;
width:200px;
flex-grow:1;
}
.flex-item:nth-child(2){
flex-basis:100px;
background:green;
flex-grow:2;
}
</style>
</head> <body>
<div class="flex-container">
<div class="flex-item">1</div>
<div class="flex-item">2</div>
</div>
</body>
</html>

效果:

flex-shrink(收缩比例)

默认值为1;(ps:收缩比例的算法和扩展算法是不一样的呢!)

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<style type="text/css">
.flex-container{
width:400px;
background:red;
display:flex;
border:1px solid red;
/*
超出的空间:400-(400+200)=-200;
child要减去的空间:(1/3)*200=66.66
最总的空间值:400-66.6=333.4(这种算法是错误滴呀) 正确的算法:
超出空间:400-(400+200)=-200;
加权总和:400*1+200*2=800;
child1被移除的比例:400*1/800*200=100
child1的最终宽度:400-100=300 同理可以求child2 */
}
.flex-item:nth-child(1){
flex-basis:400px;/*flex-basis将覆盖width的属性值滴呀*/
background:black;
flex-shrink:1;
}
.flex-item:nth-child(2){
flex-basis:200px;
background:green;
flex-shrink:2;
}
</style>
</head> <body>
<div class="flex-container">
<div class="flex-item">1</div>
<div class="flex-item">2</div>
</div>
</body>
</html>

收缩前后对比:

flex:flex-grow | flex-shrink  | flex-basis

默认值:0 1 auto;

无论flex-item被填充的多款,只要我们设置

.flex-item:nth-child(1){flex:1}

.flex-item:nth-child(2){flex:2}

.flex-item:nth-child(1){flex:1}

它是将整个容器分成:1:2:1了,

如果我们这样设置:

.flex-item{flex:1},空间将均分,是整个容器空间,而不是多余的空间;

如果你加上了flex-basis,那么计算就更为复杂!

flex布局中flex-basis|flex-grow|flex-shrink的更多相关文章

  1. flex布局中flex-grow与flex-shrink的计算方式

    CSS 中的 Flex(弹性布局) 可以很灵活的控制网页的布局,其中决定 Flex 布局内项目宽度/高度的是三个属性: flex-basis, flex-grow, flex-shrink. flex ...

  2. svg矢量图在flex布局中样式扭曲的问题

    问题机型 小米5 华为nova 其他未知的可能机型 问题描述 利用flex 布局的一行中, 左一样式: -webkit-box-flex: 0; flex: 0 1 auto; 左二样式: -webk ...

  3. flex布局中transform出错

    在flex布局下,若应用transform 的动画的子元素没有使用进行定位,则动画过程中,子元素将相对display:flex的元素进行static定位 动画结束后位置正常: 修复代码只需要posit ...

  4. 关于flex布局中的兼容性问题

    这几天在做项目中用到了flex布局,但是在测试的过程中发现他的兼容性实在是太差了,仅仅用到水平和垂直居中的样式,没想到兼容性代码就写了好几行. display:flex; display:-webki ...

  5. CSS 弹性盒子 flex的三个属性:grow、shrink、basis

    flex-grow 首先介绍flex-grow属性,flex-grow会在容器太大时(图片A.B的宽度和 < 父容器宽度)对元素作出调整. 如果图片A的flex-grow属性的值为 1,图片B的 ...

  6. flex布局中flex属性运用在随机发红包的算法上

    flex布局是现在前端基本上都会运用的一种布局,基本上用到比较多的是父元素设置display:flex,两个子元素,一个设置固定宽度,另一个设置为flex:1(这里都指flex-direction为r ...

  7. flex布局中父容器属性部分演示效果

    如图可见flex的属性分为父容器和子容器的属性共12个.关于这些属性具体代表什么意思,网上有很多教程的文章,自觉不能写得比别人更好,所以这里主要写了一些例子关于父容器属性效果的演示,希望可以帮助大家理 ...

  8. 微信小程序-flex布局中align-items和align-self区别

    首先看看菜鸟教程中关于align-items和align-self的定义 align-items:align-items 属性定义flex子项在flex容器的当前行的侧轴(纵轴)方向上的对齐方式.(对 ...

  9. flex布局中flex-shrink的计算规则

    下面代码来自MDN html部分: <p>the width of content is 500px, flex-basic of flex item is 120px.</p> ...

随机推荐

  1. sum()over()和count()over()分析函数

    创建测试表 ),sales ),dest ),dept ),revenue number); 插入测试数据 ); ); ); ); ); ); ); commit; 查看表记录 SQL> sel ...

  2. 用MyEclipse搭建SSH框架(Struts2 Spring Hibernate)

    1.new一个web project. 2.右键项目,为项目添加Struts支持. 点击Finish.src目录下多了struts.xml配置文件. 3.使用MyEclipse DataBase Ex ...

  3. 针对特定浏览器起作用的CSS: IE Chrome Firefox CSS Hack

    Firefox的CSSHack 只在Firefox上应用的CSS Hack,虽然这种情况非常少,但有时也会碰到: @-moz-document url-prefix() { .cssSelector ...

  4. OpenCV2.4.10 Mac Qt Configuration

    Download OpenCV 2.4.10 Download CMake 2.8 Open CMake and choose the source code directory and build ...

  5. NBUT 1010 魔法少女(DP)

    [1010] 魔法少女 时间限制: 1000 ms 内存限制: 65535 K 问题描述 前些时间虚渊玄的巨献小圆着实火了一把. 在黑长直(小炎)往上爬楼去对抗魔女之夜时,她遇到了一个问题想请你帮忙. ...

  6. 使用HIBERNATE的SQL查询并将结果集自动转换成POJO

    在某些场合下,我们可能想使用HIBERNATE的框架提供的SQL查询接口,但是,由于实体没有做映射,HIBERNATE不能把结果集转换成你想要的List<POJO>,本文讨论如何在这种情况 ...

  7. Ubuntu安装Flash

    第一步:打开视频网站,随意点击一个视频,会提示需要先安装Flash,点击它所提供的链接. 第二步:根据系统选择合适的版本进行下载,有红帽的yum版本,我选择的是tar.gz for other Lin ...

  8. PHP 错误与异常 笔记与总结(6)将错误日志保存在系统日志中

    [将错误记录到系统日志中] 在 php.ini 中将 error_log 设置为: error_log = syslog 或者在运行时使用 ini_set() 函数设置. [例1] <?php ...

  9. PHP 设计模式 笔记与总结(11)观察者模式

    [观察者模式(Observer)]当一个对象状态发生改变时,依赖它的对象全部会收到通知,并自动更新 [场景]一个事件发生后,要执行一连串更新操作.传统的编程方式,就是在事件的代码之后直接加入处理逻辑. ...

  10. mysql null值的特殊处理

    实例 尝试以下实例: root@host# mysql -u root -p password; Enter password:******* mysql> use RUNOOB; Databa ...