CSS 弹性盒子布局使用方法介绍

CSS 弹性盒子布局

CSS 弹性盒子布局 是 CSS 的模块之一,定义了一种针对用户界面设计而优化的 CSS 盒子模型。在弹性布局模型中,弹性容器的子元素可以在任何方向上排布,也可以“弹性伸缩”其尺寸,既可以增加尺寸以填满未使用的空间,也可以收缩尺寸以避免父元素溢出。子元素的水平对齐和垂直对齐都能很方便的进行操控。通过嵌套这些框(水平框在垂直框内,或垂直框在水平框内)可以在两个维度上构建布局。

CSS 属性

CSS 弹性盒子布局的css分两种:

  • 一种是应用中父容器的的CSS,用于设定父容器本身或者全部子元素的表现形式
  • 另一种则是应用在子元素上,用于设置单个子元素的表现行为

下面将逐一展示css代码和效果

应用在父容器元素上的CSS属性

1.display: flex | inline-flex;
用于设定一个flex(**弹性盒子布局**)容器

flex 设定一个块级的flex(弹性盒子布局)容器

<ul style="display: inline-flex;">
    <li>1</li>
    <li>2</li>
</ul>
<ul style="display: inline-flex;">
    <li>1</li>
    <li>2</li>
</ul>

在这里插入图片描述inline-flex 设定一个行内的flex(弹性盒子布局)容器

<ul style="display: inline-flex;">
    <li>1</li>
    <li>2</li>
</ul>
<ul style="display: inline-flex;">
    <li>1</li>
    <li>2</li>
</ul>

在这里插入图片描述

2. flex-direction
设置伸缩盒对象的子元素在父容器中位置
  1. flex-direction: row; 设置伸缩盒对象的子元素在父容器中的水平分布并靠在父容器的左侧
<ul class="box" style="flex-direction: row;">
     <li>1</li>
     <li>2</li>
     <li>3</li>
</ul>

在这里插入图片描述

  1. flex-direction: row-reverse; 设置伸缩盒对象的子元素在父容器中的位置水平逆序分布并靠在父容器的右侧
<ul class="box" style="flex-direction: row-reverse;">
     <li>1</li>
     <li>2</li>
     <li>3</li>
</ul>

在这里插入图片描述

  1. flex-direction: column; 设置伸缩盒对象的子元素在父容器中的位置垂直分布并靠在父容器上面
<ul class="box" style="flex-direction:column;">
     <li>1</li>
     <li>2</li>
     <li>3</li>
</ul>

在这里插入图片描述

  1. flex-direction: column-reverse; 设置伸缩盒对象的子元素在父容器中的位置垂直逆序分布并靠在父容器底部
<ul class="box" style="flex-direction:column;">
     <li>1</li>
     <li>2</li>
     <li>3</li>
</ul>

在这里插入图片描述

3. flex-wrap
设置伸缩盒对象的子元素超出父容器时是否换行
  1. flex-wrap: nowrap; 设置伸缩盒对象的子元素超出父容器时是不换行,如果没有设置min-width,这样会压缩子元素的width
<ul class="box" style="flex-wrap: wrap;">
     <li>1</li>
     <li>2</li>
     <li>3</li>
     <li>1</li>
     <li>2</li>
     <li>3</li>
     <li>1</li>
     <li>2</li>
     <li>3</li>
     <li>1</li>
     <li>2</li>
     <li>3</li>
</ul>

在这里插入图片描述
2. flex-wrap: wrap; 设置伸缩盒对象的子元素超出父容器时是换行

<ul class="box" style="flex-wrap: wrap;">
     <li>1</li>
     <li>2</li>
     <li>3</li>
     <li>1</li>
     <li>2</li>
     <li>3</li>
     <li>1</li>
     <li>2</li>
     <li>3</li>
     <li>1</li>
     <li>2</li>
     <li>3</li>
</ul>

在这里插入图片描述

  1. flex-wrap: wrap-reverse; 设置伸缩盒对象的子元素超出父容器时是自下而上换行
<ul class="box" style="flex-wrap: wrap-reverse;">
     <li>1</li>
     <li>2</li>
     <li>3</li>
     <li>1</li>
     <li>2</li>
     <li>3</li>
     <li>1</li>
     <li>2</li>
     <li>3</li>
     <li>1</li>
     <li>2</li>
     <li>3</li>
</ul>

在这里插入图片描述

4. flex-flow
复合属性,设置伸缩盒对象子元素的排列方式
 flex-flow: <‘flex-direction’> || <‘flex-wrap’>
<ul class="box" style="flex-flow: column wrap-reverse; max-height: 200px;">
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
    <li>6</li>
    <li>7</li>
    <li>8</li>
    <li>9</li>
    <li>10</li>
    <li>11</li>
    <li>12</li>
    <li>13</li>
</ul>

在这里插入图片描述

5. justify-content
设置或检索弹性盒子元素在水平方向上的对齐方式。
  1. justify-content:flex-start; 设置伸缩盒对象的子元素在父容器中水平方向上左对齐
<ul class="box" style="justify-content:flex-start;">
    <li>1</li>
    <li>2</li>
    <li>3</li>
</ul>

在这里插入图片描述

  1. justify-content:flex-end; 设置伸缩盒对象的子元素在父容器中水平方向上右对齐
<ul class="box" style="justify-content:flex-end;">
    <li>1</li>
    <li>2</li>
    <li>3</li>
</ul>

在这里插入图片描述

  1. justify-content:center; 设置伸缩盒对象的子元素在父容器中水平方向上居中对齐
<ul class="box" style="justify-content:center;">
    <li>1</li>
    <li>2</li>
    <li>3</li>
</ul>

在这里插入图片描述

  1. justify-content:space-around; 设置伸缩盒对象的子元素在父容器中水平方向上平均分布
<ul class="box" style="justify-content:space-around">
    <li>1</li>
    <li>2</li>
    <li>3</li>
</ul>

在这里插入图片描述

  1. justify-content:space-between; 设置伸缩盒对象的子元素在父容器中水平方向上平均分布
<ul class="box" style="justify-content:space-between;">
    <li>1</li>
    <li>2</li>
    <li>3</li>
</ul>

在这里插入图片描述

6. align-items
设置弹性盒子元素在垂直方向上的对齐方式。(适用于子元素排列为单行)
  1. align-items:flex-start; 设置伸缩盒对象的子元素在父容器中紧靠顶部
<ul class="box" style="min-height: 200px; align-items:flex-start;">
    <li>1</li>
    <li>2</li>    
    <li>3</li>
</ul>

在这里插入图片描述

  1. align-items:flex-end;设置伸缩盒对象的子元素在父容器中紧靠底部
<ul class="box" style="min-height: 200px; align-items:flex-end;">
    <li>1</li>
    <li>2</li>
    <li>3</li>
</ul>

在这里插入图片描述
3. align-items:center;设置伸缩盒对象的子元素在父容器中垂直居中

<ul class="box" style="min-height: 200px; align-items:center;">
    <li>1</li>
    <li>2</li>
    <li>3</li>
</ul>

在这里插入图片描述
4. align-items:baseline;设置伸缩盒对象的子元素在父容器中基线对齐.如弹性盒子元素的行内轴与侧轴为同一条,则该值与’flex-start’等效。

<ul class="box" style="min-height: 200px; align-items:baseline;">
    <li style="height: 30px;">1</li>
    <li style="height: 40px;">2</li>
    <li>3</li>
</ul>

在这里插入图片描述
5. align-items:stretch;如果指定侧轴大小的属性值为’auto’,则其值会使项目的边距盒的尺寸尽可能接近所在行的尺寸,但同时会遵照’min/max-width/height’属性的限制。

<ul class="box" style="min-height: 200px; align-items:baseline;">
    <li style="height: 30px;">1</li>
    <li style="height: 40px;">2</li>
    <li>3</li>
</ul>

在这里插入图片描述

7. align-content
设置弹性盒堆叠伸缩行的垂直方向上对齐方式。(适用于子元素排列为多行)
  1. align-content: flex-start; 设置弹性盒堆叠伸缩行的顶部对齐
<ul class="box" style="min-height: 200px; flex-wrap: wrap; align-content: flex-start;">
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
    <li>6</li>
    <li>7</li>
    <li>8</li>
    <li>9</li>
    <li>10</li>
    <li>11</li>
    <li>12</li>
    <li>13</li>
</ul>

在这里插入图片描述
2. align-content: flex-end;设置弹性盒堆叠伸缩行的底部对齐

<ul class="box" style="min-height: 200px; flex-wrap: wrap; align-content: flex-end;">
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
    <li>6</li>
    <li>7</li>
    <li>8</li>
    <li>9</li>
    <li>10</li>
    <li>11</li>
    <li>12</li>
    <li>13</li>
</ul>

在这里插入图片描述
3. align-content: center; 设置弹性盒堆叠伸缩行的垂直居中

<ul class="box" style="min-height: 200px; flex-wrap: wrap; align-content: center;">
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
    <li>6</li>
    <li>7</li>
    <li>8</li>
    <li>9</li>
    <li>10</li>
    <li>11</li>
    <li>12</li>
    <li>13</li>
</ul>

在这里插入图片描述
4. align-content: space-between; 设置弹性盒堆叠伸缩行的平均分布,第一行和最后一行会紧靠边框

<ul class="box" style="min-height: 200px; flex-wrap: wrap; align-content: space-between;">
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
    <li>6</li>
    <li>7</li>
    <li>8</li>
    <li>9</li>
    <li>10</li>
    <li>11</li>
    <li>12</li>
    <li>13</li>
</ul>

在这里插入图片描述
5. align-content: space-around; 设置弹性盒堆叠伸缩行的平均分布,第一行和最后一行不会紧靠边框

<ul class="box" style="min-height: 200px; flex-wrap: wrap; align-content: space-around;">
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
    <li>6</li>
    <li>7</li>
    <li>8</li>
    <li>9</li>
    <li>10</li>
    <li>11</li>
    <li>12</li>
    <li>13</li>
</ul>

在这里插入图片描述
6. align-content:stretch; 各行将会伸展以占用剩余的空间

<ul class="box1" style="display: flex; min-height: 200px; flex-wrap: wrap; align-content: stretch;">
    <li style="width: 50px;">1</li>
    <li style="width: 50px;">2</li>
    <li style="width: 50px;">3</li>
    <li style="width: 50px;">4</li>
    <li style="width: 50px;">5</li>
    <li style="width: 50px;">6</li>
    <li style="width: 50px;">7</li>
    <li style="width: 50px;">8</li>
    <li style="width: 50px;">9</li>
    <li style="width: 50px;">10</li>
    <li style="width: 50px;">11</li>
    <li style="width: 50px;">12</li>
    <li style="width: 50px;">13</li>
</ul>

在这里插入图片描述

应用在子元素上的CSS属性

order
用整数值来定义排列顺序,数值小的排在前面。可以为负值
<ul class="box" style="justify-content: space-around;">
    <li style="order: 3;">1</li>
    <li style="order: 2;">2</li>
    <li style="order: 1;">3</li>
</ul>

在这里插入图片描述

flex-grow
设置弹性盒的扩展比率。根据弹性盒子元素所设置的扩展因子作为比率来分配剩余空间。
<ul class="box" style="justify-content: space-around;">
    <li>1</li>
    <li style="flex-grow:1;">2</li>
    <li style="flex-grow:3;">3</li>
</ul>
/**
*  不设置“1” 的扩展比例;所以“1”的宽度为默认宽度;
*  “2”和“3”的扩展比例为1:3;也就是说把父容器content
*  宽度减去“1”的宽度,然后再把剩余的宽度分成1+3=4份,
*  “2”占一份,“3” 占据三份
*/

在这里插入图片描述

flex-shrink
设置弹性盒的收缩比率。根据弹性盒子元素所设置的扩展因子作为比率来分配收缩空间。
<ul class="box" style="justify-content: space-around;">
    <li style="width: 400px;">1</li>
    <li style="width: 400px;">2</li>
    <li style="width: 400px; flex-shrink:3;">3</li>
</ul>
/**
 *  不设置“1” “2“收缩比例;“3”的收缩比例为3;
 * 收缩比例跟扩展比例相反,当子元素可宽度加起
 * 来超过父容器的content的宽度,则子元素需要
 * 按收缩比例来分摊超出的宽度。也就是说减去分
 * 担的宽度。这里每个子元素的默认宽度为400px,
 * 而父容器的宽度为600px,则超出了200px.这时就
 * 需要每个子元素按比例减去各自的宽度。分别为
 * 40px:40px:120px
*/

在这里插入图片描述

flex-basis
设置弹性盒伸缩基准值
<ul class="box" style="justify-content: space-around;">
    <li style="width: 400px;">1</li>
    <li style="width: 400px;flex-basis:600px">2</li>
    <li style="width: 400px; flex-shrink:3;">3</li>
</ul>

在这里插入图片描述

align-self
设置或检索弹性盒子元素自身在垂直方向上的对齐方式

可选值:

align-self: auto | flex-start | flex-end | center | baseline | stretch

  • auto:如果’align-self’的值为’auto’,则其计算值为元素的父元素的’align-items’值,如果其没有父元素,则计算值为’stretch’。
  • flex-start:弹性盒子元素的侧轴(纵轴)起始位置的边界紧靠住该行的侧轴起始边界。
  • flex-end:弹性盒子元素的侧轴(纵轴)起始位置的边界紧靠住该行的侧轴结束边界。
  • center:弹性盒子元素在该行的侧轴(纵轴)上居中放置。(如果该行的尺寸小于弹性盒子元素的尺寸,则会向两个方向溢出相同的长度)。
  • baseline:如弹性盒子元素的行内轴与侧轴为同一条,则该值与’flex-start’等效。其它情况下,该值将参与基线对齐。
  • stretch:如果指定侧轴大小的属性值为’auto’,则其值会使项目的边距盒的尺寸尽可能接近所在行的尺寸,但同时会遵照’min/max-width/height’属性的限制。
<ul class="box" style="justify-content: space-around; height: 100px;">
    <li style="align-self: auto;">auto</li>
    <li style="align-self: flex-start;">flex-start</li>
    <li style="align-self: flex-end;">flex-end</li>
    <li style="align-self: center;">center</li>
    <li style="align-self: baseline;">baseline</li>
    <li style="align-self: stretch;">stretch</li>
</ul>

在这里插入图片描述

以上就是 CSS 弹性盒子布局 的简述。

本文参考自:

http://caibaojian.com/flexbox-guide.html
https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_Flexible_Box_Layout

本文案例源码下载地址:
https://download.csdn.net/download/weixin_44869002/11912701

  • 6
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值