理解CSS3 Flexbox

简介:

一、前言

Flexbox 是一个 CSS3 的盒子模型 ( box model ),顾名思义它就是一个灵活的盒子 ( Flexible Box ),为什麽最近这个属性才红起来呢?最主要也是因为 CSS3 的规范终于普及 ( 或 IE 终于败亡 ),加上行动装置的发展促成了响应式布局兴起,自适应长宽弹性相当大的 Flexbox 就趁势而起了。

第一步要来看 Flexbox 的盒子模型,根据 W3C 文章所描述,flex 的盒子模型如下图所呈现,与一般的盒子模型不同的地方,在于 Flexbox 的盒子模型具有水平的起点与终点 ( main start、main end ),垂直的起点与终点 ( cross start、cross end ),水平轴与垂直轴 ( main axis、cross axis ),然后元素具有水平尺寸与垂直尺寸 ( main size、cross size ),这些都是相当重要的布局规画。

2017-5-12-FEW-flexbox%20layout-1.jpg

再来我们先看看 Flexbox 有哪些属性,也可参考MDN的使用 CSS 弹性盒子

  • display

  • flex-direction

  • justify-content

  • align-items

  • align-self

  • align-content

  • flex-wrap

  • order

  • flex

二、属性介绍

A、display

display 是我们熟知的 CSS 属性,对于 Flexbox 来说,多了有两种方式可以设定,预设为「flex」,其布局方式与 block 几乎类似,都会强迫换行,但设定display:flex的子元素却具备了更多弹性的设定。

此外另外一种方式则是「inline-flex」,和 inline-block 也是几乎雷同,意义上都是一个display:flex的元素外面包覆display:inline的属性,在后方的元素不会换行。

这样做将元素定义为弹性容器,其子元素则成为弹性项目。值 flex 使弹性容器成为块级元素。值 inline-flex 使弹性容器成为单个不可分的行内级元素。

2017-5-12-FEW-flexbox%20layout-2.png

2017-5-12-FEW-flexbox%20layout-3.png

B、flex-direction

flex-direction 表示 Flexbox 內容元素的「排列方向」,分別有下列四种。

  • row:预设值,由左到右,从上到下

  • row-reverse:与 row 相反

  • column:从上到下,再由左到右

  • column-reverse:与 column 相反

2017-5-12-FEW-flexbox%20layout-4.png
2017-5-12-FEW-flexbox%20layout-5.jpg

C、justify-content

justify-content 决定了内容元素与整个 Flexbox 的「水平对齐」位置,回想一下最上面讲的 Flexbox 盒子模型,具有 main start 与 main end 左右两个端点,justify-content 就是按照这个方式做设定,而其中的设定值总共有下列五个。

  • flex-start:预设值,对齐最左边的 main start

  • flex-end:对齐最左边的 main end

  • center:水平置中

  • space-between:平均分配内容元素,左右元素将会与 main start 和 main end 贴齐

  • space-around:平均分配内容元素,间距也是平均分配

2017-5-12-FEW-flexbox%20layout-6.png

2017-5-12-FEW-flexbox%20layout-7.jpg

D、align-items

align-items 刚好和 justify-content 相反,align-items 决定了内容元素与整个 Flexbox 的「垂直对齐」位置,再回想一下最上面讲的 Flexbox 盒子模型,具有 cross start 与 cross end 左右两个端点,align-items 与 align-self 就是按照这个方式做设定,设定值总共有下列五个。

  • flex-start:预设值,对齐最上面的 cross start

  • flex-end:对齐最下面的 cross end

  • center:垂直置中

  • stretch:将内容元素全部撑开至 Flexbox 的高度

  • baseline:以所有内容元素的基线作为对齐标准

2017-5-12-FEW-flexbox%20layout-8.png

2017-5-12-FEW-flexbox%20layout-9.jpg

E、align-self

align-self 的设定与 align-items 相同,但目的不同,align-self 的作用在于覆写已经套用 align-items 的属性,如果照我们以前所写,因为 align-items 是针对子元素,所以必须要用 align-self 来进行覆写,我们直接用上一个范例来修改就很清楚了。

  • auto

设置为父元素的 align-items 值,如果该元素没有父元素的话,就设置为 stretch。

  • flex-start

flex 元素会对齐到 cross-axis 的首端。

2017-5-12-FEW-flexbox%20layout-10.png

  • flex-end
    flex 元素会对齐到 cross-axis 的尾端。

2017-5-12-FEW-flexbox%20layout-11.png

  • center
    flex 元素会对齐到 cross-axis 的中间,如果该元素的 cross-size 的尺寸大于 flex 容器,将在两个方向均等溢出。

2017-5-12-FEW-flexbox%20layout-12.png

  • baseline
    所有的 flex 元素会沿着基线对齐。

2017-5-12-FEW-flexbox%20layout-13.png

  • stretch
    flex 元素将会基于容器的宽和高,按照自身 margin box 的 cross-size 拉伸。

2017-5-12-FEW-flexbox%20layout-14.png

F、align-content

刚刚谈到的 align-items 是针对内容为单行的元素进行处理,如果遇到多行的元素,就要使用 align-content 这个属性,这个属性总共有六个设定值。( 范例:css-flexbox-demo6.html、W3C 说明 )

  • flex-start:预设值,对齐最上面的 cross start

  • flex-end:对齐最下面的 cross end

  • center:垂直置中

  • space-between:将第一行与最后一行分别对齐最上方与最下方

  • space-around:每行平均分配间距

  • stretch:内容元素全部撑开

2017-5-12-FEW-flexbox%20layout-15.png

2017-5-12-FEW-flexbox%20layout-16.jpg

G、flex-wrap

在刚刚的范例看到一个 flex-wrap 的属性,这个属性负责的是让内容的元素换行,因为当我们把父元素的 display 设定为 flex 或 inline-flex 的时候,子元素就是以单行的方式,弹性撑满父元素,所以就要利用 flex-wrap 来换行,共有三个设定值。( 范例:css-flexbox-demo7.html)

  • nowrap:预设值,单行

  • wrap:多行

  • wrap-reverse:多行,但内容元素反转

2017-5-12-FEW-flexbox%20layout-17.png

2017-5-12-FEW-flexbox%20layout-18.jpg

H、order

刚刚在 flex-wrap 的属性里头看到了可以把元素反转,order 这个属性更是可以直接指定一个数字,就可以由小到大的排列顺序

2017-5-12-FEW-flexbox%20layout-19.png

2017-5-12-FEW-flexbox%20layout-20.jpg

I、flex

好酒沉瓮底,有耐心看到下面的才会看到重点喔哈哈!flex 应该是 Flexbox 里头最重要的属性了,而 flex 其实是由三个属性组合而成,依照先后顺序分别是「flex-grow」、「flex-shrink」和「flex-basis」,如果 flex 只填了一个数值 ( 无单位 ),那麽预设就是以 flex-grow 的方式呈现,至于三个属性的解释如下:

flex-grow:数字,无单位,当子元素的 flex-basis 长度「小」于它自己在父元素分配到的长度,按照数字做相对应的「伸展」比例分配,预设值为 1,设为 0 的话不会进行弹性变化,不可为负值。

flex-shrink:数字,无单位,当子元素的 flex-basis 长度「大」于它自己在父元素分配到的长度,按照数字做相对应的「压缩」比例分配,预设值为 1,设为 0 的话不会进行弹性变化,不可为负值。

flex-basis:子元素的基本大小,作为父元素的大小比较基准,预设值为 0,也因为预设值为 0,所以没有设定此属性的时候,会以直接採用 flex-grow 属性,flex-basis 也可以设为 auto,如果设为 auto,就表示子元素以自己的基本大小为单位。。

三个属性可以分开设定,也可以合在一起用一个 flex 统一设定,下面的例子展现出同一个 Flexbox,在不同的宽度,子元素会有不同大小的呈现。

HTML代码:

2017-5-12-FEW-flexbox%20layout-21.png

CSS代码:

2017-5-12-FEW-flexbox%20layout-22.png

2017-5-12-FEW-flexbox%20layout-23.jpg

如果用动画来表现,可以看出拉长的时候红色会变得比蓝色长,但压缩的时候却是蓝色变得比红色长,如此一来就更能体会 flex 在响应式设计里头的关键脚色萝!

2017-5-12-FEW-flexbox%20layout-24.gif

以上就是 Flexbox 的完整介绍,想不到一个 CSS3 的属性,可以花费这麽大一篇来介绍,不过也因为有了这个新的属性,让在做 layout 的佈局又更加弹性。














本文转自xsster51CTO博客,原文链接:http://blog.51cto.com/12945177/1932226 ,如需转载请自行联系原作者




相关文章
|
前端开发 架构师 容器
CSS Flexbox与Grid:构建响应式布局的艺术
本文介绍了Flex弹性布局和Grid网格布局。Flex布局中,`display: flex`开启布局,`flex-direction`定义主轴方向,`flex-wrap`控制换行,`justify-content`和`align-items`分别调整主轴和交叉轴对齐。Grid布局中,`display: grid`开启布局,`grid-template-columns/rows`定义网格轨道,`grid-gap`设置间距。两者结合可创建复杂响应式布局。选择Flexbox处理一维布局,Grid则适合二维布局。
364 0
|
前端开发 JavaScript 开发者
掌握 CSS 弹性布局(Flexbox):构建复杂页面布局的高效秘籍与实战案例
CSS弹性布局(Flexbox)是现代网页设计中构建复杂页面布局的高效工具。本文将深入浅出地介绍Flexbox的核心概念、使用技巧及实际应用案例,帮助读者快速掌握这一强大布局方法。
|
容器 C# 开发者
XAML语言大揭秘:WPF标记的魅力所在,让你轻松实现界面与逻辑分离,告别复杂代码!
【8月更文挑战第31天】XAML提供了一种直观且易于维护的界面设计方式,使得开发者可以专注于逻辑和业务代码的编写,而无需关心界面细节。通过数据绑定、布局管理和动画效果等特性,XAML可以实现丰富的界面交互和视觉效果。在实际开发过程中,开发者应根据具体需求选择合适的技术方案,以确保应用程序能够满足用户的需求。希望本文的内容能够帮助您在WPF应用程序开发中更好地利用XAML语言。
235 1
|
前端开发 容器
【CSS Flexbox 探秘】弹性盒模型:揭秘网页布局的终极神器!
【8月更文挑战第25天】Flexbox 是 CSS3 中的关键特性,为网页设计提供了强大的布局能力。本文通过问答形式全面解析 Flexbox 的核心概念与属性,包括容器与项目属性,并通过示例演示如何使用 Flexbox 实现水平与垂直居中、等间距布局及响应式设计。相较于传统布局方法,Flexbox 更加灵活且简化了样式设置,同时在现代浏览器中拥有良好的支持度。掌握 Flexbox 对于提升网页布局效率至关重要。
357 1
|
前端开发 开发者 容器
CSS进阶-Flexbox高级布局技巧
【6月更文挑战第16天】Flexbox是CSS3的布局模块,简化响应式设计和复杂多列布局。文章探讨了Flex容器与项目属性的区分、垂直居中、防止元素溢出等常见问题及解决方案。此外,还分享了等宽不同高列、圣杯布局和自适应间距等高级技巧。通过示例展示了如何创建垂直居中布局,强调实践和理解核心概念是掌握Flexbox的关键。
535 10
|
前端开发 容器
CSS Flexbox(弹性布局)
CSS Flexbox(弹性布局)
789 2
|
前端开发 开发者 容器
CSS基础-Flexbox布局基础
【6月更文挑战第11天】Flexbox是CSS3的全新布局模式,简化了网页动态布局问题。通过`display: flex`设置容器,调整`flex-direction`、`justify-content`、`align-items`等属性控制项目排列和对齐。适用于响应式布局、均匀分布空间和元素对齐。注意浏览器兼容性、选择合适布局模式及区分对齐与排序属性。通过实例代码学习和实践,掌握Flexbox能有效提升网页布局效率。
245 3
|
前端开发 开发者 UED
【专栏:HTML与CSS前端技术趋势篇】网页设计中的CSS Grid与Flexbox之争
【4月更文挑战第30天】本文对比了CSS Grid和Flexbox两种布局工具。Flexbox擅长一维布局,简单易用,适合导航栏和列表;CSS Grid则适用于二维布局,能创建复杂结构,适用于整个页面布局。两者各有优势,在响应式设计中都占有一席之地。随着Web标准发展,它们的结合使用将成为趋势,开发者需掌握两者以应对多样化需求。
428 5
|
前端开发
Web网页制作-知识点(4)——CSS盒子模型、弹性盒模型(flex box)、文档流、浮动、清除浮动、定位、圆角、阴影二
Web网页制作-知识点(4)——CSS盒子模型、弹性盒模型(flex box)、文档流、浮动、清除浮动、定位、圆角、阴影二
211 0
|
前端开发 容器
Web网页制作-知识点(4)——CSS盒子模型、弹性盒模型(flex box)、文档流、浮动、清除浮动、定位、圆角、阴影(一)
Web网页制作-知识点(4)——CSS盒子模型、弹性盒模型(flex box)、文档流、浮动、清除浮动、定位、圆角、阴影一
385 0

热门文章

最新文章

  • 1
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
    401
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
    305
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
    271
  • 4
    (CSS)使用Flex布局,帮助你快速了解各种基本的Flex布局属性以及帮你让元素快速达到布局中的指定位置!
    184
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
    399
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
    582
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
    613
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
    187
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
    527
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
    343