flexible box layout

flexible box 的简介:

flexbox 是 2009 年 W3C 提出的一种全新的可伸缩的 CSS 布局方式。依赖 flexbox,我们可以更简单,高效的完成可伸缩式页面的布局。flexbox 一共经历了三个版本,分别为 old,tweener,new,这三种版本下的 display 属性值不一样,分别为 "display: box","display: flexbox","display: flex"。flexbox 中有两个非常重要的概念:flex container(flex 容器) 和 flex item(flex 项目),当我们给一个元素添加一个 "display: flex" 属性后,这个元素就会变成一个 flex container ,它的直接子元素就会变成 flex item 成为一个 flex container 成员。特别是当我们给一个元素设置成 flex container 时,会在文档中生成一个伸缩容器,伸缩容器会为子元素内容生成一个伸缩容器上下文(FFC)。伸缩容器不是块容器,所以 flex item 不能使用那些用来控制块元素布局的属性,例如,clear,float,vertical-align 属性。

PS:flex container 默认存在两根轴线:水平的主轴(main axis)和垂直的交叉轴(cross axis)。主轴的开始位置(与边框的交叉点)叫做 main start,结束位置叫做 main end;交叉轴的开始位置叫做  cross start,结束位置叫做 cross end。flex 项目默认沿主轴排列。单个项目占据的主轴空间叫做 main size,占据的交叉轴空间叫做 cross size。

flexbox 的属性分为两类: 一类为 flex 容器的属性,另一类为 flex 项目的属性。

flexbox 容器的属性:

justify-content

align-items

flex-direction

flex-wrap

flex-flow

align-content

flexbox 项目的属性:

order

flex-grow

flex-shrink

flex-basis

flex

align-self

1、justify-content  用来设置 flex item 在主轴方向上的对齐方式

具体示例:#container {        display: -webkit-flex;        display: -moz-flex;        display: -ms-flex;        display: -o-flex;        display: flex;        justify-content: center;}.item {        width: 100px;        height: 200px;        border: 1px solid #000;}

justify-content 属性的值有:flex-start | flex-end | center | space-around | space-between。        flex-start:默认值,flex container 内所有的 flex item 在主轴上按从左至右方向排列(左对齐);        flex-end:flex container 内所有的 flex item 在主轴上按从右至左方向排列(右对齐);        center:flex container 内所有的 flex item 在主轴上居中对齐;        space-around:每个 flex item 两侧的间隔相等并且项目之间的间隔比项目与边框的间隔大一倍;        space-between:两端对齐,项目之间的间隔都相等;

2、align-items  用来设置 flex item 在交叉轴方向上的对齐方式

具体示例:#container {        display: -webkit-flex;        display: -moz-flex;        display: -ms-flex;        display: -o-flex;        display: flex;        align-items: center;}align-items 属性的值有:flex-start | flex-end | center | baseline | stretch。        flex-start:flex container 内所有的 flex item 在交叉轴上按从上至下方向排列(顶部对齐);        flex-end:flex container 内所有的 flex item 在交叉轴上按从下至上方向排列(底部对齐);        center:flex container 内所有的 flex item 在交叉轴上居中对齐;        baseline:所有 flex item 中的第一行文字的基线对齐;        stretch:默认值,如果 flex item 没有设置高度或为 auto,flex item 将会占满整个容器的高度;

3、flex-direction  用来设置主轴的方向

具体示例:#container {        display: -webkit-flex;        display: -moz-flex;        display: -ms-flex;        display: -o-flex;        display: flex;        flex-direction: column;}flex-direction 属性的值有:row | row-reverse | column | column-reverse。        row:默认值,主轴在水平方向上,起点在左端;        row-reverse:主轴在水平方向上,起点在右端;        column:主轴在垂直方向上,起点在上沿;        column-reverse:主轴在垂直方向上,起点在下沿;

4、flex-wrap  用来设置 flex item 是否进行多行并反转排列

具体示例:#container {        display: -webkit-flex;        display: -moz-flex;        display: -ms-flex;        display: -o-flex;        display: flex;        flex-wrap: wrap;}flex-wrap 属性的值有:nowrap | wrap | wrap-reverse。        nowrap:默认值,所有的 flex item 排列在一条水平的轴线上,不换行;        wrap:换行,第一行在上方;        wrap-reverse:换行,第一行在下方;

5、flex-flow 属性是 flex-direction 属性和 flex-wrap 属性的简写形式,默认值为 row nowrap

具体示例:#container {        display: -webkit-flex;        display: -moz-flex;        display: -ms-flex;        display: -o-flex;        display: flex;        flex-flow: column-reverse wrap-reverse;}flex-flow 属性的值有:row | row-reverse | column | column-reverse | nowrap | wrap | wrap-reverse。

6、align-content 属性定义了多根轴线的对齐方式,如果容器只有一根轴线,该属性不起作用

具体示例:#container {        display: -webkit-flex;        display: -moz-flex;        display: -ms-flex;        display: -o-flex;        display: flex;        align-content: center;}align-content 属性的值有:flex-start | flex-end | center | space-around | space-between | stretch。        flex-start:与交叉轴的起点对齐;        flex-end:与交叉轴的终点对齐;        center:与交叉轴的中点对齐;        space-around:每根轴线的两侧间隔相等,并且轴线之间的间隔比轴线与边框的间隔大一倍;        space-between:与交叉轴的两端对齐,并且轴线之间的间隔都相等;        stretch:默认值,轴线将占满整个交叉轴;

7、order 属性用于调整 flex item 的顺序(数值越大,排列越靠后)

具体示例:#container {        display: -webkit-flex;        display: -moz-flex;        display: -ms-flex;        display: -o-flex;        display: flex;}.item {        width: 100px;        height: 200px;        border: 1px solid #000;        order: 1;}order 属性的值有:-1 | 0 | 1 |  integer,默认值为 0。

8、flex-grow 属性用于定义 flex item 的放大比例(设置负值无效)

具体示例:#container {        display: -webkit-flex;        display: -moz-flex;        display: -ms-flex;        display: -o-flex;        display: flex;}.item {        width: 100px;        height: 200px;        border: 1px solid #000;        flex-grow: 1;}flex-grow 属性的值:number,默认值为 0,即存在剩余空间也不放大。PS:如果所有 flex item 的 flex-grow 属性值都为 1,则它们将等分剩余空间(如果有的话)。如果一个项目的 flex-grow 属性值为 2,其他项目都为 1,则前者占据的剩余空间将比其他项目多一倍。

9、flex-shrink 属性用于定义 flex item 的缩小比例(设置负值无效)

具体示例:#container {        display: -webkit-flex;        display: -moz-flex;        display: -ms-flex;        display: -o-flex;        display: flex;}.item {        width: 100px;        height: 200px;        border: 1px solid #000;        flex-shrink: 1;}flex-shrink 属性的值:number,默认值为 1,即空间不足该项目将缩小。PS:如果所有项目的 flex-shrink 属性值都为 1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink 属性值为 0,其他项目都为 1,则空间不足时,前者将不会缩小。

10、flex-basis 属性用于定义 flex item 占据主轴空间的大小

具体示例:#container {        display: -webkit-flex;        display: -moz-flex;        display: -ms-flex;        display: -o-flex;        display: flex;}.item {        width: 100px;        height: 200px;        border: 1px solid #000;        flex-basis: 100%;}flex-basis 属性的值:length,默认值为 auto,即项目的本来大小。也可以设置固定值,如500px。特别注意当 flex-basis 值为 0 时 flex item 分配的是容器所有的空间;当 flex-basis 值为 auto 时 flex item 分配的是容器减去所有 flex item 内容之后剩余的容器空间。

11、flex 属性是 flex-grow,flex-shrink 和 flex-basis 属性的简写形式,默认值为 0 1 auto

具体示例:#container {        display: -webkit-flex;        display: -moz-flex;        display: -ms-flex;        display: -o-flex;        display: flex;}.item {        width: 100px;        height: 200px;        border: 1px solid #000;        flex: 1 100%;}flex 属性的值有两个缩写 none(0 0 auto),auto(1 1 auto)。

12、align-self 属性用于设置单个项目与其他的项目不一样的对齐方式,可覆盖容器的 align-items 属性

具体示例:#container {        display: -webkit-flex;        display: -moz-flex;        display: -ms-flex;        display: -o-flex;        display: flex;}.item {        width: 100px;        height: 200px;        border: 1px solid #000;        align-self: flex-end;}align-self 属性的值有:flex-start | flex-end | center | baseline | stretch | auto。        flex-start:flex container 内所有的 flex item 在交叉轴上按从上至下方向排列(顶部对齐);        flex-end:flex container 内所有的 flex item 在交叉轴上按从下至上方向排列(底部对齐);        center:flex container 内所有的 flex item 在交叉轴上居中对齐;        baseline:所有 flex item 中的第一行文字的基线对齐;        stretch:如果 flex item 没有设置高度或为 auto,flex item 将会占满整个容器的高度;        auto:默认值,继承容器的 align-items 属性。如果容器没有该属性,则等同于 stretch;

PS:一个好玩的 flexbox 学习网站:http://flexboxfroggy.com/#zh-cn

flexbox bugs 问题及解决方法:https://github.com/philipwalton/flexbugs

时间: 2024-10-07 06:33:24

flexible box layout的相关文章

CSS3伸缩盒Flexible Box

这是一种全新的布局,在移动端非常实用,IE对此布局的相关的兼容不是很好,Firefox.Chrome.Safrai等需要加浏览器前缀. 先说说这种布局的特点: 1)移动端由于屏幕宽度都不一样,在布局的时候为了适配,如果用百分比,就得精确计算,而且如果有1px边框,计算会更加复杂难控制 2)如果有多列,要让所有列的高度一样,以前的话需要用各种计算或用子元素撑高等 3)上下居中,如果是在以前,那么用line-height或top绝对定位等计算 4)表单布局的时候,经常是左边和右边在一行上,以往是设置

Box layout

Layout management with layout classes is much more flexible and practical. It is the preferred way to place widgets on a window. The QtGui.QHBoxLayout and QtGui.QVBoxLayout are basic layout classes that line up widgets horizontally and vertically. Im

CSS盒子模型之CSS3可伸缩框属性(Flexible Box)

CSS盒子模型(下) 一.CSS3可伸缩框(Flexible Box) 可伸缩框属性(Flexible Box)是css3新添加的盒子模型属性,有人称之为弹性盒模型,它的出现打破了我们经常使用的浮动布局,实现垂直等高.水平均分.按比例划分等分布方式以及如何处理可用的空间.使该模型,可以很轻松的创建自适应浏览器窗口的流动布局或自适应字体大小的弹性布局.但是它有一定的局限性,在firefox.chrome这浏览器下需要使用它们的私有属性来定义:firefox(-moz).chrome(-webkit

Flexible Box布局基础知识详解

1.基本概念,借用阮一峰老师的一张图: 容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis).主轴的开始位置(与边框的交叉点)叫做main start,结束位置叫做main end:交叉轴的开始位置叫做cross start,结束位置叫做cross end. 项目默认沿主轴排列.单个项目占据的主轴空间叫做main size,占据的交叉轴空间叫做cross size. 2.容器的基本属性 flex-direction flex-wrap flex-flow j

北京知道创宇 前端笔试(一) Flexible Box(可伸缩框属性)

可伸缩框属性 box 自诩大白一只,昨天笔试了创宇的前端,天一直下着雨,赶到的时候,整个人都不好了,成都七月的天气哇...... 废话不多说,大致说一下 这道题 ,考察的是CSS3.0中的 box-flex属性,自适应性,由于之前只是简单的看了CSS3.0 所以当时,还是用CSS2.0做的...... 回来之后 感觉应该和小伙伴们共勉一下,顺便补全下知识. 题目要求如下图所示:(ps:自己用附件中的picture画,勉强可以看吧 \(^o^)/~) 要求:实现下面的HTML与CSS 用FLexb

探讨弹性布局Flexible Box

虽然Flex布局09年就被W3C所提出,但是目前浏览器支持上还不是很好,网上找的一张图片,仅供参考: 我们先从简单讲起.如果仅仅只想实现一个栅格布局,没必要引入一个复杂的框架(如bootstrap),短短几行代码也能实现该功能. 例子:有个父div,三个子div,宽度比是1:2:1,以下代码: <!DOCTYPE html> <html> <head> <title></title> <style> * { box-sizing: b

伸缩盒 Flexible Box(新)

flex   flex-grow    flex-shrink   flex-basis  flex-flow   flex-direction   flex-wrap  align-content   align-items  align-self    justify-content   order (1) flex:  none | <' flex-grow '> <' flex-shrink >' || <' flex-basis '> (a) <' fl

详解 Flexible Box 中的 flex 属性

导读: 弹性盒子是 CSS3 的一种布局模式,一种当页面需要适应不同的屏幕大小以及设备类型时确保元素拥有适当的行为的布局方式.其中 flex 属性用于指定弹性子元素如何分配空间. flex 属性的值 flex-grow flex-shrink flex-basis (flex-grow为扩展比率,flex-shrink为收缩比率,flex-basis为默认基准值) auto (计算值为 1 1 auto) initial (计算值为 0 1 auto) none (计算值为 0 0 auto)

Designing CSS Layouts With Flexbox Is As Easy As Pie

This article is an updated excerpt of the chapter "Restyle, Recode, Reimagine With CSS3″ from our Smashing Book #3, written by Lea Verou and David Storey. - Ed. Flexible box layout (or flexbox) is a new box model optimized for UI layout. As one of th