Flex 布局

一、基本概念

  • 理解基本概念

    • Flex 布局(弹性布局),是一种用于在页面上布置元素的布局模式,使得当页面布局必须适应不同的屏幕尺寸和不同的显示设备时,元素可预测地运行。

    • 相关词汇

      图中是一个 flex-direction 属性为 row 的弹性容器,意味着其内的弹性项目将根据既定书写模式沿主轴水平排列,其方向为元素的文本流方向,在这个例子里,为从左到右。

    "flex axis"
    "flex axis"
    1. 弹性容器(Flex container)

      弹性项目的父元素。通过设置display:flex;或者display:inline-flex;来定义弹性容器。

    2. 弹性项目(Flex item)

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

    3. 轴(Axis)

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

    4. 方向(Direction)

      弹性容器的主轴起点(main start)/主轴终点(main end)侧轴起点(cross start)/侧轴终点(cross end)描述了弹性项目排布的起点与终点。它们具体取决于弹性容器的主轴与侧轴中,由 writing-mode 确立的方向(从左到右、从右到左,等等)。

    5. 行(Line)

      根据 flex-wrap 属性,弹性项目可以排布在单个行或者多个行中。此属性控制侧轴的方向和新行排列的方向。

  • 代码示例

    下述代码使用了 flex 布局,使本来在文档流布局中独占一行的块级元素 div ,变成了两个同处一行之中。

<!--
例一
-->
<style>
    .parent{
      border:solid 1px red;
      display:flex;
      background:#dde
}
    .child{
      border:solid 1px black;
      height:50px;
      width:100px;
      background:#ddd;
      margin:10px;
    }
  </style>
  <div class="parent">
    <div class="child child1"></div>
    <div class="child child2"></div>
  </div>

例一结果如下:

flex output.PNG
flex output.PNG
  • flex 特点
    1. 块级布局侧重垂直方向、行内布局侧重水平方向,flex布局是与方向无关的。
    2. flex 布局可以实现空间自动分配、自动对齐(flexible:弹性、灵活)。
    3. flex 适用于简单的线性布局, 更复杂的布局要交到 grid 布局(还没发布)。

二、flex container 的六个属性

<!--
例二
为了便于理解,用代码实践了这六个属性
-->
<style>
  * {
  margin: 0px;
  border:0px;
  padding:0px;
}
.container {
  display: flex;
  border: 1px solid;
  background: red;
}
.items {
  border: 5px solid;
  height:50px;
  width:100px;
  background:white;
}
</style>
<div class="container">
  <div class="items item1">div1</div>
  <div class="items item2">div2</div>
  <div class="items item3">div3</div>
  <div class="items item4">div4</div>
  <div class="items item5">div5</div>
  <div class="items item6">div6</div>
  <div class="items item7">div7</div>
  <div class="items item8">div8</div>
  <div class="items item9">div9</div>
</div>

例二页面展示结果:display:flex

  • flex-direction(方向)

    这个属性表明flex布局与方向无关,它有四个取值:

    • column

      让元素一列一列的展示。源代码 flex-container 中由上到下排列的元素,在页面中展示为从页面上方开始往下排列。

      在例二中 .container 加上flex-direction:column之后,页面展示效果如下:flex-direction:column

    • column-reverse

      让元素一列一列的展示。源代码 flex-container 中由上到下排列的元素,在页面中展示为从页面下方开始往上排列。

      在例二中 .container 加上flex-direction:column-reverse之后,页面展示效果如下:flex-direction:column-reverse

    • row——默认值

      让元素一行一行的展示。源代码 flex-container 中由上到下排列的元素,在页面中展示为从页面左侧开始往右排列。

      在例二中 .container 加上flex-direction:row之后,页面展示效果如下:flex-direction:row

    • row-reverse

      让元素一行一行的展示。源代码 flex-container 中由上到下排列的元素,在页面中展示为从页面右侧开始往左排列。

      在例二中 .container 加上flex-direction:row-reverse之后,页面展示效果如下:flex-direction:row-reverse

  • flex-wrap(换行)

    让元素换行,默认值为不换行 nowrap 。

    在例二中 .container 加上flex-wrap:wrap;之后,页面展示效果如下:flex-wrap:wrap

  • flex-flow(上面两个的简写)

    flex-flow:row wrap;
    /*相当于下面的css写法*/
    flex-direction:row;
    flex-wrap:wrap;
    
  • justify-content(主轴方向对齐方式)

    flex-container 中 items 主轴的对齐方式,主轴的方向即 flex-direction 的方向,它有五种取值:

    • space-between

      主轴方向除去元素内容多出来的空间平均分布在两两元素之间。

      示例链接

    • space-around

      主轴方向除去元素内容多出来的空间平均分布在每个元素主轴方向的前后。

      示例链接

    • flex-start

      将 flex-container 中的元素挪到主轴的起点。

      示例链接

    • flex-end

      将 flex-container 中的元素挪到主轴的终点。

      示例链接

    • center

      将 flex-container 中的元素挪到主轴的中间。

      示例链接

  • align-items(侧轴对齐方式)

    flex-container 中 items 侧轴的对齐方式,侧轴方向即主轴方向的垂直方向,有五种取值:

    • stretch——默认值

      表示 flex-container 之中的 items 是可伸展的,所有的 item 都会拥有与侧轴方向最长的 item 同等的长度。

      示例链接

    • flex-start

      将 items 挪到侧轴的起点。

      示例链接

    • flex-end

      将 items 挪到侧轴的终点。

      示例链接

    • center

      将 items 挪到侧轴的中间。

      示例链接

    • baseline

      用文字的 baseline 对齐,比较复杂,用的较少。

      示例链接

  • align-content(多行/列内容对齐方式---用的比较少)

三、flex item 的六个属性

  • flex-grow ——增长比例(空间过多时)

    flex-container 的空间减去 items 的空间之后剩余的空间,用 flex-grow 属性分配给 item。

    示例链接

  • flex-shrink——收缩比例(空间不够时)

  • flex-basis——默认大小(一般不用)

  • flex——上面三个的缩写

    .container{
      display:flex
    }
    .items:nth-child(1) {
      flex:1 3 100px;
    }
    /*
    用于表示:如果 container 有剩余空间是将剩余空间全部给 item1, 如果 container 的空间不够时将 item1 按3的比例缩小,如果空间刚刚好则设置 item 在主轴方向的长度为 100px
    */
    
  • order——顺序(代替双飞翼)

    使用 order 可以自定义的安排 items 的顺序 ,使用时要求每个 item 写入order,否则不生效。

    示例链接

  • align-self——自身的对齐方式

    使用 align-self 可以自定义某一个 item 的对齐方式,不然对齐方式继承父级元素的对齐方式。

    示例链接

四、例子

实现的页面为:http://js.jirengu.com/pavux/3/edit?html,output

参考自http://codepen.io/team/css-tricks/pen/jqzNZq/?editors=1100

五、参考

Flex 布局教程:语法篇

A Complete Guide to Flexbox

A Visual Guide to CSS3 Flexbox Properties

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

推荐阅读更多精彩内容