弹性盒布局学习总结

  近期在做移动端的项目过程中,经常听到有人说用弹性盒布局来写比较快,因为我一直用的是传统的百分比布局(好吧,不敢否认我还是喜欢用拿手的,但是不要鄙视我对新技术的热情),因此一直也想抽空学习下弹性盒布局,看看他到底是何方神圣,能够用到哪些场合,还有浏览器兼容性到底怎么样

一、语法

 应用flex布局,首先要设定一个flex容器(flex container),它的子元素就自动成为flex容器的成员,称为flex项目(flex item)。

.flex_container{
    display:flex;                 /* 块元素 */
    display:inline-flex;         /* 行内元素 */
    display:-webkit-flex;       /* safari */
}

注意:处于flex布局内的成员其clear、float、vertical-align属性将失效

(在此借用阮大神的一张图):

1.设置在父容器上的六大属性

1)  flex-direction:决定了主轴的方向

.flex_container {
  flex-direction: row | row-reverse | column | column-reverse;
}
  • row(默认值):主轴为水平方向,起点在左端。
  • row-reverse:主轴为水平方向,起点在右端。
  • column:主轴为垂直方向,起点在上沿。
  • column-reverse:主轴为垂直方向,起点在下沿。

2) flex-wrap:决定了项目在轴上一行排列不下时是否换行

    .flex_container{
      flex-wrap: nowrap | wrap | wrap-reverse;
    }
  • nowrap:默认不换行,所有项目在一行显示
  • wrap:一行显示不完则换行显示,第一行在最上面
  • wrap-reverse:第一行开始在最下方

3)flex-flow:flex-direction和flex-wrap两属性的简写,默认值为row no-wrap

.flex_container {
  flex-flow: <flex-direction> || <flex-wrap>;
}

4)justify-content:定义了项目在主轴上的对齐方式

    .flex_container {
      justify-content: flex-start | flex-end | center | space-between | space-around;
    }
  • flex-start(默认值):左对齐
  • flex-end:右对齐
  • center: 居中
  • space-between:两端对齐,项目之间的间隔都相等。
  • space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。

5)align-items:定义项目在交叉轴上如何对齐

.flex_container{
  align-items: flex-start | flex-end | center | baseline | stretch;
}
  • flex-start:交叉轴的起点对齐。
  • flex-end:交叉轴的终点对齐。
  • center:交叉轴的中点对齐。
  • baseline: 项目的第一行文字的基线对齐。
  • stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度。

6)align-content:定义了项目在多根轴线上的对齐方式(如果一根轴线不起作用)

    .flex_container {
      align-content: flex-start | flex-end | center | space-between | space-around | stretch;
    }
  • flex-start:与交叉轴的起点对齐。
  • flex-end:与交叉轴的终点对齐。
  • center:与交叉轴的中点对齐。
  • space-between:与交叉轴两端对齐,轴线之间的间隔平均分布。
  • space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。
  • stretch(默认值):轴线占满整个交叉轴。

2.项目的六大属性

1)order:定义了项目的排列顺序,数值越小排列越靠前,默认为0.

2)flex-grow:定义了项目的放大比例,默认为0,即存在剩余空间也不放大

    .item {
      flex-grow: <number>; /* default 0 */
    }

注意:如果所有项目的flex-grow:1,则他们将等分剩余空间;如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍。

3)flex-shrink:定义了项目的缩小比例,默认为1,即如果空间不足,将缩小适应空间

.item {
  flex-shrink: <number>; /* default 1 */
}

注意:如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小

4)flex-basis:定义在分配剩余空间之前,项目所占据的主轴空间。浏览器根据此特性计算主轴是否有剩余空间,默认值为auto,即项目本来大小

    .item {
      flex-basis: <length> | auto; /* default auto */
    }

注意:若项目设为固定宽高,则占据固定空间,如200px||20%

5)flex:flex-grow、flex-shrink、flex-basis三个属性的缩写,默认值为0 1 auto,后两个属性可选

    .item {
      flex: none | [ <‘flex-grow‘> <‘flex-shrink‘>? || <‘flex-basis‘> ]
    }

注意:none代表(0 0 auto),  auto代表(1 1 auto)

6)align-self:允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch

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

二、布局

了解了flex的基本语法之后,究竟怎样用好这些语法进行布局了。自己为了练习写出了一个非常不好看low逼的导航条,但是基本的语法都用上了

<ul class="flex_container">
        <li><a href="#">新闻</a></li>
        <li><a href="#">娱乐</a></li>
        <li><a href="#">生活</a></li>
        <li><a href="#">科技</a></li>
        <li><a href="#">财经报道</a></li>
 </ul>
.flex_container{
    display: flex;
    flex-grow:row wrap;
    justify-content:space-between;
    width:640px;
    height:50px;
    margin:10% auto;
    background-color:#ccc;
    li{
        display: flex;
        flex:1;
        align-items: stretch;
        justify-content: center;
        background-color:black;
        list-style:none;
        a{
            flex:1;
            text-align: center;
            line-height: 50px;
            color:white;
            text-decoration: none;
        }
    }

    li:last-child{
        flex:2;
    }
}

注意:代码并没有做兼容性处理,可以自己写或者用autoprefixer工具来处理

具体详细布局策略移步至阮大神教程:Flex布局教程:实例篇

三、兼容性 

 浏览器一共支持三个不同版本的语法:

  • 新规范:最新版本的语法,即“display:flex”
  • 中间版本:2011年非官方规范,即“display:flexbox”
  • 老规范:2009年官方规范,即“display:box”

从表中可以看出弹性盒布局在移动端的支持性还是比较好的,不过为了兼容不同的浏览器,建议还是用autoprefixer工具自动补全其不同的前缀。

时间: 2024-10-13 01:08:57

弹性盒布局学习总结的相关文章

CSS3-box-flex弹性盒布局

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>弹性盒布局</title> <style> div { height: auto; padding: 20px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-siz

CSS3 中弹性盒布局,实例说明

相关资料 : http://www.w3.org/html/ig/zh/css-flex-1/ CSS 3中弹性盒布局的最新版概述 在CSS 3中,CSS Flexible Box模块为一个非常重要的模块,该模块用于以非常灵活的方式实现页面布局处理. 虽然可以使用其他CSS样式属性来实现页面布局处理,但是如果使用CSS Flexible Box模块中定义的弹性盒布局技术,可以根据屏幕尺寸或浏览器窗口尺寸自动调整页面中各局部区域的显示方式,即实现非常灵活的布局处理. 虽然CSS Flexible

深入理解 CSS3 弹性盒布局模型

Web 应用的样式设计中,布局是非常重要的一部分.布局用来确定页面上不同组件和元素的尺寸和位置.随着响应式用户界面的流行,Web 应用一般都要求适配不同的设备尺寸和浏览器分辨率.响应式用户界面设计中最重要的一环就是布局.需要根据窗口尺寸来调整布局,从而改变组件的尺寸和位置,以达到最佳的显示效果.这也使得布局的逻辑变得更加复杂.本文介绍的是 CSS3 规范中引入的新布局模型:弹性盒模型(flex box).弹性盒模型可以用简单的方式满足很多常见的复杂的布局需求.它的优势在于开发人员只是声明布局应该

CSS3弹性盒布局

使用自适应的窗口弹性盒布局 可以使div总宽度等于浏览器宽度,而且可以随着浏览器的改变而改变. 1 <!DOCTYPE html> 2 <html lang="zh-CN"> 3 <head> 4 <meta http-equiv="content-type" content="text/html; charset=utf-8"> 5 <meta http-equiv="x-ua-c

CSS3与弹性盒布局

1.弹性盒布局对齐模式 1.1.弹性盒子 在规定弹性盒子之中的子级元素换行显示之前父级元素必须是弹性盒子模型,也就是设置 display 为 flex 代码如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>弹性盒布局</title> <style type="text/css"> .div1{ width:

移动端:Flex弹性盒布局

Flex弹性盒布局 一. Flex的发展史 2009年W3C 提出概念,但是官方没有flex这个词 2011年浏览器厂商决定使用flexbox,来形容它的布局特点 2015年W3C正式将其修改为flexbox布局 2016年5月官方正式公布最新的稳定的flex布局规范标准,各大浏览器的支持越来越稳定 二. 定义 Flex是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性 作用 它能够更加高效方便的控制元素的对齐.排列 可以自动计算布局内元素的尺寸,无

CSS3弹性盒布局方式

一.CSS3弹性盒子 弹性盒子是CSS3的一种新布局模式. CSS3 弹性盒( Flexible Box 或 flexbox),是一种当页面需要适应不同的屏幕大小以及设备类型时确保元素拥有恰当的行为的布局方式. 引入弹性盒布局模型的目的是提供一种更加有效的方式来对一个容器中的子元素进行排列.对齐和分配空白空间. 二.浏览器支持 表格中的数字表示支持该属性的第一个浏览器的版本号. 紧跟在数字后面的 -webkit- 或 -moz- 为指定浏览器的前缀. 属性 Basic support (sing

flex 弹性盒布局 移动端首页

广告淘宝适配js文件下载地址 https://github.com/amfe/lib-flexible ---------开始------------------------------ 移动首页案例制作  弹性盒布局 body{   的初始化样式 min-width:320px; max-width:540px; margin:0 auto; color:#000; background:#f2f2f2f; overflow-X:hiddenn; -webkit-tap-highlight-c

弹性盒布局display:flex详解

一:弹性盒子 随着响应式设计的流行,网站开发者在设计网页布局时往往要考虑到页面在适配不同分辨率的浏览器时其内部组件位置大小都会产生变化,因此需要设计者根据窗口尺寸来调整布局,从而改变组件的尺寸和位置,以达到最佳的显示效果.本文介绍的就是一种实现这种变化的比较简单的模型:弹性盒子. 二:属性 首先要给父容器设置display:flex(或者inline-flex)属性,就可以让该父容器的布局方式变为弹性盒模型,接着,给父容器或者子元素设置不同属性来实现具体布局. ①:给父容器添加的属性 1.fle