CSS3的flex布局
flex的一些属性
CSS3中引入了另一种框--flexbox,flexbox有一些block和inline不同的性质,比如:
- 自适应子元素(flex item,又称伸缩项目)的宽度
- 伸缩项目的float,clear,vertical-align属性失效
- 不能继承flex框,但可以依次设置
- 可以修改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。
- flex-grow属性值为正数值,用来设置扩展比率,也就是剩余空间是正值的时候此伸缩项目相对于伸缩容器里其他伸缩项目能分配到空间比例。若省略则会被设置为“1”。
- flex-shrink属性值为正数值,用来设置收缩比率,也就是剩余空间是负值的时候此伸缩项目相对于伸缩容器里其他伸缩项目能收缩的空间比例。若省略则会被设置为“1”,在收缩的时候收缩比率会以伸缩基准值加权。
- 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:0;
padding:0;
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>
- JDBC基础入门(1)
- LeetCode——Add Two Numbers
- python 中numpy基本方法总结可以类推tensorflow
- python基础知识——函数
- tensorflow之tf.placeholder 与 tf.Variable区别对比
- 11g备库搭建碰到自己给自己埋的坑(r7笔记第63天)
- JDBC基础入门(2)
- 11g备库无法开启ADG的原因分析 (r7笔记第62天)
- JDBC基础入门(3)
- Python多元线性回归-sklearn.linear_model,并对其预测结果评估
- python 聚类分析实战案例:K-means算法(原理源码)
- JAVA面试题解惑——final、finally和finalize的区别
- Java内存管理
- python基础知识——内置数据结构(字典)
- HTML 教程
- HTML 简介
- html div 标签介绍
- html span 标签介绍
- html a 超链接标签
- HTML Br换行标签介绍
- HTML P段落标签介绍
- HTML br与p标签区别
- Html H 标题标签
- html px em pt长度单位
- HTML form 标签
- HTML radio 单选框
- HTML B 加粗标签
- HTML strong加粗粗体标签
- HTML em 强调标签
- HTML i 斜体标签
- HTML u下划线标签
- HTML s 删除线标签
- Html img 图片标签
- Html上标注sup与下标注sub标签
- HTML nobr 禁止换行标签
- HTML hr 水平线标签
- HTML label 标签
- HTML input 标签
- HTML textarea 标签
- HTML select下拉列表标签
- HTML checkbox 多选框
- HTML font color 标签
- HTML iframe 框架标签
- HTML Table 表格
- HTML dl dt dd 标签
- HTML ol li有序列表标签
- HTML ul li 无序列表标签
- HTML 注释
- CSS 教程
- CSS 简介
- CSS 语法
- CSS Id 和 Class选择器
- CSS 样式的创建
- CSS background 背景介绍
- CSS 文本样式
- CSS font 字体
- CSS A 链接
- CSS ul ol列表样式
- CSS TABLE 样式
- CSS 框模型
- CSS border 边框
- CSS Outlines 轮廓
- CSS 外边距 Margin
- CSS Padding 内边距
- CSS 分组和嵌套选择器
- CSS 尺寸 (Dimension)
- CSS Display 属性
- CSS Position 定位
- CSS Float 浮动
- CSS 水平对齐(Horizontal Align)
- CSS 组合选择符
- CSS 伪类
- CSS 伪元素
- CSS 导航栏
- CSS 下拉菜单
- CSS 图片廊
- CSS 图像透明/不透明
- CSS sprite 图像拼合技术
- CSS 媒体类型
- CSS 属性选择器
- CSS 实例
- linux环境搭建图数据库neo4j的讲解
- Linux编程之ICMP洪水攻击
- linux搭建squid代理服务器的完整步骤
- 使用wget递归镜像网站
- 整理Linux中字符串的相关操作技巧
- Ubuntu 16.04下无法安装.deb的解决方法
- 关于linux中系统输入输出的管理详解
- Linux下IP设置脚本的实例及遇到问题解决办法
- Linux与Windows文件互传(VMWare)
- 如何测试Linux下tcp最大连接数限制详解
- Linux中利用Vim对文件进行密码保护的方法详解
- Linux中禁止用户修改/重置密码
- 详解 MAC/Linux Vi配置环境变量及Java环境变量配置
- 扒开DMA映射的内裤
- 如何理解与识别Linux中的文件类型