css flex 之 flex-grow | flex-direction

面试造火箭
• 阅读 2886

flex是CSS的一个特性,通过它可以让在某一个区域内的多个元素灵活的布局,对移动端的布局特别有用。
跟flex相关的css属性不止一个,而是很多个,而且有些还很复杂。所以,我们就一个一个的来。

1: display: flex
要运用flex属性,首先得在你想让其子元素布局的container上面运用这个属性。
2: flex-grow: 1| 2|...Number
flex-grow只接受数字的值,且不接受负数。它用在想被布局的元素上面,它表示子元素被分配到的空间,准确地说是比例。来看一段代码。

//html
<div class="container">
    <div class="item short">1</div>
    <div class="item short">2</div>
    <div class="item long">3</div>
    <div class="item short">4</div>
</div>

//css
.container {
    display: flex;
}

.item {
    flex-grow: 2;
    background: yellow;
    border: 1px solid;
}
.short {
    flex-grow: 1;
    background: pink;
}

效果:
css flex  之 flex-grow | flex-direction

在以上的例子中,我们总共有4个div,其中三个的flex-grow为1,有一个的flex-grow为2.其实我们整个container的宽就被平均分为了的5份,其中第三个div占了2/5, 其余三个占了1/5.

3: flex-direction
flex-direction从名字上就能知道,它是跟方向有关的属性。它用在container上面,决定它的子元素按照什么方向来排列,它接受4个值:

1: row
2: row-reverse
3: column
4: column-reverse

第一个例子里面,我们是没有给container加flex-direction这个属性的,因为它的默认值是’row‘.接下来我们就给container依次运用这四个值,来直观地感受一下它们的区别:
1: row

.container {
    display: flex;
    flex-direction: row;
}

结果:子元素按照在HTML里面出现的顺序,在水平方向上依次排列
css flex  之 flex-grow | flex-direction

2: row-reverse

.container {
    display: flex;
    flex-direction: row-reverse;
}

结果: 子元素按照在html里面出现的顺序反过来,水平方向上排列
css flex  之 flex-grow | flex-direction

3: column

.container {
    display: flex;
    flex-direction: column;
    height: 200px;
}

效果: 子元素根据在HTML里面出现的顺序,垂直地排列,按照flex-grow的值,分割container的高
css flex  之 flex-grow | flex-direction

4: column-reverse

.container {
    display: flex;
    flex-direction: column-reverse;
    height: 200px;
}

效果: 子元素根据在HTML里面出现的顺序反过来,垂直地排列,按照flex-grow的值,分割container的高
css flex  之 flex-grow | flex-direction

现在来讨论一些极端情况:
1:

flex container设置一个固定高度, 
flex container {flex-direction: column;}
flex items设置一个高度

这种情况的表现是,item会垂直排列,单所有item的高度之和小于container的高度时,item高度为设置的高度,该多高就多高;
但是,如果在数值计算后,所有item的高度之和超过了container的高度,这时候container的高度会被item分完,在垂直方向上被item填满;item之间的高度比例和自己设置的高度比例一致,就和使用了flex-grow的效果一样。
2:

flex container设置一个固定高度, 
flex container {flex-direction: column;}
flex items不设置高度

这个时候,item就根据它的内容把自己撑开,该多高就多高
3:

flex container不设置height, 
flex container {flex-direction: column;}
flex items设置一个px高度或者不设置高度

item会垂直排列,高度由自己内容决定,container的高就是item的高之和
4:

flex container设置一个固定高度, 
flex container {flex-direction: column;}
flex item {flex-grow: 1|2|n};

item垂直排列,所有的item均分container的高度

点赞
收藏
评论区
推荐文章
Alex799 Alex799
4年前
Vue进阶(幺柒幺):前端用户体验提升(五)Flex实现弹性布局
需求背景在实现组件拖拽设计过程中,发现组件样式中设置了display:flex属性信息,导致组件生成后无法实现拖拽效果,网上查阅资料后发现Flex布局大有天地。Flex来源
徐小夕 徐小夕
4年前
巧用css圆角实现有点意思的加载动画
作为一名前端工程师,需要对css技巧有充分的研究和了解,接下来笔者将会带大家一起掌握如何用css的圆角属性来实现有点意思的加载动画.如果想学习更多css实用技巧,可以参考笔者以下的文章:<divstyle"display:flex;flexwrap:wrap;alignitems:center;"<ahref"https:/
菜园前端 菜园前端
2年前
想学会flex布局,我强烈推荐你来看看这篇文章!!
原文链接:为什么要使用flex布局?flex布局是目前比较流行的一种布局,因为它十分简单灵活,区区简单几行代码就可以实现各种页面的的布局,以前我在学习页面布局的时候我深受其float、display、position这些属性的困扰。使用flex属性就可以写
浩浩 浩浩
4年前
【Flutter实战】线性布局(Row、Column)
4.2线性布局(Row和Column)所谓线性布局,即指沿水平或垂直方向排布子组件。Flutter中通过Row和Column来实现线性布局,类似于Android中的LinearLayout控件。Row和Column都继承自Flex,我们将在弹性布局一节中详细介绍Flex。主轴和纵轴对于线性布局,有主轴和纵轴之分,如果
Wesley13 Wesley13
3年前
CSS基本语法及页面引用
css基本语法及页面引用(1)css基本语法css的定义方法是:选择器{属性:值;属性:值;属性:值;}选择器是将样式和页面元素关联起来的名称,属性是希望设置的样式属性每个属性有一个或多个值。代码示例:/css注释ctrlshift"/"/d
Wesley13 Wesley13
3年前
使用伸缩盒布局创建一个三列布局每一列占用`col
\使用伸缩盒布局创建一个三列布局每一列占用\col{n}\/12份基于父级容器的宽度\Answer设置\.row\类的父级容器为\display:flex;\样式然后使用\flex\缩写形式属性给每一列子元素设置一个\flexgrow\值使得每一列可以按照设置的比例自动协调宽度
Stella981 Stella981
3年前
Grid布局和Flex布局
Flex布局(弹性布局)Flex是弹性布局,用来为盒状模型提供最大的灵活性,任何一个容器都可以指定为Flex布局。行内元素也可以使用Flex布局。采用Flex布局的元素,称为Flex容器。flexitem项目是Flex布局的元素,简称项目。容器:水平的主轴(mainaxis)和垂直的交叉轴(crossaxis),单个项目占据的主轴空间叫做m
Stella981 Stella981
3年前
CSS 定位 (Positioning) 实例
CSS定位和浮动CSS为定位和浮动提供了一些属性,利用这些属性,可以建立列式布局,将布局的一部分与另一部分重叠,还可以完成多年来通常需要使用多个表格才能完成的任务。定位的基本思想很简单,它允许你定义元素框相对于其正常位置应该出现的位置,或者相对于父元素、另一个元素甚至浏览器窗口本身的位置。显然,这个功能非常强大,也很让人吃惊。要知道,用户代理对
达里尔 达里尔
1年前
Flex布局:flex-grow:1失效
工作中遇到一些flexgrow:1的容器失效,一堆文字乱码溢出,最后看了一下flex布局的原理解决了cssdivflexgrow:1;wisth:0;如果遇到另一边的div设了宽但是被flexgrow:1的内容挤压了,可以给设了宽的div加flexshri
京东云开发者 京东云开发者
10个月前
鸿蒙跨端实践-布局方案介绍
作者:京东科技刘宁一、前言动态化使用jue语言(开发风格与Vue一致)开发,对于视图的布局采用了标准的Flex布局方式。对于列表类视图,动态化提供了、、、等标签,将子视图的布局管理封装到标签中实现,业务只需要针对标签简单地设置相关属性,即可实现列表类布局,
面试造火箭
面试造火箭
Lv1
敬自己一杯酒,祝来年更顺。
文章
3
粉丝
0
获赞
0