跳到主要内容

Flex 布局

Flex 布局的核心概念与常用属性,配合水平垂直居中、导航栏、栅格布局三个实例说明实际用法。

前端1分钟阅读

刚接触 flex时,看到网上的各种视频或者文档教程,都略显冗长,因为一时半会儿压根不可能接受那么多东西,所以建议先将 flex 的概念做个大致了解,然后找案例跟着敲。

flex

我尽量说的通俗易懂,将一个标签 display 的值改为 flex 后,该容器就成了一个弹性盒子 container 。在 container 里面的子标签就成了 item (子项)。这个盒子默认情况下有两个轴,一个是 cross axis (主轴),一个是 cross axis (一般称为交叉轴,为了方便这里叫它侧轴)。主轴默认是从左到右,侧轴从上到下。轴开始和结束被称为 cross startcross end 所有子项默认情况下都是沿着主轴排列,单个子项所占据主轴的空间叫做 main size ,占据侧轴的空间叫做 cross size 。利用 flex 可以十分快捷并且灵活的布局。常见属性如下:

/* 父容器常用属性 */
flex-direction: row; /* 决定主轴方向,默认横向从左到右 */
flex-wrap: nowrap; /* 决定容器内子项是否换行,默认不换行 */
flex-flow: row nowrap; /* 前两个属性的简写 */
justify-content: flex-start; /* 定义子项在主轴的对齐方式,默认为左对齐 */
align-content: stretch; /* 定义多根轴线的对齐方式,如果只有一根轴线,改属性无效 */
align-items: stretch; /* 定义子项在侧轴上的对齐方式,默认项目未设置高度时将占满整 个容器的高度 */
/* 子项目常用属性 */
flex: none /* 将容器分成几份,该项所占的份数 */
order: 0; /* 定义子项排列顺序,数值越小排列越靠前 */

  • 不控制子项的大小时,子项会根据父容器的大小撑满父容器。

  • 父容器内只有在普通流的元素才会成为子项,并非所有元素都是子项。

  • 使用 flex 后,floatclear以及 vertical-align 属性将会失效

  • 可以将子项的 display 值改为 flex (嵌套)

  • 如果元素标签的子级用的是 flex 布局,当前元素的上一级(也就是当前元素的父级)不能使用positon: absolute/fixed

  • flex在移动端兼容性非常好,PC 端最多只能兼容到 IE 9

    以上内容,任何人第一次看都不可能有什么顿悟的感觉,毕竟理论是千篇一律的。鲁迅先生曾经说过:”碗酸辣汤,耳闻口讲的,总不如亲自呷一口的明白 。“

<div class="container">
<div></div>
</div>
.container {
display: flex; /*父容器改为弹性盒子flexbox*/
justify-content: center; /* 元素在主轴方向居中对齐 */
align-items: center; /* 元素在侧轴方向居中对齐 */
} /* 只有一个子元素,所以里面的div就绝对居中container */

<ul class="container">
<li class="item">前端</li>
<li class="item">DBA</li>
<li class="item">大数据</li>
</ul>
.container {
display: flex; /* flex容器内的元素默认不换行 */
}

<div class="container">
<div class="item"></div>
<!-- 一个div代表一个栅格 -->
<div class="item"></div>
<div class="item"></div>
</div>
/* 基础部分 */
.container {
display: flex;
}
.item {
flex: 1; /* 容器内元素平均分配空间 */
}

上面的代码是平均分布不换行的,可以将父容器指定宽度后将 flex-wrap 属性更改为 wrap ,并且指定子项的宽度即可做成一个栅格。如下图。

flex布局核心就是将元素 display 属性值改为 flex 后,通过调整主轴、侧轴的方向以及子项的位置和排列方式等来布局。掌握了常用属性后 flex 会改变你对布局的看法,其实掌握 flex 费时间的主要在于记属性。硬生生的记十几个属性实在是枯燥,所以这里推荐一个网站——FLEXBOX FROGGY通过游戏的方式可以很快的记住。通关后可以用 flex 仿做个移动端页面( flex 在移动端非常流行),我仿做过一个携程页面)可以参考下(点这儿去)。

评论