CSS Flex 弹性盒模型

简介: 当元素设置了display: flex样式时,表示当前元素开启了flex布局,这个元素成为一个 flex 容器(flex container)。这个元素不会脱离文档流,元素中的内容沿着两个轴的方向进行布局。 开启了flex布局的元素就是一个伸缩容器(flex 容器),伸缩容器中所有的子元素就是伸缩项目。

1.Flex布局 设置:

当元素设置了display: flex样式时,表示当前元素开启了flex布局,这个元素成为一个 flex 容器(flex container)。这个元素不会脱离文档流,元素中的内容沿着两个轴的方向进行布局。

开启了flex布局的元素就是一个伸缩容器(flex 容器),伸缩容器中所有的子元素就是伸缩项目。

注意:只是子元素是伸缩项目,不会受到浮动布局影响!!!

/* 块级的弹性盒模型 */
display: flex;
/* 行级的弹性盒模型(不常用) */
display: inline-flex;

通过添加上面这两个CSS属性,就可使当前元素成为一个弹性容器,可以通过 heightwidth 去改变它的大小。

在弹性盒子中存放弹性元素,无论原来的元素是那种类型的元素,所有的弹性元素都会被块状化。


2. Flex布局 轴:

  • 主轴(main axis):沿着flex元素放置的方向延伸的轴(比如页面上的横向的行、纵向的列)。该轴的开始和结束被称为main startmain end
  • 侧轴(cross axis):垂直于flex元素放置方向的轴。该轴的开始和结束被称为cross startcross end

2.1 修改 Flex 轴方向:

弹性盒子提供了 flex-direction 这样一个属性,它可以指定主轴的方向(弹性盒子子类放置的地方), 它默认值是 row,这使得它们在按你浏览器的默认语言方向排成一排。

在弹性盒子模型中,设置了 display: flex;之后,弹性盒模型中的弹性元素默认是水平排列

设置主轴方向为水平方向,元素默认是从左向右排列:

/* 弹性元素水平排列 */
flex-direction: row;

反转水平排列,从右向左排列:

flex-direction: row-reverse;

设置主轴方向为列排序,默认方向是从上到下排列:

/* 弹性元素垂直排列 */
flex-direction: column;

反转垂直排列,从下到上排列:

flex-direction: column-reverse;

2.2 弹性元素换行方式:

默认情况下,如果不修改弹性元素的换行方式,会压缩每个弹性元素的宽高,以此适应弹性盒子的宽高。

可以使用flex-wrap样式来修改弹性元素的换行方式,默认的样式属性就是flex-wrap: nowrap;

水平布局的情况下:

主轴(水平)方向上,如果弹性元素的宽度和超出了弹性盒模型的宽度,那么弹性元素会向下以行的方式进行换行显示。如果在侧轴(垂直)方向上,弹性容器的高度有额外空间,会平均分配给每一行显示的弹性元素。

/* 默认弹性盒子装不下就将元素向下按照行的方式换行显示 */
flex-wrap: wrap;
/* 元素溢出时,元素向上按照行的方式换行显示 */
flex-wrap: wrap-reverse;

垂直布局的情况下:

/* 默认弹性盒子装不下就将元素右换行 */
flex-wrap: wrap;
/* 元素溢出时,元素向左换行显示 */
flex-wrap: wrap-reverse;

flex-directionflex-wrap 进行了组合:

/* 先设置主轴方向是水平的,在设置换行方向是水平向下以行的方式换行 */
flex-flow: row wrap;

2.3 Flex布局 元素对齐:

2.3.1 主轴方向对齐:

使用justify-content可以设置弹性元素在主轴上的对齐方式,默认样式值是:justify-content: flex-start;从主轴起始位置,依次向后对齐。

justify-content: flex-start;

从轴结束位置,依次向前排列

justify-content: flex-end;

注意:元素的排列方式不改变(元素的排列顺序不会改变),只是元素位置是从开始位置对齐,还是从结束位置对齐。

居中排列:

justify-content: center;

平均分布,元素与元素之间的间隔距离相等,与容器边界没有间距:

justify-content: space-between;

平均环绕分布,保持每个元素周围的距离是相等:

justify-content: space-around;

完全平均分布元素,包括对于边框的距离都是相等的:

justify-content: space-evenly;

2.3.2 侧轴方向对齐:

单行元素对齐:

从侧轴开始位置从前向后进行排序:

align-items: flex-start;

从侧轴结束位置从后向前进行排序:

align-items: flex-end;

对齐中心:

align-items: center;

极限高度,会受到弹性元素中的文字大小影响:

拉伸元素高度,直到铺满整个盒子:

注意:该属性的优先级低于元素的 height 属性,如果元素声明了 height 属性,则当前属性不会生效,按照 height 属性生效

/* 侧轴对齐方式,拉伸弹性元素到整个父容器,
   前提是弹性元素不能给定高度(默认值) */
align-items: stretch;

多行元素对齐:

控制多行交叉轴排列方式:以最高(最宽)的元素作为一行(一列)的高度(宽度)。

align-content: flex-start;

align-content: flex-end;

align-content: center;

align-content: space-around;

align-content: space-between;

align-content: space-evenly;

align-content: stretch;

3.Flex布局 基准长度:

弹性元素在主轴上的基准长度是:替换原有的弹性元素在主轴上的长度。通过flex-basis样式值设置弹性元素在主轴上的基准长度。如果主轴是恒向,则宽度失效;如果是纵向,则高度失效。

默认值是:flex-basis: auto;,浏览器会根据这个属性计算弹性盒模型的主轴剩余空间。

flex-basis: 200px;

4.Flex布局 弹性元素伸缩:

4.1 弹性元素 拉伸:

该属性设置在弹性元素上,对弹性盒子未被使用的空间进行按比例分配

flex-grow: 0;
flex-grow: 1;

4.2 弹性元素 压缩:

该属性设置在弹性元素上,对弹性盒子已经占用的空间进行按比例压缩。使用 flex-shrink控制元素的缩放比例:

注意:避免使用flex-wrap换行样式。

flex-shrink: 1;

最低的压缩极限是弹性元素中的内容呈现。

4.3 弹性元素 组合属性:

/* 弹性元素拉伸比例   弹性元素的压缩比例   弹性元素的基准长度*/
flex: flex-grow flex-shrink flex-basic;

设置弹性元素可以压缩、拉伸,不设置基准宽度,可以简写为:

flex: auto;

设置元素为可以压缩、拉伸,设置基准长度为0,可以简写为:

flex: 1;

设置元素为不可以压缩、拉伸,不设置基准长度,可以简写为:

flex: none;

5.Flex布局 排序和单独对齐:

5.1 弹性元素 排序:

单独为某个弹性元素设置排序顺序,order值越小,越先出现。

order: 1;

5.2 弹性元素 单独对齐:

只能单独调整单侧轴上的对齐,无法调整主轴上的单个元素对齐。

flex-self: flex-end;

6.Flex布局 水平垂直居中:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<style>
    .outer {
        height: 400px;
        width: 600px;
        background-color: darkgray;
        /* 开启Flex弹性布局 */
        display: flex;
    }
    .inner {
        height: 200px;
        width: 300px;
        box-sizing: border-box;
        background-color: skyblue;
        /* 使用 margin 实现居中*/
        margin: auto;
    }
</style>
<body>
<div class="outer">
    <div class="inner"></div>
</div>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <title>Title</title>
  </head>
  <style>
    .outer {
      height: 400px;
      width: 600px;
      background-color: darkgray;
      /* 开启Flex弹性布局 */
      display: flex;
      /* 设置水平Flex居中 */
      flex-direction: row;
      justify-content: center;
      align-items: center;
    }
    .inner {
      height: 200px;
      width: 300px;
      box-sizing: border-box;
      background-color: skyblue;
    }
  </style>
  <body>
    <div class="outer">
      <div class="inner"></div>
    </div>
  </body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<style>
    .outer {
        height: 400px;
        width: 600px;
        background-color: darkgray;
        /* 开启Flex弹性布局 */
        display: flex;
        /* 设置水平Flex居中 */
        flex-direction: row;
        /* 使用flex-wrap指定换行方式,配合align-content实现居中 */
        flex-wrap: wrap;
        justify-content: center;
        /* 使用align-content指定多行对齐方式 */
        align-content: center;
    }
    .inner {
        height: 100px;
        width: 200px;
        box-sizing: border-box;
        background-color: skyblue;
    }
</style>
<body>
<div class="outer">
    <div class="inner"></div>
</div>
</body>
</html>
相关文章
|
2月前
|
前端开发 算法 Java
(CSS)使用Flex布局,帮助你快速了解各种基本的Flex布局属性以及帮你让元素快速达到布局中的指定位置!
(CSS)使用Flex布局,帮助你快速了解各种基本的Flex布局属性以及帮你让元素快速达到布局中的指定位置!
143 1
|
2月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
Flex 布局 布局的传统解决方案,基于盒状模型,依赖 display 属性 + position属性 + float属性。它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现。 2009年,W3C 提出了一种新的方案----Flex 布局,可以简便、完整、响应式地实现各种页面布局。目前,它已经得到了所有浏览器的支持,这意味着,现在就能很安全地使用这项功能。 一、Flex 布局是什么? Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性。
294 1
|
前端开发 UED 容器
在 CSS 中使用 Flex 布局实现页面自适应时需要注意什么?
【10月更文挑战第22天】在使用 Flex 布局实现页面自适应时,需要对其基本原理和特性有深入的理解,同时结合具体的布局需求和场景,进行细致的调整和优化。通过合理的设置和注意事项的把握,才能实现理想的自适应效果,提升用户体验。还可以根据实际情况进行更深入的探索和实践,以不断提升 Flex 布局的应用能力。
|
数据可视化 前端开发 搜索推荐
FLEX组件可视化设计器CSS3代码生成器
FLEX组件可视化设计器CSS3代码生成器
196 4
|
前端开发 UED
CSS 盒模型
CSS盒模型是网页设计中一个重要的概念,它定义了HTML元素如何在页面上呈现及其相互关系。每个HTML元素都被视为一个矩形框,此模型涉及内容区、内边距、边框和外边距四个部分,通过控制这些部分的样式和布局,设计师可以实现多样化的页面效果。
|
容器 C# 开发者
XAML语言大揭秘:WPF标记的魅力所在,让你轻松实现界面与逻辑分离,告别复杂代码!
【8月更文挑战第31天】XAML提供了一种直观且易于维护的界面设计方式,使得开发者可以专注于逻辑和业务代码的编写,而无需关心界面细节。通过数据绑定、布局管理和动画效果等特性,XAML可以实现丰富的界面交互和视觉效果。在实际开发过程中,开发者应根据具体需求选择合适的技术方案,以确保应用程序能够满足用户的需求。希望本文的内容能够帮助您在WPF应用程序开发中更好地利用XAML语言。
189 1
|
前端开发 开发者 容器
CSS3:flex&box-sizing
本文介绍了CSS中的Flex布局及其相关属性,如`flex-direction`、`flex-wrap`、`justify-content`等,并通过代码示例展示了如何使用这些属性来控制容器内的项目排列方式。同时,还讲解了`align-items`属性用于定义子元素在交叉轴上的对齐方式,以及`box-sizing`属性的不同取值对元素尺寸计算的影响。
154 0
|
前端开发 容器
【CSS Flexbox 探秘】弹性盒模型:揭秘网页布局的终极神器!
【8月更文挑战第25天】Flexbox 是 CSS3 中的关键特性,为网页设计提供了强大的布局能力。本文通过问答形式全面解析 Flexbox 的核心概念与属性,包括容器与项目属性,并通过示例演示如何使用 Flexbox 实现水平与垂直居中、等间距布局及响应式设计。相较于传统布局方法,Flexbox 更加灵活且简化了样式设置,同时在现代浏览器中拥有良好的支持度。掌握 Flexbox 对于提升网页布局效率至关重要。
306 1
|
编解码 前端开发 容器
CSS Flex布局实战案例:构建响应式卡片组件
【7月更文挑战第17天】通过上述步骤,我们成功地使用CSS Flex布局构建了一个响应式的卡片组件。Flexbox不仅简化了布局代码,还让我们能够轻松实现复杂的布局效果,如响应式设计。在实战中,掌握Flexbox将大大提高前端开发的效率和网页布局的质量。希望这个案例能够帮助你更好地理解和应用Flexbox布局。
|
前端开发 容器
CSS Flexbox(弹性布局)
CSS Flexbox(弹性布局)
740 2