惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Vercel News
Vercel News
Recorded Future
Recorded Future
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
The GitHub Blog
The GitHub Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Google DeepMind News
Google DeepMind News
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Microsoft Azure Blog
Microsoft Azure Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
M
MIT News - Artificial intelligence
云风的 BLOG
云风的 BLOG
Y
Y Combinator Blog
N
News | PayPal Newsroom
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Help Net Security
Help Net Security
博客园 - Franky
SecWiki News
SecWiki News
Recent Announcements
Recent Announcements
T
Troy Hunt's Blog
The Register - Security
The Register - Security
The Last Watchdog
The Last Watchdog
Webroot Blog
Webroot Blog
S
Security Affairs
博客园 - 司徒正美
S
Schneier on Security
I
InfoQ
博客园_首页
www.infosecurity-magazine.com
www.infosecurity-magazine.com
T
Threat Research - Cisco Blogs
Forbes - Security
Forbes - Security
腾讯CDC
N
Netflix TechBlog - Medium
N
News and Events Feed by Topic
Cloudbric
Cloudbric
T
The Exploit Database - CXSecurity.com
P
Proofpoint News Feed
A
About on SuperTechFans
Engineering at Meta
Engineering at Meta
Recent Commits to openclaw:main
Recent Commits to openclaw:main
B
Blog
V
Vulnerabilities – Threatpost
C
Check Point Blog
Google DeepMind News
Google DeepMind News
Google Online Security Blog
Google Online Security Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
Hacker News - Newest:
Hacker News - Newest: "LLM"
C
Cisco Blogs
Schneier on Security
Schneier on Security
O
OpenAI News
K
Kaspersky official blog

wuxinhua.com Blog | RSS Feed

写作者与不写作者:AI 时代的思考分水岭 - wuxinhua.com 一文搞懂 Prompt Engineering - wuxinhua.com #30 AI 颠覆我对传统创业团队的认知 - wuxinhua.com 前端面试系列 - 手写代码 - wuxinhua.com #29 微软与 OpenAI 合作内幕 - wuxinhua.com #28 离 30 岁越来越远 - wuxinhua.com Add AI Chatbox to your VitePress document site - wuxinhua.com Building a Blog Subscription and Pusher with AirCode and Resend - wuxinhua.com #27 创始人是公司灵魂的守护者 - wuxinhua.com 快速上手 Midjourney AI 做图 - wuxinhua.com Building your first Discord ChatGPT Bot - wuxinhua.com ChatGPT 机器人系列 - 用 JavaScript,五分钟将 Siri 接入 ChatGPT - wuxinhua.com ChatGPT 机器人系列 - 用 JavaScript 五分钟开发一个飞书 ChatGPT 机器人 - wuxinhua.com ChatGPT 机器人系列 - 用 JavaScript 开发企业微信 ChatGPT 聊天应用 - wuxinhua.com #26 SVB 硅谷银行为什么倒闭 - wuxinhua.com #25 人人都可以成为 AI 工程师 - wuxinhua.com #24 关注你身体的变化 - wuxinhua.com #23 Be positive - wuxinhua.com 前端面试系列 - 前端八股文 - wuxinhua.com #22 AI 在殖民,社交媒体在衰退 - wuxinhua.com #21 我了解到的新冠后遗症 - wuxinhua.com #20 关于死亡和告别 - wuxinhua.com #19 永远无法准备好 - wuxinhua.com macOS 前端开发环境配置 - wuxinhua.com 我的 Newsletter 321来信 - wuxinhua.com Node.js 包管理及 npm 依赖安装机制 - wuxinhua.com 知识的碎片(2021) - wuxinhua.com 放弃 newsfeed 拥抱 newsletter - wuxinhua.com 混迹于 Clubhouse 两周后的一些想法🤔 - wuxinhua.com 认识Docker - wuxinhua.com 知识的碎片(2020) - wuxinhua.com 初探 Web Components - wuxinhua.com Linux 命令行之 Crontab - wuxinhua.com 今年看的书📚(2019) - wuxinhua.com 适配 iOS 13 - wuxinhua.com React Native 新手常见问题及体验总结 - wuxinhua.com ES10(ECMAScript2019)特征预览 - wuxinhua.com 今年看的书📚(2018) - wuxinhua.com 《从0到1 - 如何创造未来 》书评 - wuxinhua.com www背后的故事 - wuxinhua.com contenteditable 踩坑记 - wuxinhua.com Good Code vs Bad Code in Golang - wuxinhua.com 关于React的几道面试题 - wuxinhua.com SVG动画实践 - wuxinhua.com 今年看的书📚(2017) - wuxinhua.com 对比几种常见的排序算法 - wuxinhua.com React服务端渲染(SSR)初探 - wuxinhua.com 从面试题“输入URL...发生了什么”学到的(下) - wuxinhua.com 从面试题“输入URL...发生了什么?”学到的(上) - wuxinhua.com ES6(ECMAScript 6.0)新特征 - wuxinhua.com 对React-redux中connect方法的理解 - wuxinhua.com 我的 RSS 订阅列表 - wuxinhua.com 《空谷幽兰》书评 - wuxinhua.com 你可能不知道git rerere - wuxinhua.com webpack v2升级踩坑笔记 - wuxinhua.com
Flexbox布局完全指南 - wuxinhua.com
2019-02-25 · via wuxinhua.com Blog | RSS Feed

为什么写这样一篇文章

欢迎来到 flexbox 的世界。我很乐意接受新的思想、观念,或者尝试新的工具,虽然这个过程并不是很顺利。使用 flexbox 对页面进行布局的时间不是很长,发现它真的很好用,日常使用还不够熟练,还得经常翻阮老师的Flex 布局教程:语法篇,于是索性自己总结一篇,一边在实际应用中使用flexbox,一边学习基础理论知识。本篇适用于所有刚接触到 flexbox 布局的同学,也适用于那些想更近一步了解 flexbox 的人,我将尽可能详细地用文字、图片、代码介绍、学习 flexbox 布局。

一些基础知识

display 属性

可以说display是开发者最为熟悉的一个属性,也是最为重要的一个属性,它指定元素的显示行为,准备得来说是规定了外部和内部显示属性的规则,来看 MDN 上对它的定义:

display CSS 属性指定了元素的显示类型,它包含两类基础特征,用于指定元素怎样生成盒模型——外部显示类型定义了元素怎样参与流式布局的处理,内部显示类型定义了元素内子元素的布局方式。

例如我们常用的一些:

1display: none; 2display: block; 3display: inline; 4display: inline-block; 5dispaly: table; 6display: flex; 7display: grid; 8

事实上每一个HTML标签都有一个默认的 display 属性值,例如:<div><p><ul> 等默认是block 块状元素,而 spanimgsvg 等默认 inline 行内元素,二者比较大的区别:

block元素:

  1. block 块状元素会占满整行的空间;
  2. 常规布局中块级是基于竖直方向的,即紧接着的另一个块级元素会另起一行排列;
  3. 能被设置 width、height 宽高;
  4. 能作为其它块状元素、行内元素的父标签;

inline元素:

  1. inline 行内元素则刚好相反,只占用它们需要的空间;
  2. 内联基于水平方向,行内元素一个紧挨着另一个;
  3. 不能被设置 width、height 宽高;
  4. 只能作为行内元素的父标签;

BFC与FFC

flexbox 布局重新定义了格式化上下文,这套规则叫 FFC(Flex Formatting Contexts),Formatting context 是 W3C CSS2.1 规范中的一个概念。它是页面中的一块渲染区域,并且有一套渲染规则,它决定了其子元素将如何定位,以及和其他元素的关系和相互作用。最常见的 Formatting context 有 Block fomatting context (简称BFC)和 Inline formatting context (简称IFC) FFC类似于 BFC(block formatting context),BFC对于前端开发来说一个必须了解掌握的概念,这里只做简单描述:

BFC(block formatting context"块级格式化上下文")

  1. 内部的块盒子会在垂直方向,一个接一个的布局;
  2. box垂直方向的距离由margin决定,两个相邻的box margin会重叠;
  3. BFC是一个隔离的独立容器,容器里的子元素不会影响到外面的元素,反之亦然;
  4. 计算BFC的高度时,浮动元素也参与计算;

FFC(Flex Formatting Contexts"自适应格式化上下文")

display 值为 flex 或 inline-flex 的元素会变成一个 flex 容器,内部元素变成子项目。容器是一个相对独立的渲染区域,会按照自适应渲染规则来布局。

flex基本概念

什么是flexbox

flex容器

flexbox 主要由 flex 容器和 flex 子项目组成,对应的有分别作用于这两者的一些属性;想要使用flex布局,得先指定一个容器,这样容器内的元素就能使用flex来进行布局,容器有两个取值 flex 和 inline-flex, 简单地来说,如果你的容器是一个块级元素,可以使用 flex,而行内元素则可以使用 inline-flex,值得注意的是二者均能将容器实现flex布局,不同的地方在用 flex 将会使容器变为块级元素,而 inline-flex 使容器变成行内元素。

1.container { 2 display: flex | inline-flex; 3}

子项

有了容器相应的也就有了容器内的item子项,后续会逐个介绍子项的一些属性:order flex-grow flex-shrink flex-basis flex align-self 等。

flex 属性

# flex-direction

flex-direction 属性控制Flex项目沿着主轴(Main Axis)、侧轴(Cross-Axis)的排列方向,在flex 世界中存在两个主轴:Main-Axis(主轴) 和 Cross-Axis(侧轴)它有以下选项:

1flex-direction: row(默认) | row-reverse | column | column-reverse 2

row flex容器的主轴与文本方向相同,以行(水平)方向排列: column 以列(垂直)方向排列:

row-reversecolumn-reverse 分别是行列的反向,如下图所示:

# flex-wrap

1flex-wrap: wrap(默认) | nowrap | wrap-reverse

决定 flex项目在容器内是否不换行排列,nowrap 默认是项目不进行换行:

当 flex 容器无法在一行内容纳所有的 flex 项目时会进行换行:

wrap-reverse 同样是多行排列,只是方向是相反的:

# flex-flow

flex-flow 是一个 flex-direction 及 Flex-wrap 组合简写。默认值为:row nowrap,例如:

1flex-flow: row wrap; 2// 等同于 3flex-direction: row 4flex-wrap: wrap

# justify-content

justify-content 定义了项目在主轴上的对齐方式。取值分别是:flex-start(左对齐)、 flex-end(右对齐)、center(居中)、 space-between(两端对齐)、space-around(均分间距,间距两侧对齐)、space-evenly(均分间距)均匀排列每个元素,每个元素之间的间隔相等

1 2justify-content: flex-start | flex-end | center | space-between | space-around 3

justify-content: flex-start 起始处左对齐

justify-content: center 居中对齐

justify-content: center 右对齐

justify-content: space-between 两端对齐

justify-content: space-between 间隔相等

# align-items

align-items 定义项目在交叉轴方向上的对齐方式

flex-start:项目元素向侧轴起点对齐、flex-end:元素向侧轴终点对齐。

1align-items: stretch | flex-start | flex-end | center | baseline;

flex-start:交叉轴的起点对齐
flex-end:交叉轴的终点对齐
center:交叉轴的中点对齐
baseline: 项目基线对齐。
stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度

以上几个都是设置在容器上的一些属性,接下来看下项目上可设置的属性:

1order 2flex-grow 3flex-shrink 4flex-basis 5flex 6align-self

# order

order定义项目在容器里的排列顺序,默认为 0,数字越小,排得越前

如何控制容器内的“剩余空间”,这里需要使用到三个很重要的属性: flex-basis、flex-grow、flex-shrink

# flex-basis

这个属性日常用得比较少,其实就是 width 属性的替代品,并且优先级 flex-basis > width,即在分配空间前会预留出 flex-basis 的空间,它的默认值是 aotu,即项目本来的大小。

# flex-grow

flex-grow 能够控制项目在容器中所占空间的大小,它接受一个数字值,默认为0。如果其它项目flex-grow 设置为1,其中一个子元素的值是2,在空间允许的条件下它将占用前者两倍的空间。

# flex-shrink

flex-shrink 前面的grow是扩大,对应的shrink是缩小,即如果容器空间不足,项目将缩小宽度来适应容器,该属性定义了项目的缩小比例,默认为 1,为0 表示不减少,值越大缩小得就越厉害,

# flex

flex 属性是flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 1 auto。

# align-self

align-self 允许单个项目和其它项目有不一样的align对齐方式,默认值为auto,表示继承父元素的align-items属性。可选的属性值即align-items属性值:

1align-self: auto | flex-start | flex-end | center | baseline | stretch;

(#待更新)

附录

参考学习的一些资料:

1、理解Flexbox:你需要知道的一切
2、flexbox
3、flexboxfroggy一款练习flexbox的小游戏
4、display MDN
5、写给自己看的display: flex布局教程
6、The Flexbox Guide