uni-app布局之display: flex

最近开始学习uni-app,其中页面布局是很重要的一块,于是我从display开始进行研究。在css的发展过程中display有几十种写法,有兴趣的同学可以参考这篇文章
https://www.cnblogs.com/gongyijie/p/8358836.html
弹性布局flex是目前使用很广泛也很强大的布局方法之一。

以下内容我主要参考了这篇文章,有兴趣的可以去看看
https://www.cnblogs.com/Webzhoushifa/p/9510856.html

这里有我转载了一篇讲解更详细的flex文章
https://www.jianshu.com/p/a5df93c89702

我们主要涉及到以下6个属性

flex-direction 容器内项目的排列方向(默认横向排列)
  • row 横向布局
  • column 竖直布局
justify-content 项目在主轴上的对齐方式
  • flex-start 主轴从开始位置开始排列
  • flex-end 主轴从结束位置开始排列
  • center 主轴居中排列
  • space-between 主轴两头对齐等间距排列
align-items 项目在交叉轴上如何对齐
  • flex-start 交叉轴从开始位置开始排列
  • flex-end 交叉轴从结束位置开始排列
  • center 交叉轴居中排列
  • stretch 交叉轴拉伸铺满
flex-wrap 容器内项目换行方式
  • inherit 继承父试图的换行规则
  • initial 初始的
  • nowrap 不换行(默认)
  • wrap 换行
  • wrap-reverse 换行
flex-flow 是flex-direction和flex-wrap的简写方式
align-content 定义了多根轴线的对齐方式。如果项目只有一根轴线则不起作用
  • flex-start 靠近开始位置排列
  • flex-end 靠近结束位置排列
  • center 居中排列
  • space-around 等间距排列(默认)
  • space-between 两头对齐等间距排列
  • inherit 集成父试图的值
  • initial 初始值
  • stretch 拉伸铺满

一 、flex-direction justify-content align-items配合使用

通过如下几种场景来学习这三个属性的用法。

1、默认的布局
<template>
    <view>
        <view class="content">
            <view class="a">block</view>
            <view class="a">blockblock</view>
            <view class="a">blockblockblock</view>
            <view class="a">blockblock</view>
            <view class="a">block</view>
        </view>
        
    </view>
</template>

<script>    
    export default{
        data() {
            return {
                
            }
        },
        methods: {
            
        }
    }
</script>

<style>
    .content {
        background-color: #C8C7CC;
        width: 100vw;
        height: 100vh;
    }
    .a {
        height: 100upx;
        background-color: #4CD964;
        border: 1upx solid #FFFFFF;
    }

</style>
display-default.jpg
2、使用flex竖直布局靠左侧对齐
<template>
    <view>
        <view class="content">
            <view class="a">block</view>
            <view class="a">blockblock</view>
            <view class="a">blockblockblock</view>
            <view class="a">blockblock</view>
            <view class="a">block</view>
        </view>
        
    </view>
</template>

<script>    
    export default{
        data() {
            return {
                
            }
        },
        methods: {
            
        }
    }
</script>

<style>
    .content {
        display: flex;
        flex-direction: column;
        justify-content: flex-start;
        align-items: flex-start;
        background-color: #C8C7CC;
        width: 100vw;
        height: 100vh;
    }
    .a {
        height: 100upx;
        background-color: #4CD964;
        border: 1upx solid #FFFFFF;
    }

</style>
flex-01.jpg
3、主轴从结束为止排列,交叉轴居中排列
<template>
    <view>
        <view class="content">
            <view class="a">block</view>
            <view class="a">blockblock</view>
            <view class="a">blockblockblock</view>
            <view class="a">blockblock</view>
            <view class="a">block</view>
        </view>
        
    </view>
</template>

<script>    
    export default{
        data() {
            return {
                
            }
        },
        methods: {
            
        }
    }
</script>

<style>
    .content {
        display: flex;
        flex-direction: column;
        justify-content: flex-end;
        align-items: center;
        background-color: #C8C7CC;
        width: 100vw;
        height: 100vh;
    }
    .a {
        height: 100upx;
        background-color: #4CD964;
        border: 1upx solid #FFFFFF;
    }

</style>
flex-02.jpg

二、flex-wrap换行规则

1、默认为不换行
<template>
    <view>
        <view class="content">
            <view class="a">block-01</view>
            <view class="a">block-02</view>
            <view class="a">block-03</view>
            <view class="a">block-04</view>
            <view class="a">block-05</view>
            <view class="a">block-06</view>
            <view class="a">block-07</view>
            <view class="a">block-08</view>
            <view class="a">block-09</view>
            <view class="a">block-10</view>
        </view>
        
    </view>
</template>

<script>    
    export default{
        data() {
            return {
                
            }
        },
        methods: {
            
        }
    }
</script>

<style>
    .content {
        display: flex;
        flex-direction: column;
        justify-content: flex-start;
        align-items: center;
        flex-wrap: nowrap;
        background-color: #C8C7CC;
        width: 100vw;
        height: 100vh;
    }
    .a {
        height: 18vh;
        background-color: #4CD964;
        border: 1vh solid #FFFFFF;
    }

</style>

我们将flex-wrap设置为inherit和initial时显示效果都是一样的,使用了默认不换行的规则,父试图也没有单独设置换行规则,那么也是使用默认不换行的规则

flex-03.jpg

即使我们设置了高度,但是还是被压缩了

2、换行wrap
<template>
    <view>
        <view class="content">
            <view class="a">block-01</view>
            <view class="a">block-02</view>
            <view class="a">block-03</view>
            <view class="a">block-04</view>
            <view class="a">block-05</view>
            <view class="a">block-06</view>
            <view class="a">block-07</view>
            <view class="a">block-08</view>
            <view class="a">block-09</view>
            <view class="a">block-10</view>
        </view>
        
    </view>
</template>

<script>    
    export default{
        data() {
            return {
                
            }
        },
        methods: {
            
        }
    }
</script>

<style>
    .content {
        display: flex;
        flex-direction: column;
        justify-content: flex-start;
        align-items: center;
        flex-wrap: wrap;
        background-color: #C8C7CC;
        width: 100vw;
        height: 100vh;
    }
    .a {
        height: 18vh;
        background-color: #4CD964;
        border: 1vh solid #FFFFFF;
    }

</style>
flex-04.jpg

后面的元素被挤到了第二列

3、换行wrap-reverse
<template>
    <view>
        <view class="content">
            <view class="a">block-01</view>
            <view class="a">block-02</view>
            <view class="a">block-03</view>
            <view class="a">block-04</view>
            <view class="a">block-05</view>
            <view class="a">block-06</view>
            <view class="a">block-07</view>
            <view class="a">block-08</view>
            <view class="a">block-09</view>
            <view class="a">block-10</view>
        </view>
        
    </view>
</template>

<script>    
    export default{
        data() {
            return {
                
            }
        },
        methods: {
            
        }
    }
</script>

<style>
    .content {
        display: flex;
        flex-direction: column;
        justify-content: flex-start;
        align-items: center;
        flex-wrap: wrap-reverse;
        background-color: #C8C7CC;
        width: 100vw;
        height: 100vh;
    }
    .a {
        height: 18vh;
        background-color: #4CD964;
        border: 1vh solid #FFFFFF;
    }

</style>
flex-05.jpg

前面的元素被挤到了第二列

三、flex-flow

1、默认效果(inherit、initial、space-around)

<template>
    <view>
        <view class="content">
            <view class="a">block-01</view>
            <view class="a">block-02</view>
            <view class="a">block-03</view>
            <view class="a">block-04</view>
            <view class="a">block-05</view>
            <view class="a">block-06</view>
            <view class="a">block-07</view>
            <view class="a">block-08</view>
            <view class="a">block-09</view>
            <view class="a">block-10</view>
        </view>
        
    </view>
</template>

<script>    
    export default{
        data() {
            return {
                
            }
        },
        methods: {
            
        }
    }
</script>

<style>
    .content {
        display: flex;
        flex-flow: column wrap-reverse;
        justify-content: flex-start;
        align-items: center;
        background-color: #C8C7CC;
        width: 100vw;
        height: 100vh;
    }
    .a {
        height: 18vh;
        background-color: #4CD964;
        border: 1vh solid #FFFFFF;
    }

</style>

这是一种简写模式,同flex-05.jpg

四、align-content

1、默认效果(inherit、initial、space-around)

<template>
    <view>
        <view class="content">
            <view class="a">block-01</view>
            <view class="a">block-02</view>
            <view class="a">block-03</view>
            <view class="a">block-04</view>
            <view class="a">block-05</view>
            <view class="a">block-06</view>
            <view class="a">block-07</view>
            <view class="a">block-08</view>
            <view class="a">block-09</view>
            <view class="a">block-10</view>
            <view class="a">block-11</view>
        </view>
        
    </view>
</template>

<script>    
    export default{
        data() {
            return {
                
            }
        },
        methods: {
            
        }
    }
</script>

<style>
    .content {
        display: flex;
        flex-flow: column wrap;
        align-content: inherit;
        justify-content: flex-start;
        align-items: center;
        background-color: #C8C7CC;
        width: 100vw;
        height: 100vh;
    }
    .a {
        height: 18vh;
        background-color: #4CD964;
        border: 1vh solid #FFFFFF;
    }

</style>
space-around.png
2、flex-start
flex-start.png
3、flex-end
flex-end.png
4、center
center.png
5、space-between
space-between.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343