L6.Flexbox 伸缩盒模型

http://www.w3.org/TR/2014/WD-css-flexbox-1-20140325/

1 Introduction

CCS2.1中规定了四种布局模式:

  • block layout, designed for laying out documents
  • inline layout, designed for laying out text
  • table layout, designed for laying out 2D data in a tabular format
  • positioned layout, designed for very explicit positioning without much regard for other elements in the document

Flexbox(伸缩布局盒) 是 CSS3 中一个新的布局模式,用于复杂的布局(designed for laying out more complex applications and webpages)

例子:

<style>
#deals {
  display: flex;        /* Flex layout so items have equal height  */
  flex-flow: row wrap;  /* Allow items to wrap into multiple lines */
}
.sale-item {
  display: flex;        /* Lay out each item using flex layout */
  flex-flow: column;    /* Lay out item’s contents vertically  */
}
.sale-item > img {
  order: -1;            /* Shift image before other content (in visual order) */
  align-self: center;   /* Center the image cross-wise (horizontally)         */
}
.sale-item > button {
  margin-top: auto;     /* Auto top margin pushes button to bottom */
}
</style>

2、Terminology 术语

Flexbox 由 伸缩容器 和 伸缩项目 组成。通过设置元素的 display 属性为 flex 或 inline-flex 可以得到一个伸缩容器。设置为 flex 的容器被渲染为一个块级元素,而设置为 inline-flex 的容器则渲染为一个行内元素。

下图是可以看出flex-flow与之前熟悉的元素的映射关系。The flex-flow value determines how these terms map to physical directions (top/right/bottom/left), axes (vertical/horizontal), and sizes (width/height).

Flexbox 定义了伸缩容器内伸缩项目该如何布局。

Flexbox 使用 主轴 和 侧轴的概念。伸缩行跟随主轴。侧轴则垂直于主轴。

  • 主轴起点 Main Start
  • 主轴终点 Main End
  • 主轴方向 Main Direction (有时候也成为伸缩流方向 Flow Direction)
  • 侧轴起点 Cross Start
  • 侧轴终点 Cross End
  • 侧轴方向 Cross Direction

3 Flex Containers: the flex and inline-flex display values

display 值有两种

flex :生成一个块级伸缩容器box

inline-flex: 生成一个内联伸缩容器box

Flex 容器与之前的块级元素和内联元素不同,因此很多针对块级元素定义的属性在伸缩容器内是没效果的。(如column-*,float,clear等

4 Flex Items

4.1 Absolutely-Positioned Flex Children
4.2 Flex Item Margins and Paddings
4.3 Flex Item Z-Ordering
4.4 Collapsed Items 项目折叠

设置伸缩元素的 visibility:collapse ,

目前为止,visibility: collapse; 还没有被让任何浏览器正确的实现。

4.5 Implied Minimum Size of Flex Items

5 Ordering and Orientation

伸缩容器的内容可以从任何方向任何顺序铺展。主要通过 flex-direction,flex-wrap, and order这三个属性

5.1 flex-direction 伸缩流的方向
  • 默认值是 row:该值表示伸缩项目根据书写模式的方向布局(Flex Flow Direction)
  • row-reverse: 主轴起点和主轴终点交换。如果书写模式是从左至右,伸缩项目则是从右往左显示。
  • column: 主轴和侧轴交换。如果书写模式是垂直的(从上到下),那么伸缩项目也是垂直显示的(从上到下)。
  • column-reverse: 和 column 一样,但是方向相反。
5.2 伸缩行换行: the flex-wrap property

nowrap | wrap | wrap-reverse

单行,多行,多行且从cross-end 往cross-start

如果 flex-wrap 设置为 wrap,在一个伸缩行容不下所有伸缩项目时,伸缩项目会换行到一条新增的伸缩行上。新增的伸缩行根据侧轴的方向添加。若为wrap-reverse,则从侧轴反方向添加

5.3 Flex Direction and Wrap: the
flex-flow shorthand

flex-direction 和flex-wrap 的缩写。

div1 { flex-flow: row; }

/* Initial value. Main-axis is

inline, no wrap. */

div2 { flex-flow: column wrap; }

/* Main-axis is block-direction (top to bottom)

and lines wrap in the inline direction (rightwards). */

div3 { flex-flow: row-reverse wrap-reverse; }

/* Main-axis is the opposite of inline direction

(right to left). New lines wrap upwards. */

NOTE: 以上三个属性都是相对writing-mode而言的。

5.4 显示顺序: order

如果需要文档顺序(html的顺序)和显示顺序不同时,用order,order默认值为0,设为-1将显示在最前面。

6 Flex Lines

  • single-line 即使内容可能溢出也放在一行里
  • multi-line  多行

7 Flexibility

7.1 The flex Shorthand

none | [ <‘flex-grow’><‘flex-shrink’>? || <‘flex-basis’> ]

flex: 0 auto

flex: initial flex: 0 1 auto.

元素在有剩余空间的情况下不会有任何变化,但是在必要的情况下会被收缩。

flex: auto =flex: 1 1 auto.

元素会根据主轴自动伸缩以占用所有剩余空间,可以通过使用 flex: 1; 来达到一样的效果

flex: none=flex: 1 1 auto.

在任何情况都不会发生伸缩。

flex: <positive-number> : 指定一个数字,代表了这个伸缩项目该占用的剩余空间比例。剩余空间被所有指定flex的伸缩元素瓜分。

7.3 Components of Flexibility

8 Alignment校准

块级元素中的margin在伸缩盒中,能做同样的事情,但是更加强大。

8.1 Aligning with auto margins

margin:auto垂直居中
#login {
  margin-left: auto;
} 导致了所有的剩余空间被合并到login元素的左边去了

auto margins 和alignment properties的区别:

  • 左图:margin:auto 右图:(侧轴对齐align-self:center),当这个ul在页面的最左边时,左图是合理的布局。

8.2 Axis Alignment:

the justify-content property主轴对齐(水平方向)

flex-start | flex-end | center | space-between | space-around

8.3 Cross-axis Alignment:

the align-items and align-self properties侧轴对齐(竖直方向)

flex-start | flex-end | center | baseline | stretch

8.4 Packing Flex Lines:  align-content 堆栈伸缩行

与 align-items 相似,不过不是对齐伸缩项目,它对齐的是伸缩行

flex-start | flex-end | center | space-between | space-around | stretch

8.5 Flex Baselines

main-axis baseline

cross-axis baseline

9 Flex Layout Algorithm

L6.Flexbox 伸缩盒模型

时间: 2024-08-28 22:35:04

L6.Flexbox 伸缩盒模型的相关文章

深入了解 Flexbox 伸缩盒模型

Flexbox(伸缩布局盒) 是 CSS3 中一个新的布局模式,为了现代网络中更为复杂的网页需求而设计.本文将介绍 Flexbox 语法的技术细节.浏览器的支持越来越快,所以当 Flexbox 被广泛支持并应用时你将会快人一步.如果你想知道它是什么并是如何工作的,不妨仔细了解下吧! 为什么需要伸缩布局盒(Flexbox)? 作者长期以来使用表格.浮动.行内块元素和其他 CSS 属性来布局网站内容.然而,这些并不是为复杂的页面和网页应用而设计的.不管是简单的垂直居中,还是灵活的网格布局都很难靠一己

【转】深入了解 Flexbox 伸缩盒模型

Flexbox(伸缩布局盒) 是 CSS3 中一个新的布局模式,为了现代网络中更为复杂的网页需求而设计.本文将介绍 Flexbox 语法的技术细节.浏览器的支持越来越快,所以当 Flexbox 被广泛支持并应用时你将会快人一步.如果你想知道它是什么并是如何工作的,不妨仔细了解下吧! 为什么需要伸缩布局盒(Flexbox)? 作者长期以来使用表格.浮动.行内块元素和其他 CSS 属性来布局网站内容.然而,这些并不是为复杂的页面和网页应用而设计的.不管是简单的垂直居中,还是灵活的网格布局都很难靠一己

Webkit Flex伸缩盒模型属性备忘

一个元素被定义display:-webkit-flex;则此元素即为伸缩盒模型中的伸缩容器,其包含的子元素是伸缩项目. flex是一个复合属性.Flexbox伸缩布局盒模型中的伸缩容器及伸缩特性定义. 由多个伸缩项目组成其具体的布局方式. 是为了呈现复杂的应用与页面而设计出来的. display:-webkit-flex; -webkit-flex: none | [flex-grow flex-shrink || flex-basis] | initial | auto none 在任何情况都

flexible伸缩盒模型

前言 flexible box即为可伸缩的盒模型,让容器能让其子元素自由改变宽高或顺序,以最佳的方式填充容器.可以让子元素扩展来填满可用空间,缩小来防止溢出.flexible box由伸缩容器和伸缩项目组成. 兼容性:IE10+.firefox.chrome.safari 基本术语 下面是一张伸缩盒模型的概念图: 1.flex container:伸缩容器 2.flex item:伸缩项目 3.main-axis:主轴 4.main-start:主轴起点 5.main-end:主轴终点 6.ma

CCS3 伸缩盒模型(最新)

CSS3伸缩盒对使用响应式布局的网站的开发带来了很好的实现方式.它可以在不使用浮动(float)和定位(position)的情况下实现块级(block)元素的水平排列.并且可以 把父元素的宽度按照比例分配子元素,闲话不多少直接看例子. 1.要实现伸缩盒模式必须给父元素设置:display:flex (老版本display:box 需要加对应的浏览器前缀),实现伸缩盒模式的显示方式. 2.通过设置子元素的flex-grow属性来分配比例 1 <div id="parent">

html5浮动、等高、弹性盒模型

1px dashed虚线 box-sizing拯救了布局 1.inherit  继承父级 2.content-box(默认)-----这个盒子的边框.内边距 这2个值是不包括在width和height中,所以外扩 3.border-box---- 这个盒子的边框.内边距 这2个值是包括在width和height中了 浮动就是让元素脱离了文档.文档为空后,所以边框就包不住了.所以我们要清除浮动 方法一:(有问题,不建议) 之前html是用clear来清除的,现在不能用这个了 <!-- 在父级里添加

Flex布局(伸缩盒布局)

Flexible Box是什么?Flexible意为可伸缩的,Box意为盒子,可以理解为一种新式的盒模型——伸缩盒模型.由CSS3规范提出,这是在原有的大家非常熟悉的block, inline-block, inline的基础上延伸出的新一代布局模式. 浏览器兼容性 作为非常现实的开发者,是否对一个新技术进行关注,首先要考虑它的浏览器兼容性如何.我们的伸缩盒模型的浏览器兼容性看起来还是相当不错的. 可以看到,现代浏览器基本上都支持了,IE10开始也支持了(IE和Safari分别加-ms-和-we

CSS3伸缩布局盒模型 - Flexbox基础知识

我们知道在CSS2中,可以使用“浮动”和“定位”来改变盒子在文档流中的显示方式.这两种方式也是目前广泛使用的布局方式,但是在实践过程中会发现有些特殊的布局没法或者很难通过这两种方式来实现.在CSS3中映入了伸缩布局盒模型的概念,这样可以使得某些难以实现的布局变得非常轻松. 使用Flexbox(Flexible Box)可以很好解决以下问题: 1,作为容器的盒子的宽度.高度等可以被其子元素改变.主要体现在改变子元素的宽高来填充可用空间或者防止溢出父元素 2,可以改变子元素的布局方向或者顺序. Fl

CSS3 Flexbox(伸缩盒/弹性盒模型)可视化指南

在http://css.doyoe.com/(CSS参考手册)中,本文对应其中的伸缩盒 引入 Flexbox布局官方称为CSS Flexible Box Layout Module是一个CSS3新的布局模块,用于实现容器里项目的对齐.方向.排序(即使在项目大小位置.动态生成的情况).flex容器最大的特性在于,能够修改子元素的宽度和高度,以满足在不同尺寸屏幕下的如意分布. 许多设计人员.开发人员发现flexbox布局方式使用简单,定位元素更加简单.复杂的布局更容易用较少的代码实现,大大地简化了开