前言

你还在用display+position+float来进行css布局吗?有没有觉得用传统的这种布局方法来实现特殊布局特别麻烦困难,例如:垂直居中。今天来记录一下自己对flex布局的了解(虽然不算神马新东西了都可以说是旧东西了~~~)

历史

2009年,W3C提出了一种新的方案 —— Flex布局,可以简便、完整、响应式地实现各种页面布局。

flex布局也经历了一段演变历史。当你用google搜索flex时你会发现很多“过时”的资料信息。

  • 如果你正在浏览一篇关于flexbox的博客时看到display:box或一个属性为box-{*},那么你正在浏览的是2009年版本的flexbox

  • 如果你正在浏览一篇关于flexbox的博客时看到display:flexbox或一个flex()函数,那么你正在浏览的是2011年版本的flexbox

  • 如果你正在浏览一篇关于flexbox的博客时看到display:flex和flex-{*}的一系列属性,那么你正在浏览的是现在版本的flexbox

目前,它已经得到了所有浏览器的支持,网页端浏览器兼容性如下:

移动端浏览器兼容性:

概念

Flexbox布局( Flexible Box 或CSS3 弹性布局),是CSS3中的一种新的布局模式,可以自动调整子元素的高和宽,来很好的填充任何不同屏幕大小的显示设备中的可用显示空间,收缩内容防止内容溢出,确保元素拥有恰当的行为的布局方式。使用Flexbox来布局更容易,可以使用更少的代码,更简单的方式实现更复杂的布局,例如对齐方式,排列方向,排列顺序(这也是Flexbox布局的核心能力所在),弹性盒中的子元素通过在各个方向放置就可以以弹性的尺寸适应父元素的显示区域。由于子元素的显示顺序和它们在代码中 的顺序是独立的,通过使用弹性盒,定位子元素变得更加简单,复杂的布局也能够使用更清晰的代码更简单的实现。独立显示被设定成只针对可见元素,而不是基于代码的声明和导航顺序。

不同于块级元素基于垂直方向布局以及行内元素基于水平方向布局,弹性盒布局的算法是方向无关的。 虽然块级元素布局在页面中工作良好,但是其定义不足以支持那种需要根据用户代理从竖直切换成水平等变化而进行方向切换、大小调整、拉伸、收缩的引用组件。不同于将要出现的网格布局针对目标为大比例布局,弹性盒布局更适用于应用组件和小比例布局。这两种都是CSS工作组为了能与不同用户代理、不同书写模式和其他弹性需要进行协作而做出的努力。

常规布局是基于块和内联流方向,而Flex布局是基于flex-flow流。先看一张图:

1. flex container:flex容器/弹性容器

flex容器是flex元素的父元素。通过设置display属性的值为flex或inline-flex定义。
旧版本属性值:

- box:将对象作为弹性容器显示(最老版本-2009)
- inline-box:将对象作为内联块级弹性容器显示(最老版本-2009)
- flexbox:将对象作为弹性容器显示。(过渡版本-2011)
- inline-box: 将对象作为内联块级弹性容器显示。(过渡版本-2011)

2. flex item:flex子元素或弹性子元素

flex容器的每一个子元素均为一个flex子元素。注意:flex容器直接包含的文本变为匿名的弹性子元素,同时flexbox布局和原来的布局是两套概念,所以部分css属性在flex子元素中将不起作用,如:float,clear,vertical-align,column-*等

###3. 轴 axis

每个flex子元素沿着主轴(main axis)依次相互排列。交叉轴(cross axis)垂直于主轴。

- 属性flex-direction定义主轴方向
- 属性justify-content定义flex子元素如何沿着主轴排列
- 属性align-items定义flex子元素如何沿着交叉轴排列
- 属性align-self覆盖父元素的align-items属性,定义了单独的flex子元素如何沿着交   叉轴排列

方向 direction

flex容器的主轴起点边缘(main start)、主轴终点边缘(main end)和 交叉轴起点边缘(cross start),交叉轴终点边缘(cross end)为flex子元素排列的起始和结束位置。它们具体取决于由writing-mode(从左到右、从右到左等等)属性建立的向量中的主轴和交叉轴位置。

- 属性order将元素依次分组,并决定谁先出现。
- 属性flex-flow是属性 flex-direction 和 flex-wrap 的简写,用于排列flex子元素。

flex子元素根据 flex-wrap 属性控制的侧轴方向(在这个方向上可以建立垂直的新线),既可以是一行也可以是多行排列

尺寸

flex子元素宽高可相应地等价于主尺寸(main size)和交叉尺寸(cross size),它们都分别取决于flex容器的主轴和侧轴。

- min-height和 min-width属性的初始值为新增关键字 auto。
- 属性flex是flex-basis,flex-grow和flex-shrink的缩写,代表flex子元素的伸缩性。

鸣谢

Flexbox布局(CSS3 弹性布局,Flexible Box)之 基本概念解析

后话

夜深了,早点休息。——(其实是致自己。)

我所知道的flex布局 —— 上篇相关推荐

  1. css布局方式_手把手教你CSS Flex布局「真香」

    作者:EcbJS 转发链接:https://blog.csdn.net/EcbJS/article/details/106466757 前言   之前做项目,关于布局方面没怎么深入研究过,好多页面都是 ...

  2. html实现 左图右文_让CSS flex布局最后一行左对齐的N种方法

    作者:张鑫旭 https://www.zhangxinxu.com/wordpress/2019/08/css-flex-last-align/ 前言 小伙伴们是否还记得,之前小编也发布了几篇关于CS ...

  3. flex布局_flex布局的 flex(felx-grow、flex-shrink、flex-basis)详解

    flex布局中的flex-grow,flex-shrink,flex-basis 接上篇文章, 1. flex-grow属性 flex-grow定义剩余空间的分成.默认为0,即如果存在剩余空间,也不放 ...

  4. 移动端开发——flex布局

    目录 前言 一.flex布局原理 二. 父类的常用属性 1.flex-direction 2.justify-content 3. flex-wrap 4.align-items 5.align-co ...

  5. Flex布局——flex-basis、flex-grow、flex-shrink

    文章目录 1. 前言 2. 剩余空间 3. 属性 [1] flex-grow [2] flex-basis [3] flex-shrink [4] flex 1. 前言 Flex布局的基础以及其他属性 ...

  6. Flex 布局详解 - 转自阮一峰老师

    Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性.任何的盒子都可以使用它. 下面我们来看一下使用 Flex 布局的容器的属性 fle ...

  7. Flex布局教程(来源:阮一峰)

    网页布局(layout)是 CSS 的一个重点应用.Flex 布局将成为未来布局的首选方案.本文介绍它的语法,下一篇文章给出常见布局的 Flex 写法.网友 JailBreak 为本文的所有示例制作了 ...

  8. Flex 布局:语法篇

    2019独角兽企业重金招聘Python工程师标准>>> 布局的传统解决方案,基于盒状模型,依赖 display 属性 + position 属性 + float 属性.它对于那些特殊 ...

  9. 《从零开始学Swift》学习笔记(Day5)——我所知道的标识符和关键字

     Swift 2.0学习笔记(Day5)--我所知道的标识符和关键字   原创文章,欢迎转载.转载请注明:关东升的博客 好多计算机语言都有标识符和关键字,一直没有好好的总结,就是这样的用着,现在小 ...

最新文章

  1. CSS中的BFC机制
  2. mybaits二十八:逆向工程
  3. python 颤音_自成一派,这个作曲大师确实名副其实!
  4. 数据集shuffle方法中buffer_size的理解
  5. 继承 :5、程序设计 类:汽车类 属性:排量(outPut),颜色(color) 行为:驾驶(drive)
  6. 适用于Java开发人员的Elasticsearch:简介
  7. EasyUI加zTree使用解析 easyui修改操作的表单回显方法 验证框提交表单前验证 datagrid的load方法
  8. 沉降观测曲线图 沉降观测汇总_这些沉降观测要求,工程人必须掌握!
  9. python使用如下方法规范化数组_python – 根据数组的符号将数组中列的元素规范化为1或-1...
  10. C++ 杂七杂八的东西
  11. css制作tips提示框,气泡框,制作三角形
  12. 在css中使用hover来控制其他元素的样式,该两个元素必须是父子元素
  13. python面试通关_Python面试通关宝典
  14. Selenium和Firefox对应版本
  15. struts2和hibernate的简单新闻发布系统_点赞!北斗卫星导航系统28nm工艺芯片已量产,全球范围定位精度优于10米...
  16. android 打开微信代码,3个超实用的微信隐藏代码,仅限安卓
  17. 如何出一幅具有三维立体显示的地形示意图
  18. 整理一些个人常用的windows软件
  19. es中单机部署状态为Yellow解决办法
  20. 阿里M8级大神整理出SQL手册:收获不止SQL优化,抓住SQL的本质

热门文章

  1. mysql binlog恢复sql_binlog2sql实现MySQL误操作的恢复
  2. java爬虫面试题_使用Java实现网络爬虫
  3. 网页右边固定php,左侧固定,右侧自适应的布局方式
  4. HDLBits 系列(29)PS/2 mouse protocol(PS/2 packet parser and datapath)
  5. RS232 波特率时钟产生方法?
  6. Linux学习4之常用命令--文件搜索命令
  7. 对java多线程里Synchronized的思考
  8. 努力学习 HTML5 (2)—— 元素的增和删
  9. 微信公众平台开发 - 动手篇。使用weinxinFundation开始一个微信公众平台的开发
  10. cocos2d-x 从onEnter、onExit、 引用计数 谈内存泄露问题