0

0

深入理解CSS弹性盒模型flex_html/css_WEB-ITnose

php中文网

php中文网

发布时间:2016-06-24 11:22:19

|

1420人浏览过

|

来源于php中文网

原创

× 目录 [1]版本更迭 [2]display [3]基本概念 [4]伸缩容器 [5]伸缩项目

前面的话

  css3引入了一种新的布局模型——flex布局。flex是flexible box的缩写,一般称之为弹性盒模型。和css3其他属性不一样,flexbox并不是一个属性,而是一个模块,包括多个css3属性。flex布局提供一种更加有效的方式来进行容器内的项目布局,以适应各种类型的显示设备和各种尺寸的屏幕

 

版本更迭

  flexbox布局的语法规范经过几年发生了很大的变化。从2007年07月,flex第一版本的工作草案发布,到2012年09月,flex最新版本成为候选推荐。flex主要经历了三个版本

【1】旧版本 display:box | inline-box;

  该版本IE浏览器不支持,且其他浏览器和移动端都需要添加前缀,但移动端可以兼容到andriod2.1和ios3.2

立即学习前端免费学习笔记(深入)”;

【2】混合版本 display:flexbox | inline-flexbox;

  该版本只有IE10支持,且需要添加前缀-ms-

【3】新版本 display: flex | inline-flex

  该版本兼容IE11+、firefox、safari、chrome、opera及移动端,但移动端ios7.1-8.4需要添加前缀-webkit-

 

display

  要让一个元素变成伸缩容器,需要使用display属性。采用flex布局的元素,称为伸缩容器(flex container),容器内的子元素称为伸缩项目(flex item)

  [注意]浏览器会将任何直接在伸缩容器里的连续文字块包起来成为匿名伸缩项目

  使用flex布局实现上是使元素FFC化(flex formatting context伸缩格式化上下文),FFC是普通流的一种。而浮动流和定位流以及CSS其他属性对FFC是有影响的,主要表现在以下几点:

  [1]float、clear和vertical-align属性在伸缩项目上没有效果

  [2]伸缩容器的margin与其内容的margin不会重叠

  [3]text-align属性在伸缩容器上没有效果,因为其只可应用于块级block容器

  [4]另外,conlumns属性伸缩容器上没有效果

  弹性盒模型的两种容器块级伸缩容器和内联伸缩容器的区别类似于block和inline-block的区别,一个独占一行,另一个非独占一行

//弹性盒模型: 块级伸缩容器 | 内联伸缩容器//新版本display: flex | inline-flex;//混合版本display: flexbox | inline-flexbox;//旧版本display: box | inline-box;

 

基本概念

  伸缩容器默认存在两条轴: 水平的主轴(main axis) 和垂直的侧轴(cross axis)

  [注意]主轴方向不一定是水平的,它主要取决于justify-content属性

  主轴起点叫main start,主轴终点叫main end;侧轴起点叫cross start,侧轴终点叫cross end

  伸缩项目默认沿主轴排列。单个伸缩项目占据的主轴空间叫main size ,占据的侧轴空间叫cross size

  [注意]伸缩项目的main size和cross size主要由宽度或高度决定

 

伸缩容器

  以下6个属性作用在伸缩容器上

  伸缩流方向 flex-direction

  伸缩流换行 flex-wrap

  伸缩流(包括方向与换行) flex-flow

  主轴对齐 justify-content

  侧轴对齐 align-items

  堆栈伸缩行 align-content

【1】伸缩流方向:指定主轴的方向(即伸缩项目在伸缩容器中的排列方向)

//伸缩流方向: 水平方向 | 反向水平 | 垂直方向 | 反向垂直//新版本同混合版本flex-direction: row[默认] | row-reverse | column | column-reverse//旧版本box-orient: horizontal(水平) |vertical(垂直) |inline-axis[默认](内联轴方向) |block-axis(块级轴方向)box-direction: normal(正常) | reverse(反向) 

  [注意]伸缩流方向与direction和wrinting-mode有关系

【2】伸缩流换行:指定伸缩项目溢出伸缩容器时是否换行

//伸缩行换行:不换行 | 换行 | 反转换行//新版本同混合版本flex-wrap: nowrap[默认] | wrap | wrap-reverse//旧版本,没有浏览器支持box-lines属性,所以在旧版本中无法实现伸缩项目换行显示box-lines: single[默认] | multiple | N/A

  [注意]此时,CSS允许使用overflow属性来处理溢出内容的显示方式

  [注意]伸缩项目的排列顺序同样与direction和wrinting-mode有关系

【3】伸缩流:伸缩流方向与伸缩行换行的缩写

//伸缩流: 伸缩流方向 | 伸缩行换行//新版本同混合版本flex-flow: <flex-direction> | <flex-wrap> [默认值] flex-flow: row nowrap//旧版本无对应属性

【4】主轴对齐:用来设置伸缩容器当前行伸缩项目在主轴方向的对齐方式,指定如何在伸缩项目之间分布伸缩容器额外空间

千帆大模型平台
千帆大模型平台

面向企业开发者的一站式大模型开发及服务运行平台

下载

  当一行上的所伸缩项目不能伸缩或可伸缩已达到最大长度时,这一属性才会对伸缩容器额外空间进行分配。当伸缩项目溢出某一行时,这一属性也会在项目的对齐上施加一些控制

//主轴对齐方式: 左对齐 | 居中对齐 | 右对齐 | 两端对齐 | 扩散对齐//新版本justify-content: flex-start[默认] | center | flex-pack | flex-end | space-around//混合版本flex-pack: start[默认] | center | end | justify | distribute//旧版本box-pack: start[默认] | center | end | justify | N/A

  [注意]主轴对齐方式与direction、writing-mode、flex-flow都有关

【5】侧轴对齐:用来设置伸缩容器当前行在侧轴方向的对齐方式

//侧轴对齐方式: 顶边对齐 | 中间对齐 | 底部对齐 | 基线对齐 | 伸缩项目拉伸填充整个伸缩容器//新版本align-items: flex-start | center | flex-end | baseline | stretch[默认]//混合版本flex-align: start | center | end | baseline | stretch[默认]//旧版本box-align: start | center | end | baseline | stretch[默认]

  [注意]如果伸缩项目有width/height属性将优先于侧轴对齐为拉伸的方式

  [注意]侧轴对齐方式与direction、writing-mode、flex-flow都有关

【6】堆栈伸缩行:指定多个伸缩项目行在侧轴的对齐方式

//侧轴对齐方式: 顶边对齐 | 中间对齐 | 底部对齐 | 两端对齐 | 扩散对齐 | 伸缩项目拉伸填充整个伸缩容器//新版本align-content: flex-start | center | flex-end | space-between | space-around | stretch[默认]//混合版本flex-line-pack: start | center | end | justify | distribute | stretch[默认]//旧版本无对应属性

  [注意]该属性只有在flex-wrap:wrap | wrap-reverse;且伸缩项目存在多行时才生效

  [注意]堆栈伸缩行与direction、writing-mode、flex-flow都有关

 

伸缩项目

  一个伸缩项目就是伸缩容器的一个子元素。伸缩容器中的文本也被视为一个伸缩项目。以下6个属性设置在伸缩项目上。

  自身侧轴对齐方式 align-self

  伸缩基准值 flex-basis

  扩展比率 flex-grow

  收缩比率 flex-shrink

  伸缩性 flex

  显示顺序 order

【1】自身侧轴对齐方式:单个伸缩项目在侧轴的对齐方式,该属性可以覆盖伸缩容器的侧轴对齐方式

  [注意]对于匿名伸缩项目,align-self的值永远与其关联的伸缩容器的align-items的值相同

//侧轴对齐方式: 自动 | 顶边对齐 | 中间对齐 | 底部对齐 | 基线对齐 | 伸缩项目拉伸填充整个伸缩容器//新版本align-self: auto[默认] | flex-start | center | flex-end | baseline | stretch//混合版本flex-item-align: auto[默认] | start | center | end | baseline | stretch//旧版本无对应属性

  [注意]如果align-self的值为auto,则其计算值为伸缩项目的伸缩容器的align-items值

  [注意]如果伸缩项目的任一个侧轴上的外边距为auto,则该伸缩项目在伸缩容器的剩余空间内居中对齐,且align-self没有效果。

【2】伸缩基准值: 伸缩项目在主轴方向上的初始大小

//新版本flex-basis: <length> | auto[默认]//混合版本positive-flex: <number>[默认为1]//旧版本无对应属性

  如果flex-basis的值为0,表示伸缩项目在主轴方向上的初始大小为0,则分配所有空间;如果flex-basis的值为auto,表示伸缩项目在主轴方向上的初始大小为其本身的大小,则分配剩余空间

  [注意]flex-basis的值可以是一个数字后面跟着px、em等单位,也可以是一个百分数,相对于其父伸缩容器的主轴长度

【3】扩展比率: 当伸缩容器的额外空间为正值时,此伸缩项目相对伸缩容器里其他伸缩项目能扩展的空间比例

//新版本flex-grow: <number>[默认为0]//混合版本positive-flex: <number>[默认为0]//旧版本无对应属性

  若flex-grow的值为0表示即使存在剩余空间也不放大;若所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话);若一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍

【4】收缩比率:当伸缩容器的额外空间为负值时,此伸缩项目相对于伸缩容器里其他伸缩项目能收缩的空间比例

//新版本flex-shrink: <number>[默认为1]//混合版本negative-flex: <number>[默认为0]//旧版本无对应属性

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

  [注意]伸缩基准值、扩展比率和收缩比率都可以为小数,但不能为负数

【5】伸缩性:是扩展比率、收缩比率和伸缩基准值的缩写

    flex: none => flex: 0 0 auto;    flex: auto => flex: 1 1 auto;    flex: 0 => flex: 0 1 0%;    flex: 1 => flex: 1 1 0%;    flex: 0 auto => flex: 0 1 auto;    flex: 0 1 => flex: 0 1 0%;

  [注意]当flex为关键字none或存在auto时,flex-basis为auto;若flex只有数字值,则flex-basis为0%;

//新版本flex: none[默认] | [<flex-grow> <flex-shrink>? || <flex-basis>]//混合版本flex: none[默认] | [<pos-flex> <neg-flex>? || <pre class="brush:php;toolbar:false;"ferred-size>]//旧版本box-flex: <number>[默认为0]

【6】显示顺序: 定义伸缩项目的排列顺序,数值越小,排列越靠前

  [注意]伸缩容器中的伸缩项目默认显示顺序是遵循文档在源码中出现的先后顺序(HTML文档的DOM结构中的先后顺序)

//新版本order: <number>[默认为0]//混合版本flex-order: <number>[默认为0]//旧版本box-ordinal-group: <integer>[默认为1]

  [注意]order的属性值可以是负数,但不能是小数

相关文章

HTML速学教程(入门课程)
HTML速学教程(入门课程)

HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

705

2026.02.13

微博网页版主页入口与登录指南_官方网页端快速访问方法
微博网页版主页入口与登录指南_官方网页端快速访问方法

本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。

233

2026.02.13

Flutter跨平台开发与状态管理实战
Flutter跨平台开发与状态管理实战

本专题围绕Flutter框架展开,系统讲解跨平台UI构建原理与状态管理方案。内容涵盖Widget生命周期、路由管理、Provider与Bloc状态管理模式、网络请求封装及性能优化技巧。通过实战项目演示,帮助开发者构建流畅、可维护的跨平台移动应用。

117

2026.02.13

TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

22

2026.02.13

Redis高可用架构与分布式缓存实战
Redis高可用架构与分布式缓存实战

本专题围绕 Redis 在高并发系统中的应用展开,系统讲解主从复制、哨兵机制、Cluster 集群模式及数据分片原理。内容涵盖缓存穿透与雪崩解决方案、分布式锁实现、热点数据优化及持久化策略。通过真实业务场景演示,帮助开发者构建高可用、可扩展的分布式缓存系统。

61

2026.02.13

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

30

2026.02.12

雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法
雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法

本专题系统整理雨课堂网页版官方入口及在线登录方式,涵盖账号登录流程、官方直连入口及平台访问方法说明,帮助师生用户快速进入雨课堂在线教学平台,实现便捷、高效的课程学习与教学管理体验。

15

2026.02.12

豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法
豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法

本专题汇总豆包AI官方网页版入口及在线使用方式,涵盖智能写作工具、图片生成体验入口和官网登录方法,帮助用户快速直达豆包AI平台,高效完成文本创作与AI生图任务,实现便捷智能创作体验。

669

2026.02.12

PostgreSQL性能优化与索引调优实战
PostgreSQL性能优化与索引调优实战

本专题面向后端开发与数据库工程师,深入讲解 PostgreSQL 查询优化原理与索引机制。内容包括执行计划分析、常见索引类型对比、慢查询优化策略、事务隔离级别以及高并发场景下的性能调优技巧。通过实战案例解析,帮助开发者提升数据库响应速度与系统稳定性。

58

2026.02.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
swoole进程树解析
swoole进程树解析

共4课时 | 0.2万人学习

golang和swoole核心底层分析
golang和swoole核心底层分析

共3课时 | 0.2万人学习

WEB前端教程【HTML5+CSS3+JS】
WEB前端教程【HTML5+CSS3+JS】

共101课时 | 9.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号