首页 > 其他分享 >27. 弹性盒

27. 弹性盒

时间:2023-01-04 19:11:28浏览次数:26  
标签:flex 27 元素 弹性 li ul background

一、弹性盒

  弹性盒(flex),也叫伸缩盒,它是 CSS 中的一种布局手段,它主要用来代替浮动来完成页面的布局。flex 可以使元素具有弹性,让元素可以跟随页面的大小的改变而改变。

  • 弹性容器
    • 要使用弹性盒,必须先将一个元素设置为弹性容器
    • 我们可以通过 display 属性来设置弹性容器
      • display:flex; 设置为块级弹性容器
      • display:inline-flex; 设置为行内的弹性容器
  • 弹性元素
    • 弹性容器的子元素使弹性元素(弹性项)
    • 弹性元素可以同时是弹性容器

二、弹性容器的样式

  • flex-direction:指定弹性容器中弹性元素的排列方式
    • 可选值:
      • row:默认值,弹性元素在容器中水平排列(自左向右)
      • row-reverse:弹性元素在容器中反向水平排列(自右向左)
      • column: 弹性元素在容器中纵向排列(自上向下)
      • row-reverse:弹性元素在容器中反向纵向排列(自下向上)
  • flex-wrap:设置弹性元素是否在弹性容器中自动换行
    • 可选值:
      • nowrap:默认值,元素不会自动换行
      • wrap;元素沿着辅轴方向自动换行
      • wrap-reverse:元素沿着辅轴反方向换行
  • justify-content:如何分配主轴上的空白空间(主轴上的元素如何排列)
    • 可选值:
      • flex-start:元素沿着主轴起边排列
      • flex-end:元素沿着主轴终边排列
      • center:元素居中排列
      • space-around:空白分布到元素两侧
      • space-evenly:空白分布到元素单侧
      • space-between:空白分布到元素中间
  • align-items:元素在辅轴上如何对齐,元素间的关系
    • 可选值:
      • stretch:默认值,将元素的长度设置为相同的值
      • flex-start:元素不会拉伸,沿着辅轴起边对齐
      • flex-end:沿着辅轴终边对齐
      • center:居中对齐
      • baseline:基线对齐
  • align-content:如何分配主轴上的空白空间(主轴上的元素如何排列)
    • 可选值:
      • flex-start:元素沿着主轴起边排列
      • flex-end:元素沿着主轴终边排列
      • center:元素居中排列
      • space-around:空白分布到元素两侧
      • space-evenly:空白分布到元素单侧
      • space-between:空白分布到元素中间

主轴:弹性元素的排列方向称为主轴;

侧轴:与主轴垂直方向的称为侧轴;

<!DOCTYPE html>
<html>
    <head>
        <title>弹性盒</title>
        <meta charset="UTF-8">

        <style>
            *{
                margin: 0;
                padding: 0;
                list-style: none;
            }

            ul{
                width: 500px;
                border: 10px red solid;
                /* 将ul设置为弹性容器 */
                display: flex;

                /* 
                    flex-wrap:设置弹性元素是否在弹性容器中自动换行
                        - 可选值:
                            - nowrap:默认值,元素不会自动换行
                            - wrap;元素沿着辅轴方向自动换行
                            - wrap-reverse:元素沿着辅轴反方向换行
                */
                flex-wrap: wrap;

                /* flex-flow:wrap 和 direction 的简写属性 */
                /*flex-flow:row wrap-reverse ;*/
            }

            ul li{
                width: 200px;
                height: 100px;
                font-size: 50px;
                text-align: center;
                line-height: 100px;
                flex-shrink: 0;
            }

            ul li:first-child{
                background-color: pink;
            }

            ul li:nth-child(2){
                background-color: #bfa;
            }

            ul li:last-child{
                background-color: plum;
            }
        </style>
    </head>
    <body>
        <ul>
            <li>1</li>
            <li>2</li>
            <li>3</li>
        </ul>
    </body>
</html>

<!DOCTYPE html>
<html>
    <head>
        <title>弹性盒</title>
        <meta charset="UTF-8">

        <style>
            *{
                margin: 0;
                padding: 0;
                list-style: none;
            }

            ul{
                width: 500px;
                border: 10px red solid;
                /* 将ul设置为弹性容器 */
                display: flex;

                /* 
                    flex-wrap:设置弹性元素是否在弹性容器中自动换行
                        - 可选值:
                            - nowrap:默认值,元素不会自动换行
                            - wrap;元素沿着辅轴方向自动换行
                            - wrap-reverse:元素沿着辅轴反方向换行
                */
                flex-wrap: wrap;

                /* flex-flow:wrap 和 direction 的简写属性 */
                /*flex-flow:row wrap-reverse ;*/
            }

            ul li{
                width: 200px;
                height: 100px;
                font-size: 50px;
                text-align: center;
                line-height: 100px;
                flex-shrink: 0;
            }

            ul li:first-child{
                background-color: pink;
            }

            ul li:nth-child(2){
                background-color: #bfa;
            }

            ul li:last-child{
                background-color: plum;
            }
        </style>
    </head>
    <body>
        <ul>
            <li>1</li>
            <li>2</li>
            <li>3</li>
        </ul>
    </body>
</html>
<!DOCTYPE html>
<html>
    <head>
        <title>弹性盒</title>
        <meta charset="UTF-8">

        <style>
            *{
                margin: 0;
                padding: 0;
                list-style: none;
            }

            ul{
                width: 500px;
                border: 10px red solid;
                /* 将ul设置为弹性容器 */
                display: flex;

                /*
                    justify-content:如何分配主轴上的空白空间(主轴上的元素如何排列)
                        - 可选值:
                            - flex-start:元素沿着主轴起边排列
                            - flex-end:元素沿着主轴终边排列
                            - center:元素居中排列
                            - space-around:空白分布到元素两侧
                            - space-evenly:空白分布到元素单侧
                            - space-between:空白分布到元素中间
                */
                justify-content: space-between;
            }

            ul li{
                width: 100px;
                height: 100px;
                font-size: 50px;
                text-align: center;
                line-height: 100px;
                flex-shrink: 0;
            }

            ul li:first-child{
                background-color: pink;
            }

            ul li:nth-child(2){
                background-color: #bfa;
            }

            ul li:last-child{
                background-color: plum;
            }
        </style>
    </head>
    <body>
        <ul>
            <li>1</li>
            <li>2</li>
            <li>3</li>
        </ul>
    </body>
</html>
<!DOCTYPE html>
<html>
    <head>
        <title>弹性盒</title>
        <meta charset="UTF-8">

        <style>
            *{
                margin: 0;
                padding: 0;
                list-style: none;
            }

            ul{
                width: 300px;
                height: 600px;
                border: 10px red solid;
                /* 将ul设置为弹性容器 */
                display: flex;
                flex-flow: row wrap;

                /*
                     align-items:元素在辅轴上如何对齐,元素间的关系 
                        - 可选值:
                            - stretch:默认值,将元素的长度设置为相同的值
                            - flex-start:元素不会拉伸,沿着辅轴起边对齐
                            - flex-end:沿着辅轴终边对齐
                            - center:居中对齐
                            - baseline:基线对齐
                */
                align-items: center;
            }

            ul li div{
                width: 100px;
                font-size: 30px;
                text-align: center;
                line-height: 100px;
                flex-shrink: 0;
            }

            ul li:first-child{
                background-color: pink;
            }

            ul li:nth-child(2){
                background-color: #bfa;
            }

            ul li:nth-child(3){
                background-color: gold;
            }

            ul li:nth-child(4){
                background-color: darkorange;
            }

            ul li:last-child{
                background-color: plum;
            }
        </style>
    </head>
    <body>
        <ul>
            <li>
                <div>1</div>
            </li>
            <li>
                <div>2</div>
                <div>2</div>
            </li>
            <li>
                <div>3</div>
                <div>3</div>
                <div>3</div>
            </li>
            <li>
                <div>4</div>
            </li>
            <li>
                <div>5</div>
                <div>5</div>
            </li>
        </ul>
    </body>
</html>
<!DOCTYPE html>
<html>
    <head>
        <title>弹性盒</title>
        <meta charset="UTF-8">

        <style>
            *{
                margin: 0;
                padding: 0;
                list-style: none;
            }

            ul{
                width: 300px;
                height: 600px;
                border: 10px red solid;
                /* 将ul设置为弹性容器 */
                display: flex;
                flex-flow: row wrap;

                /*
                    align-content:如何分配主轴上的空白空间(主轴上的元素如何排列)
                        - 可选值:
                            - flex-start:元素沿着主轴起边排列
                            - flex-end:元素沿着主轴终边排列
                            - center:元素居中排列
                            - space-around:空白分布到元素两侧
                            - space-evenly:空白分布到元素单侧
                            - space-between:空白分布到元素中间
                */
                align-content: space-between;
            }

            ul li div{
                width: 100px;
                font-size: 30px;
                text-align: center;
                line-height: 100px;
                flex-shrink: 0;
            }

            ul li:first-child{
                background-color: pink;
            }

            ul li:nth-child(2){
                background-color: #bfa;
            }

            ul li:nth-child(3){
                background-color: gold;
            }

            ul li:nth-child(4){
                background-color: darkorange;
            }

            ul li:last-child{
                background-color: plum;
            }
        </style>
    </head>
    <body>
        <ul>
            <li>
                <div>1</div>
            </li>
            <li>
                <div>2</div>
                <div>2</div>
            </li>
            <li>
                <div>3</div>
                <div>3</div>
                <div>3</div>
            </li>
            <li>
                <div>4</div>
            </li>
            <li>
                <div>5</div>
                <div>5</div>
            </li>
        </ul>
    </body>
</html>

三、弹性元素的样式

  • flex-grow:指定弹性元素的伸展的系数
    • 当父元素有多余空间的时候,子元素如何伸展,默认为 1
    • 父元素的剩余空间,会按照比例进行分配
  • flex-shrink:指定弹性元素的收缩系数
    • 当父元素中的空间不足以容纳所有的子元素时,如何对子元素进行收缩,默认为 1
    • 缩减多少是根据 缩减系数元素大小 来计算的
  • flex-basis:指定的是元素在主轴上的基础长度
    • 如果主轴是 横向的 则该值指定的就是元素的 宽度
    • 如果主轴是 纵向的 则 该值指定的就是元素的 高度
    • 默认值是 auto,表示参考元素自身的高度或宽度
    • 如果传递了一个具体的数值,则以该数值为准
  • flex:可以设置弹性元素的所有的三个样式
    • 格式:flex 增长 缩减 基础;
    • 默认值:initial 相当于 flex: 0 1 auto;
    • auto 相当于 flex: 1 1 auto;
    • none 相当于 flex: 0 0 auto;即弹性元素没有弹性
  • order:决定弹性元素的排列顺序
<!DOCTYPE html>
<html>
    <head>
        <title>弹性盒</title>
        <meta charset="UTF-8">

        <style>
            *{
                margin: 0;
                padding: 0;
                list-style: none;
            }

            ul{
                width: 500px;
                border: 10px red solid;
                /* 将ul设置为弹性容器 */
                display: flex;
            }

            ul li{
                width: 100px;
                height: 100px;
                font-size: 50px;
                text-align: center;
                line-height: 100px;
            }


            ul li:first-child{
                background-color: pink;
                /* 
                    flex-grow:指定弹性元素的伸展的系数
                        - 当父元素有多余空间的时候,子元素如何伸展
                        - 父元素的剩余空间,会按照比例进行分配
                */
                flex-grow: 1;
            }

            ul li:nth-child(2){
                background-color: #bfa;
                flex-grow: 2;
            }

            ul li:last-child{
                background-color: plum;
                flex-grow: 3;
            }
        </style>
    </head>
    <body>
        <ul>
            <li>1</li>
            <li>2</li>
            <li>3</li>
        </ul>
    </body>
</html>
<!DOCTYPE html>
<html>
    <head>
        <title>弹性盒</title>
        <meta charset="UTF-8">

        <style>
            *{
                margin: 0;
                padding: 0;
                list-style: none;
            }

            ul{
                width: 500px;
                border: 10px red solid;
                /* 将ul设置为弹性容器 */
                display: flex;
            }

            ul li{
                width: 300px;
                height: 100px;
                font-size: 50px;
                text-align: center;
                line-height: 100px;
            }

            ul li:first-child{
                background-color: pink;
                /* 
                    flex-shrink:指定弹性元素的收缩系数
                        - 当父元素中的空间不足以容纳所有的子元素时,如何对子元素进行收缩
                        - 缩减多少是根据 缩减系数 和 元素大小 来计算的
                */
                flex-shrink: 1;
            }

            ul li:nth-child(2){
                background-color: #bfa;
                flex-shrink: 2;
            }

            ul li:last-child{
                background-color: plum;
                flex-shrink: 3;
            }
        </style>
    </head>
    <body>
        <ul>
            <li>1</li>
            <li>2</li>
            <li>3</li>
        </ul>
    </body>
</html>
<!DOCTYPE html>
<html>
    <head>
        <title>弹性盒</title>
        <meta charset="UTF-8">

        <style>
            *{
                margin: 0;
                padding: 0;
                list-style: none;
            }

            ul{
                width: 500px;
                border: 10px red solid;
                /* 将ul设置为弹性容器 */
                display: flex;
            }

            ul li{
                width: 300px;
                height: 100px;
                font-size: 50px;
                text-align: center;
                line-height: 100px;

                /* 
                    flex-basis:指定的是元素在主轴上的基础长度
                        - 如果主轴是 横向的 则 该值指定的就是元素的宽度
                        - 如果主轴是 纵向的 则 该值指定的就是元素的高度
                        - 默认值是 auto,表示参考元素自身的高度或宽度
                        - 如果传递了一个具体的数值,则以该数值为准
                */
                flex-basis: 100px;
            }

            ul li:first-child{
                background-color: pink;
            }

            ul li:nth-child(2){
                background-color: #bfa;
            }

            ul li:last-child{
                background-color: plum;
            }
        </style>
    </head>
    <body>
        <ul>
            <li>1</li>
            <li>2</li>
            <li>3</li>
        </ul>
    </body>
</html>
<!DOCTYPE html>
<html>
    <head>
        <title>弹性盒</title>
        <meta charset="UTF-8">

        <style>
            *{
                margin: 0;
                padding: 0;
                list-style: none;
            }

            ul{
                width: 500px;
                border: 10px red solid;
                /* 将ul设置为弹性容器 */
                display: flex;
            }

            ul li{
                width: 300px;
                height: 100px;
                font-size: 50px;
                text-align: center;
                line-height: 100px;

                /* 
                    flex:可以设置弹性元素的所有的三个样式
                        - 格式:flex 增长 缩减 基础;
                        - 默认值:initial 相当于 flex: 0 1 auto;
                        - auto 相当于 flex: 1 1 auto;
                        - none 相当于 flex: 0 0 auto;即弹性元素没有弹性
                */
                flex: initial;
            }

            ul li:first-child{
                background-color: pink;
            }

            ul li:nth-child(2){
                background-color: #bfa;
            }

            ul li:last-child{
                background-color: plum;
            }
        </style>
    </head>
    <body>
        <ul>
            <li>1</li>
            <li>2</li>
            <li>3</li>
        </ul>
    </body>
</html>
<!DOCTYPE html>
<html>
    <head>
        <title>弹性盒</title>
        <meta charset="UTF-8">

        <style>
            *{
                margin: 0;
                padding: 0;
                list-style: none;
            }

            ul{
                width: 500px;
                border: 10px red solid;
                /* 将ul设置为弹性容器 */
                display: flex;
            }

            ul li{
                width: 300px;
                height: 100px;
                font-size: 50px;
                text-align: center;
                line-height: 100px;
            }

            ul li:first-child{
                background-color: pink;
                /* order:决定弹性元素的排列顺序 */
                order: 3;
            }

            ul li:nth-child(2){
                background-color: #bfa;
                order: 2;
            }

            ul li:last-child{
                background-color: plum;
                order: 1;
            }
        </style>
    </head>
    <body>
        <ul>
            <li>1</li>
            <li>2</li>
            <li>3</li>
        </ul>
    </body>
</html>

标签:flex,27,元素,弹性,li,ul,background
From: https://www.cnblogs.com/nanoha/p/17025774.html

相关文章