Flexbox 僵尸
Flexbox 僵尸
2020年你还在使用Flexbox吗?
Flexbox 僵尸
这篇文章最初于 2018 年 4 月发布在我的个人博客上:https://waylonwalker.com/blog/flexbox-zombies/。截图直接取自该网站。
我最近完成了 flexbox-zombies 的课程,学习了更多关于 flexbox 的知识,并熟练掌握了它。我可以毫不夸张地说,这门课程彻底改变了我创建布局的方式。现在 flexbox 对我来说非常直观。这门课程的精髓在于它对概念的讲解非常透彻,并且提供了大量的示例,让你能够快速上手。
这是与戴夫进行决赛的片段。
基本设置
Flexbox 需要一个包装容器才能工作,我将其称为 flex 容器,并将该容器中的项目称为项目。
标记
本文将使用以下标记,每个标记应用不同的 CSS 样式。
注:动画容器的设计灵感来源于 flexbox-zombies 课程。我非常喜欢它能够让你看到每个布局的响应式特性。在最初的示例中,其原理可能并不明显,但随着我们深入学习,如果我们在动态布局中查看一些 flexbox 参数,它们的意义就会更加清晰,因为 flexbox 的设计初衷就是为了构建响应式设计。
<div class='flex_container'>
<div class='item'>1</div>
<div class='item'>2</div>
<div class='item'>3</div>
<div class='item'>4</div>
</div>
基础样式
.item {
color: #6394C8;
font-size: 1.5rem;
padding: 1rem;
display: flex;
justify-content: center;
align-items: center;
height: 100px;
width: 100px;
background: #351D57;
margin: 5px;
border: 2px solid #A83E75;
box-shadow: 5px 5px 10px -5px rgba(0, 0, 0, .6);
}
.flex_container {
padding: 1rem;
box-shadow: 5px 5px 10px -5px rgba(0, 0, 0, .6);
background: rgba(99, 148, 200, .2);
animation: animate_container 2s cubic-bezier(.66, -0.0, .28, 1.0) infinite both alternate;
}
/* Animate the .flex_container to show responsiveness */
.flex_container:hover {
/* But not on hover, let the user pause the annimation*/
animation: none
}
@keyframes animate_container {
0%{
width: 95%;
}
20% {
width: 95%;
}
80% {
width: 200px;
}
100% {
width: 200px;
}
}
基本技巧
1. 打开弩
应用于柔性容器display: flex;
启用 flexbox 布局后,所有子元素都会在父容器的左上角对齐成一行。默认情况下,它们会缩小到最小内容尺寸,但不会自动增大到超过其指定尺寸。
.flex_container {
display: flex;
}
2. 必要时瞄准
应用于柔性容器
此参数决定 flexbox 容器中 flex 元素的朝向。
示例 flex-direction: row
选项=('row'(default), 'column', 'row-reverse', 'column-reverse')
排
.flex_container {
display: flex;
flex-direction: row;
}
柱子
.flex_container {
display: flex;
flex-direction: column;
}
行反转
.flex_container {
display: flex;
flex-direction: row-reverse;
}
列反转
.flex_container {
display: flex;
flex-direction: column-rerverse;
}
3. 将它们沿着红色 Justify Laser 线对齐
应用于柔性容器
此参数决定弹性容器内弹性项目的对齐方式。可以理解为弹性项目之间的间距或位置。
示例 justify-content: flex-end;
选项= ( flex-start, flex-end, space-between, space-around, space-evenly, stretch, center, start, end, left, right)
弹性启动
.flex_container {
display: flex;
justify-content: flex-start;
}
柔性端
.flex_container {
display: flex;
justify-content: flex-end;
}
空间
.flex_container {
display: flex;
justify-content:space-between;
}
周围空间
.flex_container {
display: flex;
justify-content: space-around;
}
均匀分布
.flex_container {
display: flex;
justify-content: space-evenly;
}
中心
.flex_container {
display: flex;
justify-content: center;
}
3b. 将它们沿蓝色对准激光线对齐
应用于柔性容器
align-items: flex-end;- options = ('flex-start', 'flex-end', 'normal', 'end', 'self-start', 'self-end', 'center', 'start' 'end')
弹性启动
.flex_container {
display: flex;
justify-content: flex-start;
}
柔性端
.flex_container {
display: flex;
justify-content: flex-end;
}
中心
.flex_container {
display: flex;
justify-content: center;
}
4. 处理任何特殊调整
适用于项目
align-self: flex-start;- options = (
'flex-start','flex-end','normal','end','self-start','self-end','center','start','end')
结合
`align-self` 属性用于处理一次性的对齐方式,并应用于元素本身。所有参数都与之前相同align-items。在本例中,我们将把前面所有示例的对齐方式合并为一个。
.flex_container {
display: flex;
}
.item:nth-of-type(1){
align-self: flex-start
}
.item:nth-of-type(2){
align-self: center
}
.item:nth-of-type(3){
height: auto; align-self: stretch;
}
.item:nth-of-type(4){
height: auto; align-self: flex-end;
}
6. 沿红色正义激光线生长
适用于项目
flex-grow: 1
弹性生长
放置flex-grow: 1;该物品后3,它将占用所有可用的空闲空间。
.flex_container {
display: flex;
}
.item:nth-of-type(3) {
flex-grow: 1
}
多重灵活增长
将此flex-grow: 2;物品放置于桌面上1,占用可用空间的速度将是原来的两倍。3
.flex_container {
display: flex;
justify-content: flex-start;
}
.item:nth-of-type(3) {
flex-grow: 1
}
.item:nth-of-type(1) {
flex-grow: 2
}
7. 沿红色对齐激光线设置物品长度
按重要性顺序应用于各项
min-widthmax-widthflex-basiswidth
8. 故障
应用于项目时,
其行为类似于 z-index。
order- 接受整数值
订单 1
.flex_container {
display: flex;
}
.item:nth-of-type(3) {
order: 1
}
顺序 -1
.flex_container {
display: flex;
}
.item:nth-of-type(3) {
order: -1
}
9. 开通你自己的线路
应用于柔性容器
flex-wrap-选项=(wrap, nowrap(default))- 比起收缩膜,我更喜欢包装膜。
- 但完全包裹后仍会收缩。
裹
.flex_container {
display: flex;
flex-wrap: wrap;
}
10. 对齐换行内容
应用于柔性容器
align-content- 与 align-items 具有相同的规格,但适用于包装内容。
裹
.flex_container {
display: flex;
height: 700px;
flex-wrap: wrap;
align-content: center;
}
11. 快捷方式
弹性
应用于弹性项目
flex: grow, shrink, basis- 默认值 -
flex: 1 1 0px - 设置
flex: none等同于flex: 0 0 auto
柔性流
应用于柔性容器
flex: flex-direction flex-wrap
第七章:在一个完美的世界里(弹性基础)
flex-basis
- 起始尺寸、理想尺寸、假设尺寸
- 适用于项目
- 覆盖宽度
- 必要时收紧胫骨
水平拍摄时,它控制宽度。
垂直拍摄时,它控制高度。
2020年你还在使用Flexbox吗?
@thepracticaldev是否
既然它们是开源的,你可以在它们的 git 仓库中自行搜索。
以及颜色选择元素。
我愿意
我差不多两年前在学习 Flexbox Zombies 课程时写了这篇文章/这些节点,它真的让我印象深刻。我觉得大部分内容都已经深深印在我的脑海里,成了我的第二天性,以至于我很少会想到用网格布局😲。偶尔需要视觉上的启发时,这篇文章也帮了我很大的忙。
发推文给我,或者在下面留言。
欢迎访问我的个人网站,查看我的其他博客文章。
文章来源:https://dev.to/waylonwalker/flexbox-zombies-2o00


