Flex布局 (上万字)超详细讲解 这篇就够了

一、Flex概述

Flex布局,全称为“Flexible Box Layout”,意为“弹性盒布局”。它是一种现代的CSS布局模式,旨在提供一种更有效的方式来布局、对齐和分配容器中项目之间的空间,即使它们的大小未知或动态变化。

Flex布局的主要特点和优势包括:

  1. 灵活性:Flex布局允许项目在容器中灵活地扩展和收缩,以填充可用空间或调整大小以适应内容。
  2. 对齐方式:Flex布局提供了各种对齐选项,可以轻松地实现水平和垂直对齐。
  3. 方向控制:可以方便地改变主轴的方向,使项目在水平或垂直方向上排列。
  4. 空间分配:Flex布局可以自动处理项目之间的空间分配,使其看起来更加整洁和平衡。
  5. 简化布局:Flex布局使得复杂的布局变得简单,减少了传统布局方式中需要使用的浮动、定位等技巧。

二、Flex容器属性

 Flex布局支持6个容器属性:flex-direction、flex-wrap、flex-flow、justify-content、align-items、align-content

2.1 flex-direction

flex-direction是CSS Flexbox布局中的一个属性,它用于定义主轴的方向,即决定了flex容器中的子元素(flex items)的排列方式。这个属性有以下几个可选值:

  1. row:这是默认值。当设置为row时,主轴的方向为水平,子元素从左到右排列。

  2. row-reverse:当设置为row-reverse时,主轴的方向仍然是水平,但子元素从右到左排列,即反向水平排列。

  3. column:当设置为column时,主轴的方向变为垂直,子元素从上到下排列。

  4. column-reverse:当设置为column-reverse时,主轴的方向为垂直,但子元素从下到上排列,即反向垂直排列。

示例:

flex.html:

<!DOCTYPE html>  
<html lang="en">  
<head>  
<meta charset="UTF-8">  
<meta name="viewport" content="width=device-width, initial-scale=1.0">  
<title>Flex Direction Example</title>  
<link rel="stylesheet" href="styles.css">  
</head>  
<body>  
  
<!-- 使用 row 方向的 flex 容器 -->  
<div class="flex-container row">  
  <div class="flex-item">1</div>  
  <div class="flex-item">2</div>  
  <div class="flex-item">3</div>  
  <div class="flex-item">4</div>  
</div>  
  
<!-- 使用 row-reverse 方向的 flex 容器 -->  
<div class="flex-container row-reverse">  
  <div class="flex-item">1</div>  
  <div class="flex-item">2</div>  
  <div class="flex-item">3</div>  
  <div class="flex-item">4</div>  
</div>  
  
<!-- 使用 column 方向的 flex 容器 -->  
<div class="flex-container column">  
  <div class="flex-item">1</div>  
  <div class="flex-item">2</div>  
  <div class="flex-item">3</div>  
  <div class="flex-item">4</div>  
</div>  
  
<!-- 使用 column-reverse 方向的 flex 容器 -->  
<div class="flex-container column-reverse">  
  <div class="flex-item">1</div>  
  <div class="flex-item">2</div>  
  <div class="flex-item">3</div>  
  <div class="flex-item">4</div>  
</div>  
  
</body>  
</html>

styles.css:

.flex-container {  
    display: flex;  
    flex-wrap: wrap; /* 允许项目换行 */  
    width: 300px;  
    height: 200px;  
    border: 1px solid #000;  
    padding: 10px;  
    box-sizing: border-box;  
  }  
    
  .flex-item {  
    width: 50px;  
    height: 50px;  
    margin: 5px;  
    background-color: lightblue;  
    text-align: center;  
    line-height: 50px;  
    color: #333;  
  }  
    
  /* 使用不同的 flex-direction 值来改变项目的排列方向 */  
    
  /* flex-direction: row (默认值) */  
  .flex-container.row {  
    flex-direction: row;  
  }  
    
  /* flex-direction: row-reverse */  
  .flex-container.row-reverse {  
    flex-direction: row-reverse;  
  }  
    
  /* flex-direction: column */  
  .flex-container.column {  
    flex-direction: column;  
  }  
    
  /* flex-direction: column-reverse */  
  .flex-container.column-reverse {  
    flex-direction: column-reverse;  
  }

运行结果:

2.2 flex-wrap

 flex-wrap 属性的参数。flex-wrap 是 CSS 中的一个属性,用于控制弹性盒子模型中的子元素是否应该换行。它有三个可能的值:

  1. nowrap(默认值):子元素不会换行,即使容器的空间不足以容纳它们。这可能会导致子元素溢出容器。
  2. wrap:如果容器的空间不足以容纳所有子元素,那么子元素会移到下一行。这意味着子元素会在需要时换行。
  3. wrap-reverse:这也是一个换行选项,但子元素的排列顺序与 wrap 相反。在 wrap-reverse 中,子元素会从容器的底部开始向上换行。

示例:

flex.html:

<!DOCTYPE html>  
<html lang="en">  
<head>  
<meta charset="UTF-8">  
<meta name="viewport" content="width=device-width, initial-scale=1.0">  
<title>Flex Wrap Example</title>  
<link rel="stylesheet" href="styles.css"> <!-- 引入外部CSS文件 -->  
</head>  
<body>  
  
<h2>nowrap (默认)</h2>  
<div class="flex-container nowrap">  
  <div class="flex-item">1</div>  
  <div class="flex-item">2</div>  
  <div class="flex-item">3</div>  
  <div class="flex-item">4</div>  
  <div class="flex-item">5</div>  
</div>  
  
<h2>wrap</h2>  
<div class="flex-container wrap">  
  <div class="flex-item">1</div>  
  <div class="flex-item">2</div>  
  <div class="flex-item">3</div>  
  <div class="flex-item">4</div>  
  <div class="flex-item">5</div>  
</div>  
  
<h2>wrap-reverse</h2>  
<div class="flex-container wrap-reverse">  
  <div class="flex-item">1</div>  
  <div class="flex-item">2</div>  
  <div class="flex-item">3</div>  
  <div class="flex-item">4</div>  
  <div class="flex-item">5</div>  
</div>  
  
</body>  
</html>

styles.css:

/* styles.css */  
  
.flex-container {  
  display: flex;  
  flex-direction: row;  
  justify-content: flex-start;  
  align-items: stretch;  
  margin-bottom: 20px;  
  width: 200px;  
  padding: 10px;  
  border: 1px solid #000;  
}  
  
.flex-item {  
  flex: 0 0 50px;  
  height: 50px;  
  margin: 5px;  
  background-color: #999;  
  color: #fff;  
  text-align: center;  
  line-height: 50px;  
  border: 1px solid #666;  
}  
  
.nowrap {  
  flex-wrap: nowrap;  
}  
  
.wrap {  
  flex-wrap: wrap;  
}  
  
.wrap-reverse {  
  flex-wrap: wrap-reverse;  
}

运行结果:

2.3 flex-flow

flex-flow 是 CSS 中的一个简写属性,用于设置一个弹性容器(flex container)的主轴方向(flex-direction)和换行方式(flex-wrap)。

flex-flow 的值是由两部分组成的,第一部分是 flex-direction,第二部分是 flex-wrap

  1. flex-direction:定义主轴的方向,即子元素排列的方向。它有以下四个可能的值:

    • row:默认值,主轴为水平方向,子元素从左到右排列。
    • row-reverse:主轴为水平方向,但子元素从右到左排列。
    • column:主轴为垂直方向,子元素从上到下排列。
    • column-reverse:主轴为垂直方向,但子元素从下到上排列。
  2. flex-wrap:定义子元素是否应该换行以及如何换行。它有三个可能的值:

    • nowrap:默认值,子元素不会换行,即使容器的空间不足以容纳它们。
    • wrap:如果容器的空间不足以容纳所有子元素,那么子元素会移到下一行。
    • wrap-reverse:子元素会从容器的底部开始向上换行。

示例:

flex.html:

<!DOCTYPE html>  
<html lang="en">  
<head>  
<meta charset="UTF-8">  
<meta name="viewport" content="width=device-width, initial-scale=1.0">  
<title>Flex Flow Example</title>  
<link rel="stylesheet" href="styles.css"> <!-- 引入外部 CSS 文件 -->  
</head>  
<body>  
  
<h2>Flex Flow Example</h2>  
<div class="flex-container">  
  <div class="flex-item">1</div>  
  <div class="flex-item">2</div>  
  <div class="flex-item">3</div>  
  <div class="flex-item">4</div>  
  <div class="flex-item">5</div>  
  <div class="flex-item">6</div>  
  <div class="flex-item">7</div>  
  <div class="flex-item">8</div>  
  <div class="flex-item">9</div>  
  <div class="flex-item">10</div>  
</div>  
  
</body>  
</html>

styles:

/* styles.css */  
  
.flex-container {  
  display: flex;  
  flex-flow: row wrap; /* 设置主轴为水平和允许换行 */  
  justify-content: flex-start;  
  align-items: stretch;  
  margin-bottom: 20px;  
  padding: 10px;  
  width: 800px;
  border: 1px solid #000;  
}  
  
.flex-item {  
  flex: 0 0 100px; /* 不允许弹性伸缩,固定宽度为 100px */  
  height: 50px;  
  margin: 5px;  
  background-color: #999;  
  color: #fff;  
  text-align: center;  
  line-height: 50px;  
  border: 1px solid #666;  
}

运行结果:

2.4 justify-content

justify-content 是 CSS 中用于控制弹性盒子(flex container)中的子元素(flex items)在主轴(main axis)上的对齐方式的属性。这个属性对于如何分布和对齐容器内的元素非常关键。以下是 justify-content 的几个可能的值:

  1. flex-start:默认值,子元素向主轴的起点对齐。

  2. flex-end:子元素向主轴的终点对齐。

  3. center:子元素在主轴上居中对齐。

  4. space-between:子元素平均分布在主轴上,首尾元素分别对齐到主轴的起点和终点。

  5. space-around:子元素平均分布在主轴上,且每个元素两侧的间隔相等。这意味着首尾元素到容器边缘的间隔会比它们之间的间隔小一半。

示例:

flex.html:

<!DOCTYPE html>  
<html lang="en">  
<head>  
<meta charset="UTF-8">  
<meta name="viewport" content="width=device-width, initial-scale=1.0">  
<title>Justify Content Example</title>  
<link rel="stylesheet" href="styles.css">  
</head>  
<body>  
  
<h2>Justify Content Example</h2>  
  
<ul class="flex-container flex-container-start">  
  <li class="flex-item">1</li>  
  <li class="flex-item">2</li>  
  <li class="flex-item">3</li>  
</ul>  
  
<ul class="flex-container flex-container-end">  
  <li class="flex-item">1</li>  
  <li class="flex-item">2</li>  
  <li class="flex-item">3</li>  
</ul>  
  
<ul class="flex-container flex-container-center">  
  <li class="flex-item">1</li>  
  <li class="flex-item">2</li>  
  <li class="flex-item">3</li>  
</ul>  
  
<ul class="flex-container flex-container-between">  
  <li class="flex-item">1</li>  
  <li class="flex-item">2</li>  
  <li class="flex-item">3</li>  
</ul>  
  
<ul class="flex-container flex-container-around">  
  <li class="flex-item">1</li>  
  <li class="flex-item">2</li>  
  <li class="flex-item">3</li>

styles.css:

/* styles.css */  
  
.flex-container {  
  display: flex;  
  flex-flow: row nowrap; /* 设置主轴为水平且不换行 */  
  width: 400px;  
  height: 100px;  
  margin: 0;  
  padding: 0;  
  list-style: none;  
  border: 1px solid #000;  
}  
  
.flex-item {  
  flex: 0 0 50px; /* 固定宽度为 50px */  
  height: 80%;  
  margin: 5px;  
  background-color: #999;  
  color: #fff;  
  text-align: center;  
  line-height: 100px;  
  border: 1px solid #666;  
}  
  
/* flex-start */  
.flex-container-start {  
  justify-content: flex-start;  
}  
  
/* flex-end */  
.flex-container-end {  
  justify-content: flex-end;  
}  
  
/* center */  
.flex-container-center {  
  justify-content: center;  
}  
  
/* space-between */  
.flex-container-between {  
  justify-content: space-between;  
}  
  
/* space-around */  
.flex-container-around {  
  justify-content: space-around;  
}  
  

运行结果:

2.5 align-items

align-items 是 CSS Flexbox 布局中的一个属性,它定义了沿着交叉轴(cross axis)如何对齐 flex 容器的子元素(flex items)。交叉轴是与主轴(main axis)垂直的轴,主轴的方向由 flex-direction 属性决定。align-items 的值决定了子元素在交叉轴上的对齐方式。

以下是 align-items 的一些常见值:

  1. flex-start:子元素沿着交叉轴的起点对齐。

  2. flex-end:子元素沿着交叉轴的终点对齐。

  3. center:子元素在交叉轴上居中对齐。

  4. baseline:子元素按照它们的基线对齐。基线通常是文本内容的底部线,对于没有文本内容的元素,基线行为可能因元素类型而异。

  5. stretch(默认值):如果子元素未设置高度或设为 auto,则它们会沿着交叉轴方向拉伸以填满整个容器的高度。这意味着子元素会被拉伸或压缩以适应容器的高度,除非它们有自己的明确尺寸。

示例:

flex.html:

<!DOCTYPE html>  
<html lang="en">  
<head>  
<meta charset="UTF-8">  
<meta name="viewport" content="width=device-width, initial-scale=1.0">  
<title>Align Items Example</title>  
<link rel="stylesheet" href="styles.css">  
</head>  
<body>  
  
<div class="flex-container align-start">  
  <div class="flex-item">1</div>  
  <div class="flex-item">2</div>  
  <div class="flex-item">3</div>  
</div>  
  
<div class="flex-container align-end">  
  <div class="flex-item">1</div>  
  <div class="flex-item">2</div>  
  <div class="flex-item">3</div>  
</div>  
  
<div class="flex-container align-center">  
  <div class="flex-item">1</div>  
  <div class="flex-item">2</div>  
  <div class="flex-item">3</div>  
</div>  
  
<div class="flex-container align-baseline">  
  <div class="flex-item">1</div>  
  <div class="flex-item">2</div>  
  <div class="flex-item">3</div>  
</div>  
  
<div class="flex-container align-stretch">  
  <div class="flex-item">1</div>  
  <div class="flex-item">2</div>  
  <div class="flex-item">3</div>  
</div>  
  
</body>  
</html>

styles.css:

.flex-container {  
  display: flex;  
  height: 150px;  
  border: 1px solid black;  
}  
  
.flex-item {  
  width: 100px;  
  background-color: lightblue;  
  margin: 5px;  
  text-align: center;  
  line-height: 50px;  
}  
  
.align-start {  
  align-items: flex-start;  
}  
  
.align-end {  
  align-items: flex-end;  
}  
  
.align-center {  
  align-items: center;  
}  
  
.align-baseline {  
  align-items: baseline;  
}  
  
.align-stretch {  
  align-items: stretch;  
}

运行结果:

2.6 align-content

align-content 是 CSS Flexbox 布局中的一个属性,它用于定义在交叉轴(cross axis)上如何对齐 flex 容器的行(如果 flex 容器是多行的)。这个属性只对设置了 display: flex; 并且具有多行子项的容器有效。当容器只有一行子项时,align-content 属性不会产生任何效果。

align-content 的值及其含义如下:

  1. flex-start:与交叉轴的起点对齐。
  2. flex-end:与交叉轴的终点对齐。
  3. center:与交叉轴的中点对齐。
  4. space-between:子项之间的间隔平均分布。
  5. space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。

示例:

flex.html:

<!DOCTYPE html>  
<html lang="en">  
<head>  
<meta charset="UTF-8">  
<meta name="viewport" content="width=device-width, initial-scale=1.0">  
<title>Align Content Example</title>  
<link rel="stylesheet" href="styles.css">  
</head>  
<body>  
  
  
<div class="flex-container align-start">  
  <div class="flex-item">1</div>  
  <div class="flex-item">2</div> 
  <div class="flex-item">3</div> 
  <div class="flex-item">4</div> 
  <div class="flex-item">5</div> 
  <div class="flex-item">6</div> 
  <div class="flex-item">7</div> 
  <div class="flex-item">8</div> 
  <div class="flex-item">9</div>  
</div>  
  
<div class="flex-container align-end">  
  <div class="flex-item">1</div>  
  <div class="flex-item">2</div> 
  <div class="flex-item">3</div> 
  <div class="flex-item">4</div> 
  <div class="flex-item">5</div> 
  <div class="flex-item">6</div> 
  <div class="flex-item">7</div> 
  <div class="flex-item">8</div> 
  <div class="flex-item">9</div>  
</div> 

<div class="flex-container align-center">  
  <div class="flex-item">1</div>  
  <div class="flex-item">2</div> 
  <div class="flex-item">3</div> 
  <div class="flex-item">4</div> 
  <div class="flex-item">5</div> 
  <div class="flex-item">6</div> 
  <div class="flex-item">7</div> 
  <div class="flex-item">8</div> 
  <div class="flex-item">9</div>  
</div>  

<div class="flex-container align-between">  
  <div class="flex-item">1</div>  
  <div class="flex-item">2</div> 
  <div class="flex-item">3</div> 
  <div class="flex-item">4</div> 
  <div class="flex-item">5</div> 
  <div class="flex-item">6</div> 
  <div class="flex-item">7</div> 
  <div class="flex-item">8</div> 
  <div class="flex-item">9</div>  
</div>  

<div class="flex-container align-around">  
  <div class="flex-item">1</div>  
  <div class="flex-item">2</div> 
  <div class="flex-item">3</div> 
  <div class="flex-item">4</div> 
  <div class="flex-item">5</div> 
  <div class="flex-item">6</div> 
  <div class="flex-item">7</div> 
  <div class="flex-item">8</div> 
  <div class="flex-item">9</div>  
</div>  
</body>  
</html>

styles.css:

.flex-container {  
  display: flex;  
  flex-wrap: wrap;  
  justify-content: flex-start;  
  height: 150px;  
  width: 600px;
  padding: 10px;  
  box-sizing: border-box;  
  background-color: lightgrey;  
  margin-bottom: 10px;  
}  

.flex-item {  
  width: 50px;  
  height: 50px;  
  margin: 5px;  
  background-color: lightblue;  
  display: flex;  
  justify-content: center;  
  align-items: center;  
  color: white;  
  font-size: 14px;  
}  


.align-start {  
  align-content: flex-start;  
}  

.align-end {  
  align-content: flex-end;  
}  

.align-center {  
  align-content: center;  
}  

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

.align-around {  
  align-content: space-around;  
}  

运行结果:

三、Flex项目属性

Flex布局支持6个项目属性order、flex-grow、flex-shrink、flex-basis、flex、align-self

3.1 order

order属性用于控制Flex子项在容器中的排列顺序。默认情况下,Flex子项按照它们在HTML中出现的顺序排列,但是通过为子项设置不同的order值,你可以改变它们的排列顺序。较小的order值将排在前面,而较大的order值将排在后面。

示例:

<!DOCTYPE html>  
<html lang="en">  
<head>  
<meta charset="UTF-8">  
<meta name="viewport" content="width=device-width, initial-scale=1.0">  
<title>Flex Order Example</title>  
<style>  
  .flex-container {  
    display: flex;  
    list-style: none;  
    padding: 0;  
  }  
  .flex-item {  
    margin: 10px;  
    padding: 20px;  
    background-color: lightblue;  
    text-align: center;  
  }  
</style>  
</head>  
<body>  
  
<ul class="flex-container">  
  <li class="flex-item" style="order: 3;">Item 1,order: 3</li>  
  <li class="flex-item" style="order: 1;">Item 2,order: 1</li>  
  <li class="flex-item" style="order: 2;">Item 3,order: 2</li>  
</ul>  
  
</body>  
</html>

 运行结果:

3.2 flex-grow

flex-grow属性定义项目的放大比例,默认为0,如果存在剩余空间,也不放大

示例:

<!DOCTYPE html>  
<html lang="en">  
<head>  
<meta charset="UTF-8">  
<meta name="viewport" content="width=device-width, initial-scale=1.0">  
<title>Flex Grow Example</title>  
<style>  
  .flex-container {  
    display: flex;  
    background-color: lightgrey;  
    padding: 10px;  
    height: 200px;  
  }  
  .flex-item {  
    margin: 5px;  
    background-color: lightblue;  
    text-align: center;  
    line-height: 50px; /* 垂直居中 */  
  }  
  .flex-item:nth-child(1) {  
    flex-grow: 1;  
  }  
  .flex-item:nth-child(2) {  
    flex-grow: 2;  
  }  
  .flex-item:nth-child(3) {  
    flex-grow: 3;  
  }  
</style>  
</head>  
<body>  
  
<div class="flex-container">  
  <div class="flex-item">1</div>  
  <div class="flex-item">2</div>  
  <div class="flex-item">3</div>  
</div>  
  
</body>  
</html>

运行结果:

3.3 flex-shrink 

flex-shrink属性定义项目缩小比例,默认为1,如果空间不足,项目会缩小,负值无效

示例:

<!DOCTYPE html>  
<html lang="en">  
<head>  
<meta charset="UTF-8">  
<meta name="viewport" content="width=device-width, initial-scale=1.0">  
<title>Flex Shrink Example</title>  
<style>  
  .flex-container {  
    display: flex;  
    width: 300px; /* 限制容器宽度 */  
    background-color: lightgrey;  
    padding: 10px;  
    overflow: auto; /* 显示溢出内容 */  
  }  
  .flex-item {  
    margin: 5px;  
    background-color: lightblue;  
    text-align: center;  
    line-height: 50px; /* 垂直居中 */  
  }  
  .flex-item:nth-child(1) {  
  
    flex-shrink: 1;  
  }  
  .flex-item:nth-child(2) {  

    flex-shrink: 2;  
  }  
  .flex-item:nth-child(3) {  
    
    flex-shrink: 3;  
  }  
</style>  
</head>  
<body>  
  
<div class="flex-container">  
  <div class="flex-item">Item 1 (flex-shrink: 1)</div>  
  <div class="flex-item">Item 2 (flex-shrink: 2)</div>  
  <div class="flex-item">Item 3 (flex-shrink: 3)</div>  
</div>  
  
</body>  
</html>

运行结果:

3.4 flex-basis

flex-basis是CSS Flexbox布局中的一个属性,它定义了Flex容器中的子项(flex items)在主轴方向上的初始大小。这个属性决定了子项内容盒(content-box)的宽度或高度,具体取决于主轴的方向。

示例:

<!DOCTYPE html>  
<html lang="en">  
<head>  
<meta charset="UTF-8">  
<meta name="viewport" content="width=device-width, initial-scale=1.0">  
<title>Flex Basis Example</title>  
<style>  
  .flex-container {  
    display: flex;  
    justify-content: flex-start;  
    border: 1px solid black;  
    width: 700px;
    padding-left: 10px;  
  }  
  .flex-item {  
    background-color: lightblue;  
    margin: 5px;  
    text-align: center;  
    line-height: 50px; /* 垂直居中 */  
  }  
  .item1 {  
    flex-basis: 100px;  
  }  
  .item2 {  
    flex-basis: 200px;  
  }  
  .item3 {  
    flex-basis: 300px;  
  }  
</style>  
</head>  
<body>  
  
<div class="flex-container">  
  <div class="flex-item item1">Item 1</div>  
  <div class="flex-item item2">Item 2</div>  
  <div class="flex-item item3">Item 3</div>  
</div>  
  
</body>  
</html>

运行结果:

 

3.5 flex

用于设置一个元素的flex-growflex-shrink, 和 flex-basis。这三个属性共同决定了元素如何在flex容器中增长、缩小和设置基础大小。

示例:

<!DOCTYPE html>  
<html lang="en">  
<head>  
<meta charset="UTF-8">  
<meta name="viewport" content="width=device-width, initial-scale=1.0">  
<title>Flexbox Example</title>  
<style>  
  /* Flex container */  
  .flex-container {  
    display: flex;  
    flex-wrap: wrap; /* Allow items to wrap to new lines */  
    justify-content: space-between; /* Space between items */  
    align-items: center; /* Center items vertically */  
    background-color: #f2f2f2;  
    padding: 10px;  
  }  
  
  /* Flex items */  
  .flex-item {  
    flex: 1 1 auto; /* flex-grow, flex-shrink, flex-basis */  
    margin: 10px;  
    padding: 20px;  
    background-color: #66b3ff;  
    color: white;  
    text-align: center;  
    border-radius: 5px;  
  }  
  
  
</style>  
</head>  
<body>  
  
<div class="flex-container">  
  <div class="flex-item">Item 1</div>  
  <div class="flex-item">Item 2</div>  
  <div class="flex-item">Item 3</div>  
  <div class="flex-item">Item 4</div>  
  <div class="flex-item">Item 5</div>  
</div>  
  
</body>  
</html>

运行结果:

3.6 align-self

align-self属性是一个特别有用的属性,它允许你单独覆盖一个flex子项目的对齐方式,而不是依赖于父容器设置的align-items属性。align-self优先级高于align-items,并且只在设置了该属性的flex子项目上生效。

align-self属性接受以下值:

  1. auto: 默认值,等同于父元素的align-items值。如果父元素没有设置align-items,则等同于stretch
  2. flex-start: 子项目与容器的交叉轴起点对齐。
  3. flex-end: 子项目与容器的交叉轴终点对齐。
  4. center: 子项目在容器的交叉轴上居中对齐。
  5. baseline: 子项目按照它们的基线对齐。
  6. stretch:(默认值,如果align-itemsalign-self设置为auto)子项目将沿交叉轴方向拉伸以填满整个容器。

示例:

<!DOCTYPE html>  
<html lang="en">  
<head>  
<meta charset="UTF-8">  
<meta name="viewport" content="width=device-width, initial-scale=1.0">  
<title>Flexbox Example with align-self</title>  
<style>  
  .flex-container {  
    display: flex;  
    justify-content: space-around;  
    align-items: center; /* This will be overridden by align-self */  
    height: 200px;  
    background-color: #f2f2f2;  
  }  
  
  .flex-item {  
    margin: 10px;  
    padding: 20px;  
    background-color: #66b3ff;  
    color: white;  
    text-align: center;  
    border-radius: 5px;  
  }  
  
  /* Using align-self to override alignment for a specific item */  
  .flex-item:nth-child(2) {  
    align-self: flex-start; /* This item will start at the top */  
  }  
  
  .flex-item:nth-child(3) {  
    align-self: flex-end; /* This item will end at the bottom */  
  }  
</style>  
</head>  
<body>  
  
<div class="flex-container">  
  <div class="flex-item">Item 1</div>  
  <div class="flex-item">Item 2</div>  
  <div class="flex-item">Item 3</div>  
</div>  
  
</body>  
</html>

运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/384326.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unity类银河恶魔城学习记录6-2 P66 Clone‘s Attack源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Clone_Skill.cs using System.Collections; using System.Collections.Gen…

二叉搜索树删除操作的递归与非递归写法

如何进行删除操作 对于二叉搜索树的删除操作&#xff0c;主要分为以下3种情况讨论&#xff1a; 1、删除的结点没有左右孩子 2、删除的结点只有一个孩子 3、删除的结点有左右孩子 所以&#xff0c;我们将会用if…else…分为最多3种情况讨论&#xff08;实际上只分了两种&#x…

关于java的多线程初识

关于java的多线程初识 我们从今天开始&#xff0c;正式学习java的多线程&#xff0c;我们在前面的文章中学习到了java的基础&#xff0c; 但是距离我们工作实战还差的很远&#xff0c;我们学习好了基础&#xff0c;以后的文章会逐步的深入&#xff0c;去讲解各种前端框架&…

同余数论性质

同余概念 当 a%m b%m&#xff0c;说明a和b同余&#xff0c;写作若 a≡b(mod m) 性质 衍生出几条性质 1.m | abs(a-b)&#xff0c;即|a-b|是m的倍数。&#xff08;注意&#xff0c;0是任何数的倍数&#xff09; 2.当a≡b(mod m)&#xff0c;c≡d(mod m)&#xff0c; 有ac…

IDEA Ultimate下载(采用JetBrain学生认证)

IDEA Ultimate版本下载 Ulitmate是无限制版&#xff08;解锁所有插件&#xff0c;正版需要付费。学生可以免费申请许可&#xff09;Community是开源社区版本&#xff08;部分插件不提供使用&#xff0c;比如Tomcat插件。免费&#xff09; 我们将通过学生认证获取免费版。 Je…

【vue3学习笔记】shallowReactive与shallowRef;readOnly与shallowReadOnly;toRaw与markRaw

尚硅谷Vue2.0Vue3.0全套教程丨vuejs从入门到精通 课程 P158节 《shallowReactive与shallowRef》笔记&#xff1a; reactive()与shallowReactive()&#xff1a;reactive()处理后的数据是响应式的&#xff0c;对象内嵌套的深层结构全部是响应式的。shallowReactive()处理后的数据…

闭环控制系统手自动策略(车辆定速巡航应用)

闭环控制系统的手自动策略并不会完全一样&#xff0c;不同的行业&#xff0c;基于不同的规范和安全考虑给出的手自动策略是不一样的&#xff0c;这里我们介绍汽车行业定速巡航应用。 PID闭环控制系统手自动切换的相关文章&#xff0c;还可以查看下面链接&#xff1a; 无扰切换…

2013-2022年上市公司迪博内部控制指数、内部控制分项指数数据

2013-2022年上市公司迪博内部控制指数、分项指数数据 1、时间&#xff1a;2013-2022年 2、范围&#xff1a;上市公司 3、指标&#xff1a;证券代码、证券简称、辖区、证监会行业、申万行业、内部控制指数、战略层级指数、经营层级指数、报告可靠指数、合法合规指数、资产安全…

基于Locust实现MQTT协议服务的压测脚本

一、背景简介 业务背景大概介绍一下&#xff0c;就是按照国标规定&#xff0c;车辆需要上传一些指定的数据到ZF的指定平台&#xff0c;同时车辆也会把数据传到企业云端服务上&#xff0c;于是乎就产生了一些性能需求。 目前我们只是先简单的进行了一个性能场景的测试&#xf…

C++进阶(十五)C++的类型转换

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、C语言中的类型转换二、为什么C需要四种类型转换三、C强制类型转换1、static_cast2、reint…

中国电子学会2019年12月份青少年软件编程Scratch图形化等级考试试卷三级真题(选择题、判断题)

一、单选题(共 25 题&#xff0c;每题 2 分&#xff0c;共 50 分) 1.怎样修改图章的颜色&#xff1f;&#xff08; &#xff09; A. 只需要一个数字来设置颜色 B. 设置 RGB 的值 C. 在画笔中设置颜色、饱和度、亮度 D. 在外观中设置或修改角色颜色特效 2.以下程序的执…

2024年Midjourney 付费订阅流程 | Midjourney 各版本介绍,使用虚拟信用卡支付买Midjourney流程指南

1.Midjourney介绍 Midjourney 是一款备受欢迎的人工智能生成图像工具&#xff0c;它可以通过输入文字描述&#xff0c;自动生成精美的图像。与许多其他图像生成工具不同&#xff0c;Midjourney 不需要安装任何软件&#xff0c;也不受个人电脑性能的限制&#xff0c;因为它运行…

计算机毕业设计SSM基于的冷链食品物流信息管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; vue mybatis Maven mysql5.7或8.0等等组成&#xff0c;B…

微信小程序(四十二)wechat-http拦截器

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.wechat-http请求的封装 2.wechat-http请求的拦截器的用法演示 源码&#xff1a; utils/http.js import http from "wechat-http"//设置全局默认请求地址 http.baseURL "https://live-api.ith…

【学网攻】 第(26)节 -- 综合网络实验一

系列文章目录 目录 系列文章目录 文章目录 前言 一、综合实验 二、实验 1.引入 实验目标 实验设备 实验拓扑图 实验配置 文章目录 【学网攻】 第(1)节 -- 认识网络【学网攻】 第(2)节 -- 交换机认识及使用【学网攻】 第(3)节 -- 交换机配置聚合端口【学网攻】 第(4)节…

C++ //练习 6.5 编写一个函数输出其实参的绝对值。

C Primer&#xff08;第5版&#xff09; 练习 6.5 练习 6.5 编写一个函数输出其实参的绝对值。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 /*************************************************************************&…

linux优化空间完全卸载mysql——centos7.9

文章目录 ⭐前言⭐linux命令使用&#x1f496; 基础命令&#x1f496; 内存优化&#x1f496; 完全删除mysql ⭐结束 ⭐前言 大家好&#xff0c;我是yma16&#xff0c;本文分享 linux优化空间&完全卸载mysql——centos7.9。 linux内存分配 在Linux中&#xff0c;内存分配是…

安装faiss环境教程

文章目录 打开环境安装faiss环境检查已安装的环境切换环境至faiss 打开环境 source activate # 打开环境安装faiss环境 conda create -n faiss_env # 安装faiss环境检查已安装的环境 conda info --envs # 检查已安装的环境切换环境至faiss conda a…

【数据结构】13:表达式转换(中缀表达式转成后缀表达式)

思想&#xff1a; 从头到尾依次读取中缀表达式里的每个对象&#xff0c;对不同对象按照不同的情况处理。 如果遇到空格&#xff0c;跳过如果遇到运算数字&#xff0c;直接输出如果遇到左括号&#xff0c;压栈如果遇到右括号&#xff0c;表示括号里的中缀表达式已经扫描完毕&a…

AlmaLinux右键菜单(基于GNOME桌面)

文章目录 前言前提说明在文件上右键在文件夹上右键 前言 在使用VSCode的过程中&#xff0c;AlmaLinux没能像Windows一样在右键菜单上显示打开方式&#xff0c;所以找了一下解决方案&#xff0c;罗列出来 前提说明 虽然说无论是media还是StackOverflow都推荐使用这条命令&…