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日

相关文章

  • HTML5单页面手势滑屏切换原理

    HTML5单页面手势滑屏切换是一种用于网页开发的交互效果,它可以使网页在移动设备中更加流畅、自然地进行内容切换和导航。下面是实现该效果的完整攻略和示例说明。 原理 这种手势滑屏切换的原理是基于苹果公司的Webkit内核,通过监听touchstart、touchmove、touchend等事件,来实现拖动屏幕时内容的平滑移动、页面的缓慢进出等效果。其中,关键的…

    css 2023年6月11日
    00
  • JS+CSS实现另类带提示效果的竖向导航菜单

    下面我将详细讲解“JS+CSS实现另类带提示效果的竖向导航菜单”的完整攻略。 简介 竖向导航菜单一般以垂直方式呈现导航菜单,常用于侧边栏菜单或右侧固定导航栏。本攻略将结合JS和CSS,实现一个带提示效果的竖向导航菜单,以提高用户体验。 实现原理 本攻略实现的竖向导航菜单的提示效果是,菜单高亮时,显示一个竖条,正好在菜单项边缘。具体实现需要借助一些JS和CSS…

    css 2023年6月10日
    00
  • css 边框添加四个角的实现代码

    对于如何添加 CSS 边框的四个角,以下是完整攻略: 1. 使用 border-radius 属性 CSS3 引入了 border-radius 属性,可以用于圆角效果的实现,而 border-radius 同时也可以用于添加边框的四个角。通过设置 border-radius 的值,我们可以使边框的角变为圆角。 /* 实现四个角都为圆角 */ .div { …

    css 2023年6月10日
    00
  • 67 个节约开发时间的前端开发者的工具、库和资源

    67 个节约开发时间的前端开发者的工具、库和资源 作为一名前端开发者,我们需要使用各种工具和库来提高开发效率。这篇攻略总结了67个节约前端开发时间的工具、库和资源。 前端开发工具 1. Visual Studio Code Visual Studio Code是一个快速且免费的代码编辑器,支持多种语言和插件,比如自动补全、语法高亮和调试器等。 2. Subl…

    css 2023年6月11日
    00
  • 用CSS实现的图片透明度链接效果代码

    接下来我将为你详细讲解“用CSS实现的图片透明度链接效果代码”的完整攻略。 简介 使用CSS实现图片透明度链接效果可以使得网站具有更加动态的特色,提高用户的体验感。在这个攻略中,我们将学习如何使用CSS实现图片透明度链接效果,并且提供两个示例说明。 步骤 以下是实现图片透明度链接效果的步骤: 首先,我们需要准备一个带有链接的图片,比如: <a href…

    css 2023年6月10日
    00
  • 原生javascript实现无间缝滚动示例

    下面我将详细讲解如何用原生JavaScript实现无间缝滚动的攻略。 步骤一:准备HTML文件结构 首先,我们需要准备一个包含滚动内容的HTML结构。示例结构可以是一组图片,如下所示: <div class="scroll-wrapper"> <ul class="scroll-content"&gt…

    css 2023年6月10日
    00
  • 表单button的outline在firefox浏览器下的问题

    表单元素的outline在Firefox浏览器下的问题是一个常见的Web开发问题,本文将详细讲解如何解决这个问题。 问题描述 在一些同学开发的表单中,在Firefox浏览器中,button元素上的outline边框被默认禁用了,导致在点击button时无法看到焦点框。以下是一个示例代码: <form> <label for="na…

    css 2023年6月10日
    00
  • 使用BootStrap建立响应式网页——通栏轮播图(carousel)

    让我为您讲解使用Bootstrap建立响应式网页通栏轮播图(carousel)的完整攻略。 1. 轮播图思路 通栏轮播图是一种经典的网页视觉设计方式。其基本思路是,在网页上设置一组横幅图片,通过轮播的方式定时向左或向右滑动,从而展现不同的广告或者信息。主要的视觉元素包括轮播组件(包括图片、标题和文字),箭头控制按钮(左和右)、指标控制按钮(可选)和全局容器。…

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