CSS基础--Flex弹性布局

1. 弹性布局概念

弹性布局:Flexible Box 模型,通常被称为 flexbox(弹性盒子),主要用来为盒模型提供最大的灵活性,以便我们更好的实现多种响应式的页面布局,任何一个容器都可以指定为 flexbox(弹性盒子)

  • 主轴:在弹性布局中,我们会通过属性规定水平/垂直方向为主轴,默认水平方向为主轴。
  • 交叉轴:与主轴垂直的另一方向,称为交叉轴。

2. 弹性布局的使用

2.1 开启弹性布局

在使用弹性布局之前,需要弹性布局的元素的父容器添加display:flex; 属性,即可使容器内容采用弹性布局显示,默认从左到右。

开启弹性布局前:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        /* 一般弹性布局一般用在卡片的布局之类或者手机底部导航栏布局 */
        .box {
            height: 150px;
            border: 1px solid black;
        }

        .box>div {
            width: 150px;
            border: 1px solid red;
            text-align: center;
        }
    </style>
</head>
<body>
    <div class="box">
        <div>1</div>
        <div>2</div>
        <div>3</div>
        <div>4</div>
    </div>
</body>
</html>

在这里插入图片描述
开启弹性布局后:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        /* 一般弹性布局一般用在卡片的布局之类或者手机底部导航栏布局 */
        .box {
            height: 150px;
            border: 1px solid black;
            display: flex;
        }

        .box>div {
            width: 150px;
            border: 1px solid red;
            text-align: center;
        }
    </style>
</head>
<body>
    <div class="box">
        <div>1</div>
        <div>2</div>
        <div>3</div>
        <div>4</div>
    </div>
</body>
</html>

在这里插入图片描述

注意事项:
1. 弹性布局需在需要左右排列的元素的父容器中开启
2. 弹性布局默认是沿着主轴方向排列(主轴方向默认为水平向右的方向)

3. 如果当前弹性布局内的元素没有设置宽高,则开启弹性布局后默认高度会等同于当前父容器的高度,如果已经预设好高度,那么元素宽高就不会受父容器影响

让元素左右排列的方法:

  1. 将元素转化成行内块元素 display: inline-block;(行内块元素之间由于会默认保留一位换行符,所以会导致有一个间隙)
  2. 使用float浮动属性(浮动会导致高度塌陷的问题)
  3. 使用弹性布局

2.2 弹性布局的排列方式

flex-direction:

  • row(默认主轴以水平方向排列)
  • row-reverse(主轴以水平方向排列,起点在右侧)
  • column(主轴以垂直方向排列)
  • column-reverse(主轴以垂直方向排列,起点在底部)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .box{
            border: 1px solid black;
            /* 在父容器里设置弹性布局 */
            display: flex;
            /* 由于弹性布局元素始终会沿着主轴方向排列,则想要更改排列方式,就需要改变此时主轴的方向*/
            /* flex-direction 更改弹性布局中元素的排列方式 */
            flex-direction: row;
            flex-direction: row-reverse;
            flex-direction: column;
            flex-direction: column-reverse;
        }

        .box>div{
            width: 150px;
            height: 150px;
            /* 文本居中 */
            text-align: center;
            line-height: 150px;
            border: 1px solid red;
        }
    </style>
</head>
<body>
    <div class="box">
        <div>1</div>
        <div>2</div>
        <div>3</div>
        <div>4</div>
    </div>
</body>
</html>

在这里插入图片描述

2.3 弹性布局的换行方式

当容器的大小不足以容纳子元素的大小时,元素的大小就会变形。

flex-wrap:

  • nowrap(默认,不换行)
  • wrap(换行)
  • wrap-reverse(换行,第一行在下面)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .box{
            border: 1px solid black;
            display: flex;
            flex-wrap: nowrap;
            flex-wrap: wrap;
            flex-wrap: wrap-reverse;
        }
        .box>div{
            width: 150px;
            height: 150px;
            border: 1px solid red;
            text-align: center;
            line-height: 150px;
        }
    </style>
</head>
<body>
    <div class="box">
        <!-- div{$}*12 -->
        <div>1</div>
        <div>2</div>
        <div>3</div>
        <div>4</div>
        <div>5</div>
        <div>6</div>
        <div>7</div>
        <div>8</div>
        <div>9</div>
        <div>10</div>
        <div>11</div>
        <div>12</div>
    </div>
</body>
</html>

在这里插入图片描述

左浮动和行内块元素布局时,当元素宽度之和超过容器的宽度时会自动换行。

2.4 弹性布局的对齐方式

主轴对齐方式:

justify-content:

  • flex-start(默认以主轴起点方向对齐)
  • flex-end(主轴终点方向对齐)
  • center(主轴中心点居中对齐)
  • space-between(主轴两端对齐,元素之间间距相等)
  • space-around(元素之间间距相等,元素之间的间距比元素与边界之间的间距大一倍)

交叉轴对齐方式:

align-items:

  • flex-start(交叉轴起点方向对齐)
  • flex-end(交叉轴终点方向对齐)
  • center(交叉轴中心点对齐)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .box {
            height: 600px;
            border: 1px solid black;
            display: flex;
            justify-content: space-around;
            align-items: center;
        }
        .box>div {
            width: 150px;
            height: 150px;
            border: 1px solid red;
            /* 通过弹性布局将元素内的文本居中到正中心 */
            /* 开启弹性布局 */
            display: flex;
            /* 设置主轴居中 */
            justify-content: center;
            /* 设置交叉轴居中 */
            align-items: center;
        }
    </style>
</head>

<body>
    <div class="box">
        <div>1</div>
        <div>2</div>
        <div>3</div>
        <div>4</div>
        <div>5</div>
    </div>
</body>
</html>

在这里插入图片描述

2.5 弹性布局的空间分配

  • flex-grow:剩余空白部分的分配,如果有5个元素,元素都设置flex-grow:1,那么元素将等分空白部分(均分到空白部分的1/5)。如果只有一个元素设置flex-grow:2,其他元素都设置flex-grow:1,那么前者将分配到空白部分2/5的区域。
  • align-self:单独设置元素的垂直方向上的对齐方式(左对齐、右对齐、居中)。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .box {
            height: 600px;
            border: 1px solid black;
            display: flex;
        }

        .box>div {
            width: 150px;
            height: 150px;
            border: 1px solid red;
            /* 通过弹性布局设置文本居中 */
            display: flex;
            /* 主轴居中 */
            justify-content: center;
            /* 交叉轴居中 */
            align-items: center;
        }

        .box>div:nth-of-type(1) {
            flex-grow: 2;
            /* align-self 单独设置弹性布局元素在交叉轴方向的对齐方式 */
            /* flex-start 以交叉轴方向的起点位置对齐 */
            align-self: flex-start;
        }

        .box>div:nth-of-type(2) {
            flex-grow: 1;
            /* center  以交叉轴方向居中的位置对齐*/
            align-self: center;
        }

        .box>div:nth-of-type(3) {
            flex-grow: 1;
            /* flex-end 以交叉轴方向的重点位置对齐 */
            align-self: flex-end;
        }
    </style>
</head>

<body>

    <div class="box">
        <div>1</div>
        <div>2</div>
        <div>3</div>
    </div>
    
</body>

</html>

在这里插入图片描述

2.6 网页标题图标的设置

<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">

网页标题图标支持png、jpg、icon、gif图等图片格式

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="shortcut icon" href="https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fku.90sjimg.com%2Felement_origin_min_pic%2F18%2F07%2F23%2F8e2560169476aaa4c82dffde6c995de6.jpg&refer=http%3A%2F%2Fku.90sjimg.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1616916838&t=edac965efeacfafac7aea6e3cbb65cdf" type="image/x-icon">
</head>

<body>

</body>

</html>

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值