CSS 弹性盒子模型 Flex 简介

CSS 弹性盒子模型已经提出很久了,但是由于兼容相关的原因,一直没有大规模采用,随着技术的发展大量的浏览器已经可以支持 Flex 属性了,这篇文章将会简单讲述和CSS 弹性盒子模型的相关内容。

弹性盒子简介

个人认为,弹性布局模型就是根据所处的设备,视图大小,进行自动的宽高改变的的一个具有更强的空间可塑能力的模型。

由于现代智能设备的种类繁多,不同的设备间展示都存在一定的差距,只依靠浮动布局已经不能特别好的满足展示所需要的功能效果。

弹性盒子模型的出现便是为了解决这一痛点。当下由于低端浏览器的使用率依然很高,导致弹性布局无法大量的普及,主流的CSS布局框架依然采用的浮动布局。然而我相信弹性布局终将会成为未来的主流布局方案。

弹性容器相关概念

image

(图片来自MDN)

弹性容器(flex container)

包含着弹性项目的父元素。通过设置 display 属性的值为 flex 或 inline-flex 来定义弹性容器。

弹性项目(flex item)

弹性容器的每个子元素都称为弹性项目。弹性容器直接包含的文本将被包覆成匿名弹性单元。

**轴(axis)

每个弹性框布局包含两个轴。弹性项目沿其依次排列的那根轴称为主轴(main axis)。垂直于主轴的那根轴称为侧轴(cross axis)。

弹性盒子使用方法

弹性盒子模型主要有两个东西 弹性容器(flex-container) 和 弹性项目(flex-item)。看名字都知道是什么意思了。

简单的实现

要让一元素成为一个弹性容器,我们需要设置它的 displayflex,这样才能使这个元素成为一个弹性容器,这样下面的元素才能成为弹性项目。


<style>
    .container{
        display: flex;
        height: 100%;
        width: 100%;
    }

    .item{
        flex: 1;
        text-align:center;
        font-size: 50px;
        border:1px solid red;
    }

</style>

<div class="container">
    <div class="item">1</div>
    <div class="item">2</div>
    <div class="item">3</div>
</div> 

image

DEMO1

这样就实现了一个最简单的弹性布局。下面我们来详细的看一下和弹性布局有关的CSS属性

弹性容器相关属性

弹性容器的相关属性有:align-contentalign-itemsjustify-contentflex-directionflex-wrapflex-flow

这些属性主要是用于规定弹性项目的排序展示方式。

align-content

align-content 属性定义了当作为一个弹性盒子容器的属性时,浏览器如何在容器的侧轴围绕弹性盒子项目分配剩余空间。

属性值 描述
flex-start 所有行紧靠开始点
flex-end 所有行紧靠结束点
center 所有行居中紧帖
space-between 行与行之间平均留空
space-around 行与行之间和行与四周平均留空

可以在 DEMO2 试一试改变属性值的效果

在MDN中还描述了一些别的属性但是大部分都是没有支持的。

align-items

align-items 属性就比较容易理解了,它控制的元素在侧轴上的对齐方式。

属性值 描述
flex-start 元素向侧轴起点对齐
flex-end 元素向侧轴终点对齐
center 元素在侧轴居中。如果元素在侧轴上的高度高于其容器,那么在两个方向上溢出距离相同。

可以在 DEMO3 试一试改变属性值的效果

justify-content

justify-content 属性与 align-items 属性对应。它控制的元素在主轴上的对齐方式。

属性值 描述
flex-start 所有行紧靠开始点
flex-end 所有行紧靠结束点
center 所有行居中紧帖
space-between 行与行之间平均留空
space-around 行与行之间和行与四周平均留空

可以在 DEMO4 试一试改变属性值的效果

flex-direction

flex-direction 属性是控制弹性盒子容器内弹性项目的分布方向(横向、竖向)。

属性值 描述
row 横向排列
row-reverse 横向反向排列
column 竖向排列
column-reverse 竖向反向排列

可以在 DEMO5 试一试改变属性值的效果

flex-wrap

flex-wrap 属性规定flex元素是否可以多行显示。

属性值 描述
nowrap flex 的元素被摆放到到一行,这可能导致溢出 flex 容器
wrap flex 元素被打断到多个行中。
wrap-reverse 和 wrap 的行为一样,但是打断后行的排列方向是反的

可以在 DEMO5 试一试改变属性值的效果

flex-flow

flex-wrap 属性是 flex-directionflex-flow 的简写属性

syntax: <'flex-direction'> || <'flex-wrap'>


以上就是弹性容器的CSS属性了,主要就是对内部弹性项目的排列展示顺序的控制。

弹性项目相关属性

弹性项目的相关属性有:flex-growflex-shrinkflex-basisflex

它们都主要是负责控制弹性项目的大小。

flex-grow

flex-grow 这个属性控制的弹性项目的拉伸因子,当所处行存在空白的时候会根据该行的元素的拉伸因子分配多余的空间。默认值为0,即不会自动扩展。

flex-shrink

flex-shrink 这个属性与 flex-grow 相反是收缩因子。默认值为1,即会自动收缩。

flex-basis

flex-basis 属性指定了 flex 元素在主轴方向上的初始大小。如果不设置一般会读取 width;

flex

这个属性就是上面三个属性的集合体。

order

order 属性可以更改元素出现的顺序,即会优先根据设置的order来排序。默认为0;


这些属性可以在DEMO6中试一试~~

小提示

  1. 通过设置弹性项目的 widthheightminmax可以限制自动伸缩的极限哦~~

  2. flex-warp 设置为 warp 后,如果有基础宽度那么自动收缩将失效,当达到基础宽度会切换到下一行,除非只剩一个了。

参考资料

MDN_Flex

icanuse_flex

END

2017-7-30 立项

2017-7-28 立项

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,725评论 1 92
  • 移动开发基本知识点 一.使用rem作为单位 html { font-size: 100px; } @media(m...
    横冲直撞666阅读 3,452评论 0 6
  • H5移动端知识点总结 阅读目录 移动开发基本知识点 calc基本用法 box-sizing的理解及使用 理解dis...
    Mx勇阅读 4,392评论 0 26
  • CSS3 弹性盒子(Flex Box) 弹性盒子是 CSS3 的一种新的布局模式。CSS3 弹性盒( Flexib...
    hx永恒之恋阅读 1,234评论 1 9
  • 事实上它是一种新类型的盒子模型,也有书上称作弹性伸缩盒布局。比较新的布局方式:旨在提供一个更加有效的方式来布置,对...
    zh_yang阅读 11,312评论 3 14