浅谈CSS Flexbox

一个容器 & 两条线

http://img2.58codes.com/2024/20112573rzbEzMrCe8.png
图片来源:https://developer.mozilla.org/zh-TW/docs/Web/CSS/CSS_Flexible_Box_Layout/Using_CSS_flexible_boxes

先看过最重要的7个部分,再介绍它们的用法。

容器(flex container):所有要排列的项目都必须放入此容器中。主轴 (main axis):决定元素是「水平」或「垂直」排列。交错轴 (cross axis):与主轴 (main axis)垂直,决定元素的「对齐位置」。主轴起点 (main start):预设排列起始点,最左边。主轴终点 (main end)。交错轴起点 (cross start):预设贴齐位置点,最上方。交错轴终点 (cross end)。

flex container(容器)的属性

display
顾名思义,容器装的就是我们要排列的元素,要让元素能够使用Flexbox方式排版,首先要做的就是先在容器 .flexdisplay属性设定flex,Flexbox才会作用。

  <div class="flex">    <div class="item1">1</div>    <div class="item2">2</div>    <div class="item3">3</div>  </div>
.flex {      display: flex;    }

flex-direction
决定元素「水平」或「垂直」排列。
主要设定「主轴」的方向,若主轴为「水平」,则交错轴为「垂直」,反之亦然。

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

http://img2.58codes.com/2024/20112573H80yJbNwuw.png
总共有4种:

row:预设值,由左至右。
http://img2.58codes.com/2024/20112573alDwA2JU5S.pngrow-reverse:由右至左。
http://img2.58codes.com/2024/20112573hADHzAdyvw.pngcolumn:由上而下。
http://img2.58codes.com/2024/20112573hdAWUE8KQd.pngcolumn-reverse:由下而上。
http://img2.58codes.com/2024/20112573MuNqR4HxXc.png

justify-content
元素在主轴上的对齐方式。

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

总共有5种:

flex-start:预设值,贴齐主轴起点。
http://img2.58codes.com/2024/20112573alDwA2JU5S.png

flex-end:贴齐主轴终点。
http://img2.58codes.com/2024/20112573vL8wmsc87B.png

center:置中。
http://img2.58codes.com/2024/20112573bSWThaXiHs.png

space-around:平均分配间隔,每个元素都有等距的间隔。
http://img2.58codes.com/2024/201125734m8bSeshhQ.png

space-between:平均分配间隔,邻近边界元素,会贴齐主轴起点/终点。
http://img2.58codes.com/2024/201125735sPoyVDH1V.png

align-items
元素在交错轴上的对齐方式。

.flex {      display: flex;  align-items: flex-start | flex-end | center | stretch | baseline;}

总共有5种:

flex-start:贴齐交错轴起点。
http://img2.58codes.com/2024/20112573alDwA2JU5S.pngflex-end:贴齐交错轴终点。
http://img2.58codes.com/2024/20112573q7cCQckfkw.pngcenter:置中。
http://img2.58codes.com/2024/20112573E6FYlsP3CI.pngstretch:预设值,若元素未设置高度,将延展至容器的长或宽。
http://img2.58codes.com/2024/20112573LlGdbsboGe.pngbaseline:对齐元素的基线。
http://img2.58codes.com/2024/201125735uku2RsxNk.png

flex-wrap
元素的数量超出容器的範围时,是否换行。

.flex {      display: flex;  flex-wrap: wrap | nowrap | wrap-reverse;}

总共有3种:

wrap:换行。
http://img2.58codes.com/2024/20112573MZeNGPw2lt.png

nowrap:预设值,不换行,元素的长/宽会压缩。
http://img2.58codes.com/2024/20112573yElqicpwAf.png

wrap-reverse:换行反转。
http://img2.58codes.com/2024/20112573URBM5fpn2H.png

align-content
多行的排列方式。

.flex {      display: flex;  align-content: flex-start | flex-end | center | space-around | space-between | stretch;}

总共有6种:

flex-start:预设值,贴齐交错轴起点。
http://img2.58codes.com/2024/20112573nRqVGgQ9uI.jpgflex-end:贴齐交错轴终点。
http://img2.58codes.com/2024/20112573RN28LN29l0.jpgcenter:置中。
http://img2.58codes.com/2024/20112573CtNXCmeC5s.jpgspace-around:平均分配间隔,每行上下都有等距的间隔。
http://img2.58codes.com/2024/20112573e7bqwErlHR.jpgspace-between:平均分配间隔,邻近边界行,会贴齐交错轴起点/终点。
http://img2.58codes.com/2024/20112573gzceKGy5l3.jpgstretch:若元素未设置高度,会延展至该行的高度。
http://img2.58codes.com/2024/20112573zteRUPnAuP.jpg

内部元素的属性

刚刚介绍的都是flex container(容器)的属性,每个属性值的设定,影响的是包含的所有元素,如若我们要特别设定某个元素,可以在该元素的属性值上设定。

align-self
设定该元素在交错轴上的对齐方式。
以box2为例:
.flex {      display: flex;}.item2 {  align-self: auto | flex-start | flex-end | center | baseline | stretch;}
总共有6种:auto:预设值,使用align-items的设定。
http://img2.58codes.com/2024/20112573pOS2WRn1Me.jpgflex-start:贴齐交错轴起点。
http://img2.58codes.com/2024/20112573pOS2WRn1Me.jpgflex-end:贴齐交错轴终点。
http://img2.58codes.com/2024/201125739fHHufhyzU.jpgcenter:置中。
http://img2.58codes.com/2024/201125739PYZgPefqJ.jpgbaseline:对齐元素的基线。
http://img2.58codes.com/2024/201125733JNgIFPMde.jpgstretch:若元素未设置高度,将延展至容器的长或宽。
http://img2.58codes.com/2024/20112573JegI1gsr8s.jpgorder
自订个别元素的排列顺序,由小到大依序排列。
.item1 {      order: 3;}.item2 {  order: 1;}.item3 {  order: 2;}
http://img2.58codes.com/2024/20112573LYjH2i4rKB.jpg

以上所介绍的,是Flexbox的基础,搭配各种不同的属性值,可以呈现千变万化的排版方式。

还有一个元素的属性值「flex」,比较进阶,我打算下个篇幅再介绍。

最后,来个小小的应用练习,使用flex排出如下的左边logo图,右边menu的header吧。

http://img2.58codes.com/2024/20112573v8CWZ58pMH.jpg

重点提示:该如何让logo图与menu群组分别置于header的两侧呢?可以使用margin-right: auto;的技巧,把menu群组推到另一侧。

参考资料:
CSS Flexible Box Layout


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章