Flex布局(举例)

什么是Flex布局

flex布局就是:即弹性布局,用来为盒状模型提供最大的灵活性(可以简便、完整、响应式地实现各种页面布局。)。设为Flex布局以后,子元素的float、clear和vertical-align属性将失效。

任何一个容器都可以指定为Flex布局

.box{
  display: flex;
}

行内元素也可以使用Flex布局。

.box{
  display: inline-flex;
}

Webkit内核的浏览器,必须加上-webkit前缀。

.box{
  display: -webkit-flex;
  display: flex;
}

容器的6大属性

1.flex-direction属性:主轴的方向(即页面的排列方向)。

.box {
  flex-direction: row | row-reverse | column | column-reverse;
}
  • row(默认值):主轴为水平方向,起点在左端。
  • row-reverse:主轴为水平方向,起点在右端。
  • column:主轴为垂直方向,起点在上沿。
  • column-reverse:主轴为垂直方向,起点在下沿。

2. flex-wrap属性:换行

.box{
  flex-wrap: nowrap | wrap | wrap-reverse;
}
  • rnowrap :不换行
  • wrap:换行(第一行在上)
  • wrap-reverse:换行(最后一行在上)

3 .flex-flow属性:flex-direction属性和flex-wrap属性的简写形式,默认值为row nowrap

.box {
  flex-flow: <flex-direction> <flex-wrap>;
}

4 .justify-content属性:在主轴上的对齐方式

.box {
  justify-content: flex-start | flex-end | center | space-between | space-around;
}

对齐方式与主轴的方向有关,当主轴的方向为默认值时(flex-direction:row 主轴为水平方向,起点在左端)

  • flex-start(默认值):左对齐
  • flex-end:右对齐
  • center: 居中
  • space-between:两端对齐,项目之间的间隔都相等。
  • space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。

5 .align-items属性

align-items属性定义项目在交叉轴上如何对齐。

.box {
  align-items: flex-start | flex-end | center | baseline | stretch;
}

具体的对齐方式与交叉轴的方向有关,下面假设交叉轴从上到下。

  • flex-start:交叉轴的起点对齐。
  • flex-end:交叉轴的终点对齐。
  • center:交叉轴的中点对齐。
  • baseline: 项目的第一行文字的基线对齐。
  • stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度。

6 .align-content属性

align-content属性定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。

.box {
  align-content: flex-start | flex-end | center | space-between | space-around | stretch;
}
  • flex-start:与交叉轴的起点对齐。
  • flex-end:与交叉轴的终点对齐。
  • center:与交叉轴的中点对齐。
  • space-between:与交叉轴两端对齐,轴线之间的间隔平均分布。
  • space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。
  • stretch(默认值):轴线占满整个交叉轴。

项目的6大属性

1.order属性

定义项目的排列顺序。数值越小,排列越靠前,默认为0。

.item {
  order: <integer>;
}

2.flex-grow属性

定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。
.item {
flex-grow: ;
}

3.flex-shrink属性

定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。

.item {
  flex-shrink: <number>; 
}

4.flex-basis属性

定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。

.item {
  flex-shrink: <number>; 
}

定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。
.item {
flex-basis: | auto;
}
它可以设为跟width或height属性一样的值(比如350px),则项目将占据固定空间。

5.flex属性

是flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 1 auto。后两个属性可选。
该属性有两个快捷值:auto (1 1 auto) 和 none (0 0 auto)。
建议优先使用这个属性,而不是单独写三个分离的属性,因为浏览器会推算相关值。

5.align-self属性

align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。

.item {
  align-self: auto | flex-start | flex-end | center | baseline | stretch;
}

基于vue的一个评论例子

实现如图所示的布局
直接贴代码:

<template>
<!--评论-->
   <div v-title="'评论'">
        <div class="comment" v-for="(item,index) in commentDate" :key="index">
           <div class="head">
             <img :src="item.headImgUrl" alt="">
           </div>
            <div class="content" :class="{border:index!=0}">
               <div class="commentTitle">
                   <div class="commentName">{{item.creatorEmployeeName}}</div>
                   <div class="commentSort">选项编码:{{item.commentId}}</div>
                   <div class="commentTime">{{item.createTime }}</div>
               </div>
               <div class="commentContent" v-html="item.commentContent"></div>
               <div class="textdel" @click="isdel"></div>
           </div>
    </div>
    <div class="noCommment" v-show="!commentDate.length">暂时没有评论</div>
   </div>
</template>
<script>
export default {
  data() {
    return {
        commentDate:[{
          headImgUrl:'https://avatar.csdn.net/C/3/C/3_qiancheng2019.jpg',creatorEmployeeName:'千城',commentId:'66666',createTime:'2019.08.26',commentContent:'不要抨击别人,免得为人所抨击'
        },
          {headImgUrl:'https://avatar.csdn.net/C/3/C/3_qiancheng2019.jpg',creatorEmployeeName:'千城',commentId:'66666',createTime:'2019.08.26',commentContent:'不要抨击别人,免得为人所抨击'
        },
          {headImgUrl:'https://avatar.csdn.net/C/3/C/3_qiancheng2019.jpg',creatorEmployeeName:'千城',commentId:'66666',createTime:'2019.08.26',commentContent:'不要抨击别人,免得为人所抨击'
        } ]
    }
  },
</script>
<style lang="less" scoped>
      .border{
        border-top: 1px solid #eee;
       }
     .comment{
       display: flex;
       .head{
         width: 1.30rem;
         padding: 0.3rem 0.1rem 0 0.3rem;
         box-sizing: border-box;
         img{
          width: 0.8rem;
          height: 0.8rem;
          border-radius: 50%;
          border:1px solid rgba(120,191,254,1);
          box-sizing: border-box;
         }
       }
       .content{
         padding: 0.5rem 0 0.3rem 0.1rem;
         margin-right: 0.3rem;
         width: 100%;
         .commentTitle{
           display: flex;
           align-items:center;
           .commentName{
             height:0.48rem ;
              font-size:0.34rem;
              font-family:PingFangSC;
              font-weight:500;
              color:rgba(120,191,254,1);
              line-height:0.48rem;
           }
           .commentSort{
            padding-left: 0.2rem;
            height:0.33rem;
            font-size:0.24rem;
            font-family:PingFangSC;
            font-weight:400;
            color:rgba(120,191,254,1);
            line-height:0.33rem;
           }
           .commentTime{
            height:0.33rem;
            font-size:0.24rem;
            font-family:PingFangSC;
            font-weight:400;
            color:rgba(120,191,254,1);
            line-height:0.33rem;
            flex: 1;
            text-align: right;
           }
         }
         .commentContent{
           padding: 0.15rem 0;
           font-size:0.28rem;
          font-family:PingFangSC;
          font-weight:400;
          color:rgba(117,117,117,1);
          line-height:0.42rem;
          word-wrap: break-word;
          word-break: break-all;
         }
         .textdel{
          height: 0.4rem;
          background-color: pink;
          background: url("~@/assets/img/activity/texdelete.png") no-repeat right
            0rem center / 0.9rem 0.4rem;
         }
       }
     }
     .noCommment{
      width: 100%;
      font-size:0.26rem;
      font-family:PingFangSC;
      font-weight:400;
      color:rgba(181,179,183,1);
      line-height:0.42rem;
      text-align: center;
      margin-top: 4rem;
     }
</style>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值