css属性我爱编程Flex

深入解析CSS Flexbox

2016-12-14  本文已影响301人  赵萱_dily

前段时间手工纪录了一些flexbox的要点~如图~


所以想把它整理成电子版,加上更详尽的解析和说明,便于大家和自己日后学习理解和查阅~

Flexbox 是CSS3 的盒子模型 ( box model ),顾名思义它就是一个灵活的盒子 ( Flexible Box ),为什么最近这个属性才红起来呢?最主要也是因为CSS3 的规范终于普及 ( 或 IE 终于没落 ),加上移动设备的发展促成了响应式布局兴起,自适应长宽、弹性相当大的 Flexbox 就趁势而起了~

我们已经熟悉的网格布局(Grid),已经可以实现响应式布局,但仍需要相当大的代码量来使其适应不同的屏幕。而Flexbox能够更加灵活、简洁、优雅、弹性的实现响应式的布局。

第一步要来看看 Flexbox 的盒子模型,根据W3C 文章所描述,flex 的盒子模型如下图所呈现,与一般的盒子模型不同的地方,在于 Flexbox 的盒子模型具有水平的起点终点 ( main start、main end ),垂直的起点终点 ( cross start、cross end ),水平轴与垂直轴 ( main axis、cross axis ),然后元素具有水平尺寸与垂直尺寸 ( main
size、cross size ),这些都是相当重要的布局规划。

再来我们先看看 Flexbox 有哪些属性,也可参考 W3C css3 flexbox css3-flexbox

.flex,
.inline-flex{ 
    width:100px; 
    height:50px;
    border:1px 
    solid #000;
}
.flex{ 
    display:flex;
}
.inline-flex{
     display:inline-flex;
}

CSS:

.flex-row{ flex-direction:row; } .flex-row-reverse{ flex-direction:row-reverse; } .flex-column{ flex-direction:column; } .flex-column-reverse{ flex-direction:column-reverse; }

CSS:

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

CSS:

.flex-start{ 
    align-items:flex-start;
}
.flex-end{
     align-items:flex-end;
}
.center{ 
    align-items:center;
}
.stretch{
     align-items:stretch;
}
.baseline{
     align-items:baseline;
}
.flex-item{
     width:60px;
     text-align:center;
}
.item1{
    font-size:20px; 
    line-height: 60px; 
    background:#c00;
}
.item2{
     line-height: 30px;
     background:#095;
}
.item3{
    font-size:30px; 
    line-height: 100px;
    background:#059;
}
.item2{ 
    align-self:baseline;
    line-height: 30px; 
    background: #095;
}

CSS:

.flex-start,
.flex-end,
.center,
.space-between,
.space-around,
.stretch{ 
    display:inline-flex; 
    flex-wrap:wrap; 
    width:180px; 
    height:160px; 
    margin:5px 5px 40px;
    border:1px solid #000;   
    vertical-align: top;
}
.flex-start{
     align-content:flex-start;
}
.flex-end{
    align-content:flex-end;
}
.center{
    align-content:center;
}
.space-between{
    align-content:space-between;
}
.space-around{
    align-content:space-around;
}
.stretch{
     align-content:stretch;
}
.align-content>div{
    padding:15px;
    margin:2px;
    background:#666;
}

CSS:

.nowrap,
.wrap,
.wrap-reverse{
    display:inline-flex; 
    flex-wrap:wrap; 
    width:180px; 
    height:80px;
    margin:5px 5px 40px;
    border:1px solid #000; 
    vertical-align: top;
}
.column{ 
    flex-direction:column;
    width:120px; 
    height:180px;
}
.nowrap{
     flex-wrap:nowrap;
}
.wrap{
     flex-wrap:wrap;
}
.wrap-reverse{
     flex-wrap:wrap-reverse;
}
.align-content div{ 
     width:30px;
     height:30px;
     margin:5px;
     background:#069;
}
.column div{
     background:#f50;
}
.item{ 
   width:50px;
   height:60px; 
   text-align: center;
   line-height: 50px; 
} 
.order1{ 
    order:1; 
    background:#c00; 
} 
.order2{
   order:2; 
   background:#069; 
}
.order3{ 
    order:3;
    background:#095; 
}
.order4{ 
    order:4; 
    background:#f50; 
} 
.order5{ 
    order:5; 
    background:#777; } 
.order6{ 
    order:6; 
    background:#077; 
}

三个属性可以分开设定,也可以合在一起用一个 flex 统一设定,下面的例子展现出同一个 Flexbox,在不同的宽度,子元素会有不同大小的呈现。( e.g. css-flexbox-demo9.html)

HTML:

<div cl ass="flex flex-300"> 
   <div class="item item1">1</div> 
   <div class="item item2">2</div>
</div>
<div class="flex flex-150">
    <div class="item item1">1</div>
    <div class="item item2">2</div>
</div>

CSS:

.flex{
    display:inline-flex; 
    height:60px;
    margin:5px 5px 40px;
    border:1px solid #000; 
    vertical-align: top;
}
.flex-300{ 
    width:300px;
}
.flex-150{ 
    width:80px;
}
.item{
    height:60px; 
    text-align: center; 
    line-height: 50px;
}
.item1{
     flex:1 2 200px;
     background:#c00;
}
.item2{ 
    flex:2 1 100px; 
    background:#069;
}

如果用动画来表现,可以看出拉长的时候红色会变得比蓝色长,但压缩的时候却是蓝色变得比红色长,如此一来就更能体会 flex 在响应式设计里的关键角色啦!


虽然很多老的浏览器还无法完全完美兼容,但我们还是应该学习这种优雅前端的方式,相信不久的将来,春天就会来的~

上一篇下一篇

猜你喜欢

热点阅读