设置子元素在主轴(横轴)方向上的对齐方式为容器的开头_今日推送 │ CSS Flexbox布局(上)...

58b200f9dfdd165df48ca8c1bd3fef98.png

原创:牛津小马哥web前端工程师陈小妹妹。

01bfcbed1df89c7bc55b23d805453430.png

在“ Flexbox布局”模块之前,有四种布局模式:

  • 块布局block,常见的就是div
  • 内联inline,用于文本
  • 表table,用于二维表数据
  • 定位position,用于元素的明确位置

这些尽管布局可以暂时性满足我们的要求,可是代码写起来不够方便简洁,于是有了Flex布局。flex,顾名思义,可收缩的布局,它是一种灵活的盒子布局模块,可以更轻松地设计灵活的响应式布局结构,而无需使用浮动或定位。

让我们从简单示例开始:

fb4ae056c525bf0c17e2cca62a6cce8b.png

这是本例的代码,接下来的贴出的局部代码将基于该模板代码的改动。

<!DOCTYPE html>
<html>
<head>
<style>
. flex-container {
  background-color: rgb(153,93,181);
}

. flex-container > div {
  background-color: rgb(247,148,31);
  border-radius:10px;
  width: 100px;
  margin: 10px;
  text-align: center;
  line-height: 75px;
  font-size: 30px;
}
</style>
</head>
<body>
<h1>The CSS Flexbox Layout</h1>

<div class="flex-container">
  <div>1</div>
  <div>2</div>
  <div>3</div>  
</div>

</body>
</html>

flex布局

通过将display属性设置为flex,flex容器变得灵活

.flex-container {
  display: flex;
}

a5018ba05cd65f1ffc8d17e857ad2e67.png
  • flex-direction
  • flex-wrap
  • flex-flow
  • justify-content
  • align-items
  • align-content

flex-direction

flex-direction属性定义容器要在哪个方向上排列展现flex的子项,决定了主轴的方向。

.container {
  flex-direction: row | row-reverse | column | column-reverse;
}

代码示例:

.flex-container {
  display: flex;
  flex-direction:row;
}
  • row行(默认):水平方向,从左到右;
  • row-reverse行反向:水平方向,从右到左;
  • column列:竖直方向,从上到下
  • column-reverse列反转:竖直方向,从下到上

d78342773248fbf54e68cdc47ee39fe4.png

5049bc287c7e9f15a3dfc40651fb08fb.png

048d1c8981468e86e49313245d98cd17.png

8f06972e04adf269b05f0c8e7893f269.png

flex-wrap

.container{
  flex-wrap: nowrap | wrap | wrap-reverse;
}
  • nowrap(默认设置):不换行,所有flex项目都在一行上
  • wrap:换行,flex项目将从上到下自动换行。
  • wrap-reverse:反向换行,flex项目将从下到上换行。

示例代码:

.flex-container {
  display: flex;
  flex-wrap: wrap;
  background-color: rgb(153,93,181);
}

91d99f55e57ca937412a24d719d4302a.png

45c71c0890b77484b05ac778fcf7176d.png

4cb3345c0b158f14e59271488073def6.png

flex-flow

flex-flow是用于同时设置flex-direction和flex-wrap属性的简写属性

示例代码:

.flex-container {
  display: flex;
  flex-flow: row wrap;
  background-color: rgb(153,93,181);

952852c349cf5ed624b68135a331d041.png

justify-content

定义了沿主轴的对齐方式。 当一行中的所有伸缩项目已达到最大大小时,它可以帮助分配剩余的剩余可用空间。 当项目溢出线时,它还对项目的对齐方式施加一些控制。

flex-start(默认):将项目打包到flex-direction的开头。

flex-end:项目在flex-direction的末端排列。

center:项目沿居中

space-between:同一行中的flex项目之间都有均匀分布的空间。相邻元素间距离相同。每行第一个元素与行首对齐,每行最后一个元素与行尾对齐。

space-around:项目在行中均匀分布,项目之间和边缘具有一定的空间。请注意,从视觉上看,空间是不相等的,第一项相对于容器边缘有一个单位的空间,但下一项之间有两个单位的空间。简单来说,space-around展现flex项目,让每个项目前中后都有一定空间的留白。

概括性的说,相邻元素间距离相同。每行第一个元素到行首的距离和每行最后一个元素到行尾的距离将会是相邻元素之间距离的一半。

space-evenly:任意两个项目之间的间隔(以及边缘之间的空间)相等。

示例代码:

.flex-container {
  display: flex;
  justify-content: center;
  flex-wrap:wrap;
  background-color: rgb(153,93,181);
}

95dc9d6d7dde2ed54fd2576e5075206c.png

2cd78c2eee601796f9bf89768bae1926.png

218d2e3b10eb09508151921ad44cca48.png

b5263e87402b3ccda3b2514b5284fd6d.png

152e3c130f0263d258e0aaf9f7eb52d7.png

61ba1d3227467999b2311977308479a4.png

align-items

  • stretch(默认):拉伸以填充容器(仍然遵守最小宽度/最大宽度)
  • flex-star:将项目放置在横轴的起点。
  • flex-end:将项目放置在横轴的末端。
  • center:项目在横轴上居中
  • baseline:项目对齐,例如基线对齐

示例代码:

.flex-container {
  display: flex;
  align-items:center;
  flex-wrap:nowrap;
  background-color: rgb(153,93,181);
  height:300px;
}

7070bf9ce0b1087537cb67967729dcc2.png

52db2df60c9dbcd36d4f7a275d8451b4.png

7a5ed13022cb9c94ec1e2915ad7feaa4.png

325b73eb87c98100cecf98e5654391a9.png

8d2df2579a1cd47740c196daa1cae3f6.png

align-content

  • space-around:第一个flex行到顶部边缘的距离和最后一个flex行到底部边缘的距离将会是相邻flex行之间距离的一半。
  • space-between使得flex项目的第一行对齐顶部,最后一行对齐底部。相邻flex行间距离相同。
  • center使得flex的项目行的在容器中间对齐
  • stretch拉伸flex的项目行,以此填满容器空间
  • flex-start使得flex的项目行,从容器的开始处从上到下排列
  • flex-end使得flex的项目行,从容器的底部从下到上排列

示例代码:

.flex-container {
  display: flex;
  flex-wrap:wrap;
  align-content:space-between;
  background-color: rgb(153,93,181);
  height:300px;
}

a33e6349d8968ab2cbc43fa93cc7c5f8.png

843c1dfe20f450226ddcda2083c06fda.png

192c2bdede884f4ee6d38db9525a5638.png

38c4fd484499f395e8bdbc85eeefa5e8.png

de9aeb5a15640afea16ad9ba2ea4f20a.png

4c0ddf0f7151e20c312e2e6bc63a9ab3.png

完美的布局:水平垂直居中布局

巧用两个属性,达到水平垂直居中效果

关键代码如下:

.flex-container {
  display: flex;
  flex-wrap:wrap;
  align-content:center;
  justify-content:center;
  background-color: rgb(153,93,181);
  height:300px;
}

0e11c8824b5a9f0282ccce5ee371f490.png

align-items和align-content解惑:

许多同学会疑惑,这align-items和align-content的功能很相似,它们有什么区别呢?

align-items是针对单行中的项目。对于主轴上的单行元素,align-items将使这些项目彼此对齐

而align-content属性适用于多行的flex容器,并且当交叉轴上有多余空间使flex容器内的flex线对齐。

前面的实例中,由于我们设置了margin:10px,导致align-items和align-content的区别不明显

现在,我们把css修改如下:

<style>
.flex-container {
  display: flex;
  align-content:center;
  flex-wrap:wrap;
  background-color: rgb(153,93,181);
  height:300px;
}

.flex-container > div {
  background-color: rgb(247,148,31);
  border-radius:10px;
  width: 100px;
  margin: 1px;
  text-align: center;
  line-height: 75px;
  font-size: 30px;
}
</style>

252269152bc55d241ed9c3381f255a42.png

接下来,将align-content:center;修改为align-items:center;

"align-items:center;"把每个flex行看作是一个整体排列,行与行之间有间隔地向中间对齐。

200eff2c579a2e00e0c10ca6ed937ac6.png

在使用这两个属性的时候,如果我们的目标是把多行的flex项目看成是一个大整体来展示的话,那么我们选择用align-content;如果是针对单行的flex项目,那么选择用align-items进行排列。

本篇关于flex容器的属性讲解就是这些。

感谢阅读~

e5a859c920dbe4731a75653a293ee225.gif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值