原文:A Visual Guide to CSS3 Flexbox Properties

Flex布局官方称为CSS Flexble Box布局模型是CSS3为了提高元素在容器中的对齐、方向、顺序,甚至它们是动态的或者不确定大小的新布局模型。

Flex容器的主要特征是可以调整其子元素在不同的屏幕大小中可以用最适合的方法填充合适的空间 。

非常多的设计师和开发人员发现Flex布局非常easy使用,它定位元素简单因此非常多复杂的布局可以用非常少的代码实现,引领更简单的开发过程。Flex布局的算法是基于方向的。不同于基于水平或者垂直的block和inline布局,这样的Flex布局可以被用在小的应用组件中。而CSS3 网格布局模型是新兴处理大规模的布局。

本文主要解说flex的每一个属性如何栩栩如生的影响布局。

1、基本概念:

在開始描写叙述Flexbox属性之前,我们先小小的介绍一下Flexbox模型,Flex布局由父容器称为Flex容器(flex-container)和它直接的子元素称为flex 项目(flex-item)构成,在下文中将它们简称为“容器”和“项目”。

在上图中你能够看到用来描写叙述Flex容器和它的子元素的属性和术语。你能够阅读W3C的官方文档来了解他们的意思。

  • flex容器有两个參考的轴:水平的主轴(main axis)和交叉的轴(cross axis)。
  • 主轴的開始位置main start。主轴结束位置main end。
  • 交叉轴的開始位置叫做cross start,结束位置叫做cross end。
  • 直接子元素“项目”沿主轴排列;
  • 单个项目占领的主轴空间叫做main size,占领的交叉轴空间叫做cross size。

Flexbox是2009年W3C提出的新布局方案,这里用的是2014年9月的最新标准。它的最新的浏览器支持情况

  • Chrome 29+
  • Firefox 28+
  • Internet Explorer 11+
  • Opera 17+
  • Safari 6.1+ (prefixed with -webkit-)
  • Android 4.4+
  • iOS 7.1+ (prefixed with -webkit-)

2、使用方法:

使用flex布局首先在HTML中的父元素上设置display属性:

.flex-container {
display: -webkit-flex; /* Safari */
display: flex;
}

或者你想让它像内联元素一样。能够这样写:

.flex-container {
display: -webkit-inline-flex; /* Safari */
display: inline-flex;
}

注意:这是唯一的要设置在父容器上的属性,全部的直接子元素会成为自己主动flex项目。

3、flexbox 容器的属性:

flex-direction:row(默认值) | row-reverse | column | column-reverse;

该属性指定了Flex的项目如何在flex容器中排列,设置flex容器的主轴方向,它们(项目)两个基本的方向排列,就像一行一样水平排列或者像一列一样垂直排列。

values:

.flex-container {
-webkit-flex-direction: row; /* Safari */
flex-direction: row;
}

row 方向表明flex项目在一行中从左到右堆放在容器中。

.flex-container {
-webkit-flex-direction: row-reverse; /* Safari */
flex-direction: row-reverse;
}

row-reverse 方向表明flex项目从右到左堆放。

.flex-container {
-webkit-flex-direction: column; /* Safari */
flex-direction: column;
}

column 方向指明flex项目在一列中从顶部究竟部堆放

.flex-container {
-webkit-flex-direction: column-reverse; /* Safari */
flex-direction: column-reverse;
}

column-reverse 方向指明flex项目在一列中从底到顶部堆放

 flex-wrap:nowrap(默认值) | wrap | wrap-reverse;

初始情况下,Flexbox的理念是全部的项目都排列在一条线上(轴线),flex-wrap 属性控制容器是否将它的项目排列在一行或者多行,而且控制新行堆叠的方向。

values:

.flex-container {
-webkit-flex-wrap: nowrap; /* Safari */
flex-wrap: nowrap;
}

flex项目会排列在一条线上而且它们会缩放适应到容器的宽。

.flex-container {
-webkit-flex-wrap: wrap; /* Safari */
flex-wrap: wrap;
}

项目(flex items)会在多行展示,假设须要的话它们能够从左到右或者从上到下排列。

.flex-container {
-webkit-flex-wrap: wrap-reverse; /* Safari */
flex-wrap: wrap-reverse;
}

 flex-flow: <flex-direction> || <flex-wrap>;

该属性是上面两个属性的简写方式,前一个參数设置flex-direction,后一个參数设置flex-wrap;

values:

.flex-container {
-webkit-flex-flow: <flex-direction> || <flex-wrap>; /* Safari */
flex-flow: <flex-direction> || <flex-wrap>;
}

默认值: row nowarp

 justify-content:flex-start(默认值) | flex-end | center | space-between | space-around;

定义了项目在容器主轴上的对齐方式。当的容器中项目都是一行而且非弹性的时候或者项目是弹性的可是达到了它们的最小宽度的时候该属性能够定义容器中的剩余空间的分配。

values:

.flex-container {
-webkit-justify-content: flex-start; /* Safari */
flex-start;
}

全部项目向容器的左边对齐

.flex-container {
-webkit-justify-content: flex-end; /* Safari */
justify-content: flex-end;
}

全部项目向容器的右边对齐

.flex-container {
-webkit-justify-content: center; /* Safari */
justify-content: center;
}

全部项目在容器中居中对齐

.flex-container {
-webkit-justify-content: space-between; /* Safari */
justify-content: space-between;
}

第一个和最后一个项目向容器的边界对齐,剩余的空间各个项目等分

.flex-container {
-webkit-justify-content: space-around; /* Safari */
justify-content: space-around;
}

全部的项目等分剩余的容器空间。包含第一个和最后一个项目(所以项目之间的间隔比第一个和最后一个项目与容器边框的间隔大一倍)。

 align-items:flex-start | flex-end | center | baseline | stretch(默认值);

定义项目在交叉轴上的对齐方式,交叉轴与当前的轴线有关系,与justify-content非常相似,仅仅只是是垂直方向的;这属性为全部的项目设置默认的交叉轴上的对齐方式,包含匿名的。

values:

.flex-container {
-webkit-align-items: stretch; /* Safari */
align-items: stretch;
}

项目会填充容器的整个高或者宽(fill the whole height ),从容器交叉轴的起点到交叉轴的结束点。

.flex-container {
-webkit-align-items: flex-start; /* Safari */
align-items: flex-start;
}

项目会堆放在容器交叉轴的起始位置(cross start )。

.flex-container {
-webkit-align-items: flex-end; /* Safari */
align-items: flex-end;
}

项目会堆放在容器交叉轴的结束位置(cross end )。

.flex-container {
-webkit-align-items: center; /* Safari */
align-items: center;
}

项目会堆放在容器交叉轴的居中位置( center of the cross axis )

.flex-container {
-webkit-align-items: baseline; /* Safari */
align-items: baseline;
}

全部项目的基线会对齐

基线?不知道基线是什么请戳这里-->基线是什么?

 align-content:flex-start | flex-end | center | space-between | space-around | stretch(默认值);

当交叉轴上还有多余的空间时它定了多行的对齐方式,类似justify-content在主轴上对齐全部项目的方式一样。

values:

.flex-container {
-webkit-align-content: stretch; /* Safari */
align-content: stretch;
}

每一行的项目后面等比分配了交叉轴上的多余空间。

.flex-container {
-webkit-align-content: flex-start; /* Safari */
align-content: flex-start;
}

项目在容器的交叉轴起始点上堆放在一起。

.flex-container {
-webkit-align-content: flex-end; /* Safari */
align-content: flex-end;
}

项目在容器的交叉轴结束点上堆放在一起。

.flex-container {
-webkit-align-content: center; /* Safari */
align-content: center;
}

项目的行被堆放在容器的交叉轴线中间。

.flex-container {
-webkit-align-content: space-between; /* Safari */
align-content: space-between;
}

与justify-content类似,项目的行距离在容器的交叉轴线上被等分。第一行和末尾的一行与容器的边缘对齐。

.flex-container {
-webkit-align-content: space-around; /* Safari */
align-content: space-around;
}

与justify-content类似,项目的行等分了容器的交叉线上的剩余空间,第一行和最后一行相同也得到了一些,它们之间的间隔比首行和末行到容器边界的间隔大一倍。

注意:这个属性只当容器中有多行的项目时有效,假设全部项目只占一行,那这个属性对布局没有不论什么影响。

4、Flexbox 项目属性

<span style="font-size:14px; font-family: Arial, Helvetica, sans-serif;"> order: <integer></span>

order属性控制容器的直接子元素在容器中的顺序。默认在容器中这些项目是以该数字递增的方式排列的。

values:

values:
.flex-item {
-webkit-order: <integer>; /* Safari */
order: <integer>;
}

该属性能够非常easy的控制项目的顺序,而不用在HTML代码里面做调整。这个整形值能够为负数,默认值是 0。

<span style="font-size:14px;">flex-grow: <number></span>

该属性指定项目的生长因素,它确定了当容器有剩余空间分配的时候相对于其它的项目当前的项目可以添加多少宽度。

values:

.flex-item {
-webkit-flex-grow: <number>; /* Safari */
flex-grow: <number>;
}

当全部的项目的flex-grow值相等的时候它们的size同样。

第二个项目占用了很多其它的剩余空间。

默认值是:0

注意:负数在这个属性中是没实用的

flex-shrink: <number>

该属性指定了项目的收缩因素,它确定了当容器还有剩余空间收缩的时候该项目相对于其它项目的收缩多少。

values:

.flex-item {
-webkit-flex-shrink: <number>; /* Safari */
flex-shrink: <number>;
}

默认情况下,全部的项目都会收缩,可是当我们设置该属性的值为0的时候。项目会保持原有的大小。





默认值是:1

注意:负数在这个属性中是没实用的

flex-basis:auto | <width>

该属性的值和width和height的取值一样,在 flex factors分配剩余空间之前指定项目的初始的大小。

values:

.flex-item {
-webkit-flex-basis: auto | <width>; /* Safari */
flex-basis: auto | <width>;
}



默认值:auto

flex:none | auto | [ <flex-grow> <flex-shrink>? || <flex-basis> ]

该属性是flex-grow, flex-shrink 和flex-basis的缩写形式,同一时候属性值也有简写:auto表示(1,1,auto)。none表示(0,0,auto)

values:

.flex-item {
-webkit-flex: none | auto | [ <flex-grow> <flex-shrink>? || <flex-basis> ]; /* Safari */
flex: none | auto | [ <flex-grow> <flex-shrink>? || <flex-basis> ];
}

注意: W3C鼓舞使用flex的简写形式。由于flex在使用过程中会顺便初正确的又一次设置没有确定的组件到常见使用方法。

align-self:auto | flex-start | flex-end | center | baseline | stretch;

该属性和容器的align-items属性有相同的作用。它是用在单一的项目上的,能够全然压倒容器中align-items定义的对齐方式。

values:

.flex-item {
-webkit-align-self: auto | flex-start | flex-end | center | baseline | stretch; /* Safari */
align-self: auto | flex-start | flex-end | center | baseline | stretch;
}

注意:auto 表示项目会使用父元素(容器)的align-items的值。假设该项目没有父元素的话align-self的值是stretch。

flex items值得注意的是:float、clear、vertical-align这些属性对于项目(flex item)会失效。

Flex布局 Flexbox属性具体解释的更多相关文章

  1. flex布局justify-content属性和align-items属性设置

    前言: flex最常用的就是justify-content和align-items了,这里把这两个属性介绍下,大家更多关于flex布局可以查看阮一峰的日志,写的非常清楚! 阮一峰flex布局的日志:h ...

  2. flex布局常用属性

    最近喜欢flex布局,它可以完美的实现响应式布局,下边我总结了它的一些常用属性,喜欢的,也可以练习写一下,很好用~~~ 注意:使用了flex布局,对于子元素的float.clear和vertical- ...

  3. 记录Flex布局的属性

    容器属性 flex-dirextion(主轴的方向):>>row(水平) | row-reverse(水平取反) | column(垂直) | column-reverse(垂直取反) f ...

  4. CSS3弹性伸缩布局(下)——flex布局

    新版本 新版本的flex布局模型是2012年9月提出的工作草案,这个草案是由W3C推出的最新语法,这个版本立志于指定标准,让新式的浏览器全面兼容,在未来的浏览器更新换代中实现统一. 目前几乎大部分的浏 ...

  5. css3 flex布局结合transform生成一个3D骰子

    预览地址: https://zhaohh.github.io/flex-dice/index.html 1 Flex 布局 首先聊聊Flex 布局,Flex 布局又称"弹性布局", ...

  6. display属性的表格布局相关属性

    基于CSS属性display:table的表格布局的使用   项目改造中遇到DIV+CSS实现的table,新需求需要在表格使用单元格合并,网上调查返现CSS display:table实现的tabl ...

  7. 浅析flex 布局

    Flex基本概念: 容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis).主轴的开始位置(与边框的交叉点)叫做main start,结束位置叫做main end: ...

  8. css3弹性伸缩布局(一)—————flex布局

    CSS3弹性伸缩布局简介 2009年,W3C提出了一种崭新的方案—-Flex布局(即弹性伸缩布局),它可以简便.完整.响应式地实现各种页面布局,包括一直让人很头疼的垂直水平居中也变得很简单地就迎刃而解 ...

  9. button 使用 flex 布局的兼容性问题

    button 使用 flex 布局的兼容性问题 在低版本的手机系统中, button 不能够作为 flex 元素,即使在 CSS 中指定了 display: flex 且 autoprefixer 也 ...

随机推荐

  1. 基于Myeclipse+Axis2的WebService开发实录

    最近开始学习了下在Myeclipse开发工具下基于WebSerivce的开发,下面将相关相关关键信息予以记录 Myeclipse的安装,本文以Myeclipse2014-blue为开发环境,相关配置执 ...

  2. 快速掌握C#7

    1. out 变量(out variables) 以前我们使用out变量必须在使用前进行声明,C# 7.0 给我们提供了一种更简洁的语法 “使用时进行内联声明” .如下所示: var input = ...

  3. 5.30dao-service-controller层,mybatis自动生成。(获取根据id主键获取指定详细数据)

    获取权限详细数据:(参考)                    1.controller:1.注入Servcie调用方法findConsumerById(参数是id);               ...

  4. Vue掉坑记

    本文章汇总学习过程中掉入和不理解的坑,会持续更新,请保持关注 1.过滤器类 搜索过滤 2.修饰符 修饰符汇总 3.webpack webpack+vuecli打包路径 4.Vue后台管理框架 组件后台 ...

  5. Android6.0以上版本获取本机蓝牙地址

    Android6.0以上版本使用BluetoothAdapter.getDefaultAdapter().getAddress()是获取不到正确的蓝牙地址的,返回的值都是02:00:00:00:00: ...

  6. dotnetnuke 中使用ado.net entityframework 如果在程序中动态调用系统的连接字符串信息

    1,打开如下图的Model1.Context.cs文件 2,找到 Base:(ConnString.conn)是我改的.默认生成的是"name=实体连接字符串" Connstrin ...

  7. CNN结构:SPP-Net为CNNs添加空间尺度卷积-神经元层

    前几个CNN检测的框架要求网络的图像输入为固定长宽,而SPP-Net在CNN结构中添加了一个实现图像金字塔功能的卷积层SPP层,用于在网络中实现多尺度卷积,由此对应多尺度输入,以此应对图像的缩放变换和 ...

  8. 读白帽子web安全笔记

    点击劫持 frame buseting if (top.location != location) { top.location = self.location } html5的sandbox属性   ...

  9. react基础篇六

    创建 Refs 使用 React.createRef() 创建 refs,通过 ref 属性来获得 React 元素.当构造组件时,refs 通常被赋值给实例的一个属性,这样你可以在组件中任意一处使用 ...

  10. 09--c++ 类的继承与派生

    c++ 类的继承与派生   一.基本概念 1.类的继承,是新的类从已有类那里得到已有的特性.或从已有类产生新类的过程就是类的派生.原有的类称为基类或父类,产生的新类称为派生类或子类.   2.派生类的 ...