要来介绍大家最爱用的 Flexbox 了,以往兼容性还不太好的时候,大多都是使用表格(table)属性来进行排版,也容易出问题,现在科技进步迅速,浏览器也持续跟进,IE 也要进入历史了,只要用简单的语法,就能安排元素在网页上各自的位置,非常的方便好用又弹性!还不快学起来!
Flexbox 之所以被称之为弹性盒,是因为可以随着视窗的尺寸,改变自己布局的方式,使用起来非常弹性,且易於使用,所以深受大家喜爱。
随着容器跟着伸缩
要了解 Flexbox ,就要先了解最基础简单的 Flexbox 父容器规则。
当我们为父容器(蓝框)添加 display: flex;
属性後,其内部的子元件(灰色方形)将会以主轴(红色箭头),依序排列(红色数字)与分布,并以交错轴(绿色箭头)让子元件互相对齐基准线(方形上的绿色线)。
display: flex;
,影响子元件布局看完上面的规则後,我们发现有一个主轴负责控制排列方向与布局。
flex-direction
预设的值是row
,指水平排列
当flex-direction
值设row-reverse
,指水平翻转排列
当flex-direction
值设column
,指垂直排列
当flex-direction
值设column-reverse
,指垂直翻转排列
Flexbox 弹性盒有个特性,当没有特别设定要换行时,它预设是会想尽一切办法把子元件都塞一行,如下图,正方形因为弹性盒的缘故,被压缩成长方形。
当你设定flex-wrap: wrap;
,塞不下的时候,它就会自动换行了
当你设定flex-wrap: wrap-reverse
,除了会自动换行,而且是反向换行。
使用属性justify-content
,设定主轴布局
flex-start
,预设是这个,往主轴起始点对齐flex-end
,往主轴末端对齐center
,往主轴中央对齐space-between
,平均分配主轴位置,贴齐两端space-around
,平均分配主轴留白的部分(头尾留白处相加会与中间留白处相等,就像跑马灯元素间距离相等)使用属性align-items
,设定主轴布局
flex-start
,预设是这个,往交错轴起始点对齐flex-end
,往交错轴末端对齐center
,往交错轴中央对齐baseline
,依照内容文本对齐stretch
,在没写死子元件大小下,子元件自动撑满交错轴。
上图数字代表行高倍率line-height
,用来撑高以好展示效果
当弹性盒子元件有换行时,才有作用,在单行时无作用!
flex-start
,预设是这个,往交错轴起始点开始排列flex-end
,往交错轴末端开始排列center
,往交错轴中央开始排列space-between
,平均分配交错轴位置,贴齐两端space-around
,平均分配交错轴留白stretch
,平均分配交错筹位置已经了解 Flexbox 最常用的部分了,再来就是控制子元件的 flex,也是比较困难难懂精随的部分,搞懂了,成功就离你不远了!
flex 总共又有划分三个属性
flex-grow
,负责管理放大这个部分,预设是 0(不会放大),当有多个子元件设定时,数字代表比例
flex-shrink
,负责管理缩小这个部分,预设是 1 (随父容器压缩),设定为 0 时,则不会压缩
flex-basis
,负责管理基础大小的部分,有压缩,就会有设置基础大小,避免被压太小。
flex
的简写方式,flex: <grow> <shrink> <basis>;
,当只有写一个值时,那个值会代表 grow 值
有时候想对子元件个别设定对齐方式,就可以个别对子元件设定align-self
。
设定与align-items
相似。
用来设定顺序,预设为 0 ,数字越大越靠近主轴末端,反之越靠近起始点。
盒模型那一篇已经介绍了使用 mragin: 0 auto;
来把元素置中,现在又多认识了 Flexbox,恭喜你又多认识了一个把元素置中的好方法了,前面有介绍 DOM tree ,认识到文本也是单独一个 DOM 节点,我们就可以利用 Flexbox 来达到水平垂直置中的效果了!
当初在学 Flexbox,主要是透过 六角学院副校长——卡斯伯的 图解:CSS flex属性一点也不难 学习的,让我受益良多,另外也推荐两款 Flexbox 小游戏, Flexbox Froggy 与 flex Pirate 海盗船,对认识 Flexbox 效果满好的,下一篇将进入我们的定位(Position)与浮动(float)章节
>>: [Day02] Flutter GetX VScode extension & tips
前言 本章节,要讲的是SSH远端连线的机制与原理,以及SSH的使用方式。 什麽是OpenSSH? O...
前言 前几天介绍了在沟通当中相当於是「心法」的部分,今天来谈点具体看得到的东西,也作为沟通系列的结尾...
因为要在Visual Studio Code(VS Code)上使用TypeScript(TS)进行...
经过一长串的前置作业後 要在此步骤开始设定 SQL Server Always On Availab...
以下是 NIST SP 800-204B 的摘录: 可以通过配置身份验证和存取控制策略来实施对微服务...