1. 程式人生 > >【vue】彈性佈局和九宮格

【vue】彈性佈局和九宮格

實現的九宮格效果:

 

 

一、使用

 

.box{

    display: -webkit-flex; /*在webkit核心的瀏覽器上使用要加字首*/

    display: flex; //將物件作為彈性伸縮盒顯示

}

 

 

二、容器屬性.box{...}

 

  • flex-direction:row|column //預設,主軸水平方向,起點在左端,或者主軸垂直方向,預設在上沿

  • flex-wrap:nowrap|wrap //預設不換行,當然你也可以選擇換行

  • justify-content:flex-start //主軸上的對齊方式,預設左對齊,當然還有flex-end,center等

 

  • align-item:stretch //單行交叉軸上的對齊方式,如果專案未設定高度或設為auto,軸線佔滿整個交叉軸,其他還有flex-start,flex-end,center等

  • align-content:stretch //多行交叉軸上的對齊方式,如果專案未設定高度或設為auto,將佔滿整個容器的高度,前提是有多行,即設定過flex-wrap,其他還有flex-start,flex-end,center等

 

  • flex-flow//不用記憶,相當於direction和wrap的預設簡寫

 

 

三、容器內專案屬性.item{...}

  • order:0  預設為0,可以是負值 , 數值越小,排列越靠前,

  • flex-grow:0 預設值為0,即如果空間有剩餘,也不放大。可以是小數,按比例佔據剩餘空間。若所有專案的數值都相同,等分剩餘空間

  • flex-shrink:1   預設值都為1,即如果空間不足將等比例縮小。如果有一個專案的值為0,其他專案為1,當空間不足時,該專案不縮小。負值對該屬性無效,容器不應該設定flex-wrap。

  • flex-basis:auto  flex-basis是分配多餘空間之前專案佔據的主軸空間,如果空間不足則預設情況下該專案也會縮小。預設為auto,如果設定數值,設定flex-basis為350px,但空間充足,則顯示為350px,如果空間不足,則顯示小於設定值

 

  • flex:auto  flex屬性是flex-grow,flex-shrink和flex-basis的簡寫,預設值為0 1 auto,第一個屬性必須,後兩個屬性可選。可以flex:auto; 代替 flex: 1 1 auto;可以用 flex: none;代替 flex: 0 0 auto;

  • align-self:auto    允許單個專案與其他專案有不一樣的對齊方式 預設值為auto,表示繼承父元素的align-items屬性,並可以覆蓋align-items屬性。align-self: auto | flex-start | flex-end | center | baseline | stretch;

 

 

四、九宮格案例來了解display:flex

 

注意:在pc端可以使用@touchstart和@touchend,效率要比@click高,但是在手機端不能用

 

    <div class="sudoku_row">

        <div class="sudoku_item " :class="curSelect==sudoku.id?'opacity':''   "v-for="(sudoku,index) in sudokus"  :key="index"  @click="start(index)”>

 

            <img :src="sudoku.img_src" width="40" height="40" >

            {{sudoku.name}}

 

        </div>

    </div>

 

 

<script>

import breakfast from '../assets/logo.png';

 

 

export default {

  name: 'HelloWorld',

  data () {

    return {

      sudokus: [

      {

        img_src: breakfast,

        name: 'Breakfast',

        id:0

      },

      {

        img_src: breakfast,

        name: 'Breakfast',

        id:1

      },

      {

        img_src: breakfast,

        name: 'Breakfast',

        id:2

      }

      ],

      curSelect:null

    }

  },

 

  methods: {

        start:function(e){

 

            console.log("點選了按鈕")

            var that = this;

            var list = that.sudokus;

            for (var i = 0, len = list.length; i < len; ++i) {

                if (list[i].id == e) {

                    that.curSelect = i;

                    console.log("======" + that.curSelect);

                    that.curSelect= null;

                }

            }

        },

 

  }

 

}

</script>

 

<style scoped>

 

.sudoku_row{

  display: flex;

  align-items: center;

  width:100%;

  flex-wrap: wrap;

}

.sudoku_item{

  display: flex;

  justify-content: center;

  align-items: center;

  flex-direction: column;

  width:25%;

  padding-top: 10px;

  padding-bottom: 10px;

}

.opacity{

  opacity: 0.4;

  background: #e5e5e5;

}

.sudoku_item img{

  margin-bottom: 3px;

  display: block;

}

 

</style>