加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

flex: grow、shrink、basis

发布时间:2023-03-18 14:07:04 所属栏目:教程 来源:
导读:flex 弹性盒子
display:flex 和接下来我们介绍的这个 flex 是有区别的,前者是修改display实现弹性和模型的,而 flex 仅仅是弹性盒模型下 flex-grow、flex-shrink 和 flex-basis三个的缩写属性,用来定义和模型内部
flex 弹性盒子
display:flex 和接下来我们介绍的这个 flex 是有区别的,前者是修改display实现弹性和模型的,而 flex 仅仅是弹性盒模型下 flex-grow、flex-shrink 和 flex-basis三个的缩写属性,用来定义和模型内部的子元素在浏览器重的展示形式。 下面我们主要讲这三个属性。

1. 官方定义
属性用于设置或检索弹性盒模型对象的子元素如何分配空间。
flex 属性是 flex-grow、flex-shrink 和 flex-basis 属性的简写属性。

2. 解释
fl父元素设置成 dispaly:flex 之后子元素的空间分配通过 flex 设置,其特点为弹性,即内部分配空间如果按照比例分配则其不会随着父元尺寸变化而变化。

3. 语法
子元素

{
    flex: flex-grow flex-shrink flex-basis|auto|initial|inherit|none;
}
属性说明

参数名称    参数类型    解释
flex-grow    number    其它子元素的比例关系默认为 0 ,存在剩余空间不扩大
flex-shrink    number    默认为1空间不足时候缩小
flex-basis    | ‘auto’    设定一个长度或者自动填充
4. 兼容性
flex:

IE    Edge    Firefox    Chrome    Safari    Opera    ios    android
–    –    63-74    84-85    –    –    –    –
flex-grow| flex-shrink|flex-basis:

IE    Edge    Firefox    Chrome    Safari    Opera    ios    android
10+    12+    28+    4+    6.1+    12.1+    7+    4.4
5.实例
给一个块级元素添加 flex 属性 ,让其子元素平均分配空间。
<div class="demo">
    <div class="item">1</div>
    <div class="item">2</div>
    <div class="item">3</div>
</div>
.demo{
    display:flex;
    width:px;
    height:x;
    line-height:px;
    border: px solid #ccc;
    border-right: none;
}
div>.item{
    width:px;
    border-right:px solid #ccc;
    text-align: center;
    flex:;
}
块级元素平均分配空间
<!DOCTYPE html>
<html lang="en">
<head>
    <Meta charset="UTF-8">
    <Meta name="viewport" content="width=device-width, initial-scale=1.0">
    <Meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
    .demo{
        display:flex;
        width:px;
        height:x;
        line-height:px;
        border: px solid #ccc;
        border-right: none;
    }
    div>.item{
        width:px;
        border-right:px solid #ccc;
        text-align: center;
        flex:;
    }
    </style>
    <body>
    <div class="demo">
        <div class="item">1</div>
        <div class="item">2</div>
        <div class="item">3</div>
    </div>    
    </body>
</html>
解释:容器 demo 设置了 flex 总宽度为200px,项目 item 设置宽度 100px;如果正常情况下会超出容器,我们通过设置 flex:1 让项目自适应容器,并等分了空间。

给一个块级元素添加 inline-flex 属性,让其变成行内元素,子元素平均分配
.demo{
    display:inline-flex;
    width:px;
    height:x;
    line-height:px;
    border: px solid #ccc;
    border-right: none;
}
div>.item{
    width:px;
    border-right:px solid #ccc;
    text-align: center;
    flex:;
}
内联元素平分空间效果图
<!DOCTYPE html>
<html lang="en">
<head>
    <Meta charset="UTF-8">
    <Meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
    .demo{
    display:inline-flex;
    width:px;
    height:x;
    line-height:px;
    border: px solid #ccc;
    border-right: none;
}
div>.item{
    width:px;
    border-right:px solid #ccc;
    text-align: center;
    flex:;
}
    </style>
</head>
<body>
     <div class="demo">
        <div class="item">1</div>
        <div class="item">2</div>
        <div class="item">3</div>
    </div>
    
</body>
</html>
demo和文字在一行,demo变成内联元素了。

一个左侧100px,右侧自适应的,左右布局
    <div class="demo-2">
        <div class="item-left">1</div>
        <div class="item-right">2</div>
    </div>
.demo-2{
    display:flex;
}
.item-left{
    flex-basis: px;
}
.item-right{
    flex-grow:;
}
左侧100px,右侧自适应的,左右布局效果图
<!DOCTYPE html>
<html lang="en">
<head>
    <Meta charset="UTF-8">
    <Meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
    .demo-2{
    display:flex;
}
.item-left{
    flex-basis: px;
}
.item-right{
    flex-grow:;
}
    </style>
</head>
<body>
    <div class="demo-2">
        <div class="item-left">1</div>
        <div class="item-right">2</div>
    </div>
</body>
</html>
4.一个左侧为100px,右侧最大为600px的左右布局

.demo-2{
    display:flex;
}
.item-left{       
    flex-basis: px;
    background: red;
    flex-shrink:;
}
.item-right{        
    flex-basis: px;
    background: yellow;
}

左右布局
<!DOCTYPE html>
<html lang="en">
<head>
    <Meta charset="UTF-8">
    <Meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .demo-2{
    display:flex;
}
.item-left{       
    flex-basis: px;
    background: red;
    flex-shrink:;
}
.item-right{        
    flex-basis: px;
    background: yellow;
}
    </style>
</head>
<body>
    <div class="demo-2">
        <div class="item-left">
1
        </div>
        <div class="item-right">
2
        </div>
    </div>
</body>
</html>
解释:右侧最大宽度为600,如果小于 600 右侧将随屏幕尺寸缩小。

6. 经验分享
现在的很多前端开发都会接到一些设计稿,要求在各种终端都可以适应,那么用好 flex 是一个关键。 flex:1 是其中最常见的设置,它等价于:

.demo{
    flex-grow:;
    flex-shrink:;
    flex-basis:auto
}
其意思就是剩余空间就扩大,而剩余空间不足就缩小,就像弹簧一样。那么这部分就可以自适应各种屏幕大小了。

7. Tips
flex-basis 和 flex-grow 同时使用时候 flex-basis 不起作用。

flex 的属性 默认是 0 1 auto,它们的顺序是 flex-grow flex-shrink 和 flex-basis 即三不:有剩余空间不扩大、当空间不足时缩小、不限制尺寸。

flex 属性有两个快捷值 即 auto( 1 1 auto)和 none(0 0 auto)。

尽量不要使用缩小,因为它的兼容性不是很好。

(编辑:汽车网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章