flex布局

flex布局

开启flex功能

<html>
    <head>
        <style>
            .container{
                border: 1px solid #000;
                width: 400px;
                height: 400px;
                margin-left: 20px;
                margin-top: 20px;
                display: flex; // 开启flex布局
            }
            .item{
                width: 100px;
                height: 100px;
                color: #fff;
                text-align: center;
                line-height: 100px;
                font-size: 50px;
            }
            .item:nth-of-type(1){
                background-color: #f00;
            }
            .item:nth-of-type(2){
                background-color: #0f0;
            }
            .item:nth-of-type(3){
                background-color: #00f;
            }
        </style>
    </head>
    <body>
        <div class="container">
            <div class="item">1</div>
            <div class="item">2</div>
            <div class="item">3</div>
        </div>
    </body>
</html>

开启前
开启前

开启后
开启后

属性介绍

flex-direction

flex items 默认都是沿着main axis(主轴)从main start 到main end 方向排布
flex-direction决定了main axis的方向,有4个取值
row(默认值),row-reverse,column,column-reverse
flex-direction_value

justify-content

justify-content决定了flex item在主轴上的对齐方式
flex_justify-content

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

align-items

align-items决定了flex items在cross axis上的对齐方式
flex_align-items

  • stretch(默认值):当flex items在cross axis方向的size为auto时,会自动拉伸至填充flex container
  • flex-start:与cross start 对齐
  • flex-end:与cross end 对齐
  • center:在cross axis 方向上居中对齐
  • baseline:与基准线对齐

flex-wrap

flex-wrap 决定了 flex container 是单行还是多行

  • nowrap(默认):单行
  • wrap:多行(如果size不够,子item size会被压缩)
  • wrap-reverse:多行(对比wrap,cross start与cross end相反)

flex-flow

flex-flow是flex-direction || flex-wrap的缩写
比如:

flex-flow:column wrap  等价于
- flex-direction:column
- flex-wrap:wrap
flex-flow:row-reverse  等价于
- flex-direction:row-reverse
- flex-wrap:nowrap
flex-flow:wrap  等价于
- flex-direction:row
- flex-wrap:wrap

align-content

align-content决定了多行flex items在cross axis上的对齐方式,用法与justify-content类似
flex_align-content

  • stretch(默认值):与align-items的stretch类似
  • flex-start:与cross start 对齐
  • flex-end:与cross end 对齐
  • 其他属性同justify-content

order

order决定了flex items的排布顺序

  • 可以设置任意整数(正整数,负整数,0),值越小就越排在前面
  • 默认值是0

align-self

  • flex items 可以通过 align-self 覆盖 flex container设置的align-items
  • auto(默认值):遵从flex container的align-items设置
  • 其他属性值及效果和align-items一致

flex-grow

flex-grow决定了flex items如何扩展

  • 可以设置任意非负数(正整数,正小数,0)默认值是0
  • 当flex container在main axis方向上有剩余size时,flex-grow属性才会有效
  • 如果所有的flex items的flex-grow总和sum超过1,每个flex item扩展的size为 flex container的剩余size * flex-grow / sum
<style>
	.container{
            ...
            width: 400px;
            display: flex;
        }
        .item{
			...
            flex-grow: 1;
        }
        /*
            间隙大小 400 - 100 * 3 = 100
            当 flex-grow 之和大于1
            每个item扩展的宽度 100 * 1/3 = 33.3
        */
</style>

大于1-flex-grow

  • 如果所有的flex items的flex-grow总和sum不超过1,每个flex item扩展的size为 flex container的剩余size * flex-grow
<style>
	.container{
            ...
            width: 400px;
            display: flex;
        }
        .item{
			...
            flex-grow: 0.1;
        }
        /*
            间隙大小 400 - 100 * 3 = 100
            当 flex-grow 之和小于1
            每个item扩展的宽度 100 * (0.1 * 3) * 1/3 = 10
            最终还剩余70的间隙
        */
</style>

小于1-flex-grow

flex-shrink

flex-grow决定了flex items如何收缩

  • 可以设置任意非负数(正整数,正小数,0)默认值是1
  • 当flex items在main axis方向上超过flex container的size,flex-shrink属性才会有效
  • 每个flex item 收缩的size为 flex items 超出 flex container的size * 收缩比例/所有flex items的收缩比例之和
  • 收缩比例 = flex-shrink * flex item的base size(base size是flex item 放入 flex container之前的size)
  • flex items 收缩后的最终size不能小于min-width\min-height
  • flex-shrink之和大于1
<style>
	.container{
            ...
            width: 400px;
            display: flex;
        }
        .item{
			...
			width: 200px;
            flex-shrink: 1;
        }
        /*
            超出 200 * 3 - 400 = 200
            当 flex-shrink 之和大于1
            每个item缩小的宽度 
            200 * (1 * 100)/(1 * 100 * 3) = 66.6
        */
</style>

flex_flex_shrink_up_1

  • flex-shrink之和小于1
<style>
	.container{
            ...
            width: 400px;
            display: flex;
        }
        .item{
			...
			width: 200px;
            flex-shrink: 0.1;
        }
        /*
            超出 200 * 3 - 400 = 200
            当 flex-shrink 之和小于1
            每个item缩小的宽度 
            200 * (0.1 * 3) * (0.1 * 100)/(0.1 * 100 * 3) = 20
            超出的距离 200 - 20 * 3 = 140
        */
</style>

flex_flex_shrink_below_1

flex-basis

flex-basis 用来设置flex items在main axis方向上的base size

  • auto(默认值),content:取决于内容本身的size
  • 决定 flex items 最终base size的因素,从优先级高到低:
    max-width\max-height\min-width\min-height->flex-basis->width\height->内容本身的size

flex

flex 是 flex-grow flex-shrink || flex-basis 的缩写

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值