实现的九宫格效果:
一、使用
.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>