flex的一些属性

CSS3中引入了另一种框--flexbox,flexbox有一些block和inline不同的性质,比如:

  1. 自适应子元素(flex item,又称伸缩项目)的宽度
  2. 伸缩项目的float,clear,vertical-align属性失效
  3. 不能继承flex框,但可以依次设置
  4. 可以修改flex流的方向以及布置规则

现在就大体讲述下这个具体属性的表示含义。

设置flexbox的兼容性

将一个容器设置为flexbox(又称伸缩容器)很简单,但是却存在一些兼容性的问题,比如在IE10下,早期的webkit系列中,都与标准有一些差异,但是我们可以通过less预处理器避免手动输入这些重复的代码。

.flexbox() {
display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
}

flex-flow属性介绍

flex-flow设置flex流的方向(主轴的方向)以及伸缩项目如何换行,具体对应的属性是flex-direction和flex-wrap。flex-direction设置main-axis(主轴)的方向,可选参数为row,row-reverse,column,column-reverse,顾名思义,当方向为row时,伸缩项目横向排列,若此时所有伸缩项目的宽度已经超出了伸缩容器的宽度,浏览器就需要根据flex-wrap属性来布局。若flex-wrap:wrap,则换行放置,若为flex-wrap:nowrap,则所有伸缩项目放在同一行内。

flex-flow是这两个属性的结合,设置方式为flex-flow: row wrap;

justify-content属性介绍

justify-content用来设置伸缩项目在主轴上的排列方式。justify-content有一些参数:flex-start、flex-end、center、space-between、space-around。具体的区别可以通过测试可知。

align-items属性介绍

该属性设置伸缩项目在侧轴(垂直于主轴方向)方向如何放置。和justify-content类似,可以取flex-start,center,flex-end和stretch属性。stretch可以将所有的伸缩项目拉伸至等高高度,并充满伸缩容器。

order属性介绍

order属性可以改变伸缩项目的显示顺序,可以方便的修改布局的相对位置。order值越小,布局位置越靠前。order也有兼容性的问题,可以在less下这样设置

.order(@val) {
-webkit-box-ordinal-group: @val;
-moz-box-ordinal-group: @val;
-ms-flex-order: @val;
-webkit-order: @val;
order: @val;
}

伸缩项目中flex属性介绍

flex是一个综合属性设置,包括了flex-grow、flex-shrink、flex-basis。

  1. flex-grow属性值为正数值,用来设置扩展比率,也就是剩余空间是正值的时候此伸缩项目相对于伸缩容器里其他伸缩项目能分配到空间比例。若省略则会被设置为“1”。
  2. flex-shrink属性值为正数值,用来设置收缩比率,也就是剩余空间是负值的时候此伸缩项目相对于伸缩容器里其他伸缩项目能收缩的空间比例。若省略则会被设置为“1”,在收缩的时候收缩比率会以伸缩基准值加权。
  3. flex-basis与width属性使用相同的值,可以用来设置flex-basis长写并指定伸缩基准值,也就是根据可伸缩比率计算 出剩余空间的分布之前,伸缩项目主轴长度的起始数值。若在flex缩写省略了此属性设置,则flex-basis的指定值是“0”,若flex-basis的指定值是“auto”,则伸缩基准值的指定值是元素主轴长度属性的值。

flex也有一些缩写值,如flex:auto和flex:initial。其中,flex:auto === flex:1 1 auto;flex:initial === flex: 1 0 auto;当flex-basis设置为0时,意味着将按照flex-grow的比例分配所有空间。

具体可以通过 w3c文档 查看。

flex属性也有兼容性问题,依然使用less解决:

.flex(@flex-grow,@flex-shrunk,@flex-basis) {
-webkit-box-flex: @arguments;
-moz-box-flex: @arguments;
-webkit-flex: @arguments;
-ms-flex: @arguments;
flex: @arguments;
}

示例

现在使用h5标签构建一个响应式布局,使用flex模型和媒体查询。

.flexbox() {
display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
} .flex(@flex-grow,@flex-shrunk,@flex-basis) {
-webkit-box-flex: @arguments;
-moz-box-flex: @arguments;
-webkit-flex: @arguments;
-ms-flex: @arguments;
flex: @arguments;
} .order(@val) {
-webkit-box-ordinal-group: @val;
-moz-box-ordinal-group: @val;
-ms-flex-order: @val;
-webkit-order: @val;
order: @val;
} html{
-webkit-text-size-adjust:none;
font-size: 10px;
}
.wrapper{
background: tomato;
.flexbox;
flex-flow: row wrap;
}
.main-header{
.flex(1,1,100%);
font-weight: bold;
font-size: 40px;
color:#ffffff;
text-align: center;
height:100px;
line-height: 100px;
background: blueviolet;
}
.main-content{
.flex(2,1,60%);
width:60%;
font-size: 14px;
.order(2);
height:300px;
background: #ffffff;
line-height:20px;
}
.nav{
.flex(1,1,20%);
width:20%;
.order(1);
background: greenyellow;
ul{
list-style: none;
margin:;
padding:;
overflow: hidden;
background: deepskyblue;
li{
float: left;
width:100%;
padding: 10px;
border-top: 1px solid rgba(255,255,255,0.3);
border-bottom: 1px solid rgba(0,0,0,0.1);
text-align: center;
height: 100%;
&:hover{
background: darken(deepskyblue, 2%);
}
a{
text-decoration: none;
color: #ffffff;
font-size: 14px;
display: block;
height: 100%;
cursor: pointer;
}
}
}
}
.sec{
.flex(1,1,20%);
width:20%;
.order(3);
font-weight: bold;
font-size: 40px;
color:#ffffff;
text-align: center;
background: #000000;
}
.main-footer{
.flex(1,1,100%);
.order(4);
font-weight: bold;
font-size: 40px;
color:#ffffff;
text-align: center;
background: violet;
height:100px;
line-height: 100px;
} @media screen and (max-width : 600px){
.nav{
.flex(1,1,40%);
width:40%;
.order(1);
}
.main-content{
.flex(2,1,60%);
width:60%;
.order(2);
}
.sec{
.flex(1,1,100%);
.order(3);
}
}
<div class="wrapper">
<header class="main-header">header</header>
<div class="main-content">
<p>伸缩容器:一个设有“display:flex”或“display:inline-flex”的元素
伸缩项目:伸缩容器的子元素
主轴、主轴方向:用户代理沿着一个伸缩容器的主轴配置伸缩项目,主轴是主轴方向的延伸。
主轴起点、主轴终点:伸缩项目的配置从容器的主轴起点边开始,往主轴终点边结束。
主轴长度、主轴长度属性:伸缩项目的在主轴方向的宽度或高度就是项目的主轴长度,伸缩项目的主轴长度属性是width或height属性,由哪一个对着主轴方向决定。
侧轴、侧轴方向:与主轴垂直的轴称作侧轴,是侧轴方向的延伸。
侧轴起点、侧轴终点:填满项目的伸缩行的配置从容器的侧轴起点边开始,往侧轴终点边结束。
侧轴长度、侧轴长度属性:伸缩项目的在侧轴方向的宽度或高度就是项目的侧轴长度,伸缩项目的侧轴长度属性是「width」或「height」属性,由哪一个对着侧轴方向决定。</p>
</div>
<nav class="nav">
<ul>
<li><a href="javascript:void 0;">home</a></li>
<li><a href="javascript:void 0;">help</a></li>
<li><a href="javascript:void 0;">find</a></li>
<li><a href="javascript:void 0;">search</a></li>
</ul>
</nav>
<section class="sec">
section
</section>
<footer class="main-footer">footer</footer>
</div>

CSS3的flex布局的更多相关文章

  1. CSS3:flex布局应用

    想把先前的整理的东西贴出来,怎奈总是有额外事情发生,额,教训电脑要离水杯远点~~ 推荐一本书,<编写可维护的Javascript>这是Nicbolas C.Zakas写的,他的<Ja ...

  2. [Css] css3的flex布局

    flex思维导图 {"name":"flex","children":[{"name":"传统布局方式&quo ...

  3. 【CSS3基础-Flex布局】

    关于Flex 背景 在flex布局出现以前,常用的水平和垂直居中对齐方式有很多.flex布局的出现基本规范了这一过程. 通过justify-content和align-items两个属性即解决了水平居 ...

  4. 第103天:CSS3中Flex布局(伸缩布局)详解

    一.Flex布局 Flex是Flexible Box的缩写,意为”弹性布局”,用来为盒状模型提供最大的灵活性. 任何一个容器都可以指定为Flex布局. .box{ display: flex; } 行 ...

  5. CSS3之flex布局

    若要使用flex布局,需在父元素上声明" display : flex ",这样它所有的直系子元素就成为flex元素 1.居中 1)垂直居中:align-items : cente ...

  6. 使用css3的Flex布局实现列表展示

    实现效果图如下: 通过css3样式实现(部分代码): .box { display: flex; flex-wrap:wrap; justify-content:space-between; alig ...

  7. CSS3弹性伸缩布局(二)——flex布局

    上一篇博客<CSS3弹性伸缩布局(一)——box布局>介绍了旧版本的box布局,而这篇博客将主要介绍最新版本的flex布局的基础知识. 新版本简介 新版本的Flexbox模型是2012年9 ...

  8. CSS3弹性盒模型,Flex布局教程

    布局的传统解决方案,基于盒状模型,依赖 display属性 + position属性 + float属性.它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现. CSS3中引入flex的弹性盒模型 ...

  9. 使用Sass优雅并高效的实现CSS中的垂直水平居中(附带Flex布局,CSS3+SASS完美版)

    实现css水平垂直居中的方法有很多,在这里我简单的说下四种比较常用的方法: 1.使用CSS3中的Flex布局 对于flex,我们要了解的是它是一个display的属性,而且必须要给他的父元素设置fle ...

随机推荐

  1. Windows 下的 Redis 的启动

    1. 首先需要去下载Windows 版本的Redis,地址:https://github.com/MSOpenTech/redis, 这里你可以选择下载源码后自己编译,也可以直接下载发布后的版本,我是 ...

  2. MYSQL 5.0 USING BTREE 错误

    今天遇到个错误,导入数据库的时候报错,最后发现是php版本的问题导致包含 KEY `uniacid` (`uniacid`) USING BTREE 的SQL命令报错 5.1之前的写法: KEY `u ...

  3. Hibernate框架使用案例

    Hibernate是对JDBC进行了轻量级封装的ORM框架,充当项目的持久层 Hibernate依赖的库: 创建一个工程,添加jar包: hibernate.cfg.xml: <!DOCTYPE ...

  4. spring xmlns 记录

    spring xmlns 命名空间可从: http://www.springframework.org/schema/  根据需求选择  如:         1.选择 : aop           ...

  5. Java面试查漏补缺

    一.基础 1.&和&&的区别. [概述] &&只能用作逻辑与(and)运算符(具有短路功能):但是&可以作为逻辑与运算符(是“无条件与”,即没有短路的功 ...

  6. datatables服务器端分页要点

    背景:当要查询大量数据的时候,有datatables自身的分页,明显查询比较慢,这是要使用服务器端分页 参数:"bServerSide": true, "fnServer ...

  7. 再谈SQL Server中日志的的作用

    简介     之前我已经写了一个关于SQL Server日志的简单系列文章.本篇文章会进一步挖掘日志背后的一些概念,原理以及作用.如果您没有看过我之前的文章,请参阅:     浅谈SQL Server ...

  8. CYQ.Data V4系列全面开源(2013-08-04)

    致各位.NET开发者: 考虑到本人开源作品太多,个人维护力度有限,故自2013-08-04开始,开放原本需要授权使用的V4系列的最高版本V4.55的框架源码,同时也开放相对应的辅助工具源码,自此,V4 ...

  9. 飞流直下的精彩 -- 淘宝UWP中瀑布流列表的实现

    在淘宝UWP中,搜索结果列表是用户了解宝贝的重要一环,其中的图片效果对吸引用户点击搜索结果,查看宝贝详情有比较大的影响.为此手机淘宝特意在搜索结果列表上采用了2种表现方式:一种就是普通的列表模式,而另 ...

  10. Python黑帽编程2.6 模块

    Python黑帽编程2.6 模块 我们已经学习了如何在你的程序中定义一次函数而重用代码.如果你想要在其他程序中重用很多函数,那么你该如何编写程序呢?你可能已经猜到了,答案是使用模块.模块基本上就是一个 ...