flex弹性布局详解

Flex弹性布局详解

Flex弹性布局是一种新的布局模式,可以方便地实现各种布局效果。该布局模式可以让容器的子元素自动排列,在完成一些复杂的布局工作中非常方便。

一、Flex相关的术语

在讨论Flex之前,我们先来了解一些相关的术语:

  • Flex容器:应用flexbox布局的容器,它包含了一组flex item。
  • Flex项:Flex容器内的所有子元素都是Flex项,所有Flex项共享Flex容器的父级框架的大小和形状。正是因为这一点,Flex布局才被称为“弹性布局”。

二、Flex容器

2.1 display属性

要使用Flex布局,需要将容器的display属性设置为flex。实现方法如下:

.container {
  display: flex;
}

这个命令将会把“container”这个元素设为Flex容器,这时候,这个Flex容器的直接子元素将会变得可塑性非常强。

2.2 flex-direction属性

Flex容器采用的主轴(main axis)方向,默认为水平方向,即从左到右。用flex-direction属性可以改变主轴的方向。例如:

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

这个命令将把容器的主轴设置为从右到左。

flex-direction属性有四个选择:

  • row(默认):主轴为水平方向,起点在左端。
  • row-reverse:主轴为水平方向,起点在右端。
  • column:主轴为垂直方向,起点在上沿。
  • column-reverse:主轴为垂直方向,起点在下沿。

2.3 justify-content属性

justify-content属性定义了沿着主轴的排版方式。例如:

.container {
  justify-content: flex-end;
}

这个命令将把容器内的所有Flex项沿着主轴松弛地排列为右对齐。

justify-content属性可用于设置六种排版方式:

  • flex-start(默认):在主轴的起点方向上,将Flex项紧凑排列。
  • flex-end:在主轴的终点方向上,将Flex项紧凑排列。
  • center:在主轴居中排列所有Flex项。
  • space-between:在相邻的Flex项之间放置平均大小的空间。第一个Flex项的左侧顶格,最后一个Flex项的右侧顶格。
  • space-around:在相邻Flex项之间分配相等的间隔,使得每个Flex项周围的空间相同。
  • space-evenly:在相邻Flex项之间分配相等的间隔,包括第一个和最后一个Flex项的周围空间。

2.4 align-items属性

align-items属性定义了沿着侧轴(cross axis)的排版方式。例如:

.container {
  align-items: center;
}

这时Flex项将会沿着容器的侧轴居中排列。

align-items属性也可以设置六种排版方式:

  • stretch(默认):所有Flex项用来填满Flex容器的剩余空间,拉伸到相同的高度(如果他们有不同的高度)。
  • flex-start:Flex项会单独放置在侧轴的起点(上沿,如果flex-direction是row,则为左沿)。
  • flex-end:Flex项会单独放置在侧轴的终点(下沿,如果flex-direction是row,则为右沿)。
  • center:Flex项会在侧轴上居中排列。
  • baseline:所有Flex项将会在同一基线上。
  • auto:每个Flex项被自由拉升,使得填满容器的剩余空间。如果它们具有基础高度,则不会超出。

2.5 align-content属性

如果项目的个数太少,不足以填满容器,此时可用align-content属性设置多行Flex项的对齐方式。例如:

.container {
  align-content: space-between;
}

这个命令将容器中所有的Flex项在侧轴的方向上平均分布。

align-content属性有六个选择:

  • flex-start:与侧轴的起点对齐。
  • flex-end:与侧轴的终点对齐。
  • center:与侧轴的中点对齐。
  • space-between:将Flex项彼此分离,第一个Flex项位于侧轴的起点,最后一个Flex项位于侧轴的终点。
  • space-around:围绕在每个Flex项周围的空间相同。所有Flex项的周围具有相等的空间。
  • stretch(默认):Flex项将被拉伸以占用剩余空间。

三、 Flex项

3.1 order属性

默认情况下,Flex项按它们在HTML中的顺序显示。但是可以使用order属性来对Flex项进行排序。它的具体用法如下:

.item {
  order: 5;
}

是的,“order”则是数值越小,排列越靠前。因此,值5的Flex项将在值为0或1的Flex项之后显示。

3.2 flex-grow属性

flex-grow属性定义Flex项的放大比例,可以让它在需要填充空间时扩展。如果所有Flex项设置了相同的放大比例,它们将会平均分配额外的可用空间。例如:

.item {
  flex-grow: 2;
}

在这个例子里,每个Flex项被设置为2,让它们的宽度多一倍。相反地,如果所有Flex项都被设置为0,它们就不会扩张,并且将被居中在Flex容器中,如Section 2.4中所示。

3.3 flex-shrink属性

flex-shrink属性定义Flex项的收缩比例。例如:

.item {
  flex-shrink: 3;
}

这个命令将使Flex项在空间不足时缩小其大小,使它们不会超出父元素。

如果所有Flex项的收缩比例相同,它们将被平均缩小。如果有的Flex项的收缩比例为0,而另一些为非零值,那么在空间不足时,前者不会被缩小,而后者会被缩小。

3.4 flex-basis属性

通过设置flex-basis属性,我们可以设置Flex项的初始大小。类似于width和height属性。例如:

.item {
  flex-basis: 50%;
}

这个命令将使Flex项始终保持50%,但这并不强制。如果你在设置flex-basis值,同时设置flex-grow、flex-shrink,则会覆盖它。

3.5 flex属性

为了能够更简便地设置flex-grow、flex-shrink和flex-basis属性, 有一种简写方式,叫做flex。

例如:

.item {
  flex: 1 1 50%;
}

此代码将以相同的速度增长且收缩任何剩余的空间,将Flex项的初始大小设置为50%。

我们也可以使用flex:1来指定一个Flex项的扩张和收缩因子,flex-shrink:1;flex-basis:0%。

这个例子将会使每个Flex项等分共享剩余的空间,但是不会强制Flex项保持任何特定的宽度或高度(如果未设置flex-basis)。

四、 示例说明

4.1 示例1:一排卡片

<div class="container">
  <div class="item">卡片1</div>
  <div class="item">卡片2</div>
  <div class="item">卡片3</div>
</div>
.container {
  display: flex;
}
.item {
  width: 30%;
  height: 100px;
  border: 1px solid;
  margin: 10px;
}

这个例子展示了一个顶部对齐的一排卡片。每个卡片之间有10px的间隔。卡片的宽度设为了30%。这样,当卡片数量发生变化时,卡片的宽度就会适应视口大小,非常实用。

4.2 示例2: 卡片的展开与折叠

<div class="container">
  <div class="item"><img src="http://dummyimage.com/200x150/000/fff.jpg"/>卡片1</div>
  <div class="item"><img src="http://dummyimage.com/200x150/000/fff.jpg"/>卡片2</div>
  <div class="item"><img src="http://dummyimage.com/200x150/000/fff.jpg"/>卡片3</div>
  <div class="item"><img src="http://dummyimage.com/200x150/000/fff.jpg"/>卡片4</div>
</div>
.container {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
}
.item {
  width: 200px;
  height: 200px;
  margin: 10px;
  position: relative;
  overflow: hidden;
  display: flex;
  justify-content: center;
  align-items: center;
  transition: all 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275);
}
.item img {
  max-width: 100%;
  max-height: 100%;
}
.item:hover {
  flex: 5 1 70%;
  z-index: 2;
}

在这个例子里,我们展示了四个展开缩起的卡片。当鼠标悬停在卡片上时,卡片会根据设置从原来的宽度的增加到了70%的宽度。

五、 总结

Flex布局是一个非常实用的CSS布局技巧。在页面布局中,可以使用Flex布局方便地实现各种布局需求。本文中对它的用法做了详细的总结,并提供了两个示例供大家参考。相信对初学者来说是一份比较全面的教程。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:flex弹性布局详解 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • border-radius给元素添加圆角边框的方法

    当我们需要给元素添加圆角边框时,可以使用CSS属性border-radius来轻松实现。下面是关于如何使用border-radius属性来添加圆角边框的攻略: 一、使用border-radius属性添加圆角边框 1. 在CSS样式中设置border-radius属性 使用border-radius属性可以轻松设置元素的圆角边框,它接受一个或多个值,用空格分隔…

    css 2023年6月10日
    00
  • 巧用CSS3的calc()宽度计算做响应模式布局的方法

    现在我将详细讲解“巧用CSS3的calc()宽度计算做响应模式布局的方法”的完整攻略,包括制作过程、示例说明等。 什么是宽度计算的calc()函数 宽度计算的calc()函数是CSS3中非常有用的函数之一,它可以进行加、减、乘、除的数学运算,可以用于计算元素的宽度,高度、行高等属性。其中,最重要的部分是 calc() 函数的计算规则: 加、减、乘、除符号的前…

    css 2023年6月9日
    00
  • font-size定义为0在IE6下的妙用

    对于网页开发者来说,解决各个浏览器的兼容性问题是一件常见的任务。其中,IE6是一个非常特殊的浏览器,因为它存在着一些非常奇怪的行为,需要我们花费额外的时间来处理。 其中,一个非常棘手的问题就是样式坍塌(CSS margin collapsing),这是指在某些情况下,相邻的元素的外边距会发生合并,从而对网页的布局产生意想不到的影响。 那么,如何解决这个问题呢…

    css 2023年6月9日
    00
  • css全屏背景图片设置,django加载图片路径详解

    下面是“CSS全屏背景图片设置,Django加载图片路径详解”的完整攻略。 CSS全屏背景图片设置 在CSS中设置全屏背景图片有多种方式,其中比较常用的是使用background属性。下面是具体的步骤: 在CSS文件中选择要添加背景图片的元素,比如body元素。 使用background属性,将图片的路径和其他属性值作为background属性值进行设置。具…

    css 2023年6月9日
    00
  • js实现用滚动条来放大缩小图片的代码

    下面我来详细讲解一下“js实现用滚动条来放大缩小图片的代码”的实现过程。 1. 编写html结构 首先,我们需要准备一张图片和一个滚动条,并将它们放到一个包含样式的html结构中。 <style> #scrollbar { width: 100%; height: 10px; background-color: #ccc; } #slider {…

    css 2023年6月10日
    00
  • JS+CSS实现简单滑动门(滑动菜单)效果

    JS+CSS实现简单滑动门(滑动菜单)效果,可以通过CSS的transition和transform属性以及JavaScript的事件处理函数来实现。 HTML结构 首先,在HTML中需要通过标签嵌套来构建滑动门的结构。以两个滑动门为例: <div class="slider"> <div class="sli…

    css 2023年6月9日
    00
  • JavaScript异常处理

    JavaScript异常处理可以帮助开发人员减少代码中的错误,提高代码的健壮性和稳定性。在 JavaScript 中,异常是由错误或异常条件引起的程序流控制中的偏差,也就是程序出了问题。 JavaScript异常处理通常使用 try-catch 语句块实现。try 语句块包含可能引发异常的代码,而 catch 语句块用于捕捉异常并处理它们。以下是一个基本的 …

    Web开发基础 2023年3月30日
    00
  • HTML5和CSS3实例教程总结(推荐)

    HTML5和CSS3实例教程总结(推荐)是一本让初学者上手HTML5和CSS3的好书。本书通过大量实例将HTML5和CSS3的基础知识融会贯通,并介绍了一些实际应用中的技巧和经验。下面提供一些攻略供初学者参考: 书籍概述 本书共分为10个章节,从HTML和CSS的基础知识入手逐步提高,让读者掌握HTML5和CSS3的用法和技巧,最终通过综合案例使用这两种语言…

    css 2023年6月9日
    00
合作推广
合作推广
分享本页
返回顶部