伸缩布局详解【弹性布局】(flex)以及用flex写一个伸缩导航

伸缩布局

1.首先给子元素的直接父元素设置伸缩盒子

display:flex;

2.当父元素为伸缩盒子时,默认子元素在一行上显示
3.伸缩盒子的特点:
◆如果一个盒子变成为伸缩盒子,那么该盒子就具有了两条轴,一条是主轴,一条是侧轴。主轴的默认方向是水平从左向右,侧轴始终要垂直于主轴。
◆子元素是按照主轴的方向显示的。

设置主轴的方向

/*设置主轴的方向。默认为水平从左向右row*/
            flex-direction: row;

在这里插入图片描述

 flex-direction: row-reverse;

在这里插入图片描述

flex-direction: column;

在这里插入图片描述

flex-direction: column-reverse;

在这里插入图片描述

总结:
1.由于在伸缩盒子中子元素是按照主轴的方向显示的,因此我们改变了主轴的方向,子元素的位置也会发生改变
2.主轴的方向发生改变后,侧轴的方向也会随之发生改变

设置子元素在主轴的对齐方式

默认对齐方式
justify-content: flex-start;

在这里插入图片描述

justify-content: flex-end;

在这里插入图片描述

 justify-content: center;

在这里插入图片描述

justify-content: space-between;

在这里插入图片描述

justify-content: space-around;

在这里插入图片描述

总结:
◆通过设置该属性,只是改变了子元素在主轴方向的对齐方式,而元素自己本身的位置并没有改变

设置子元素在侧轴的对齐方式

align-items: flex-start;

在这里插入图片描述

align-items: flex-end;

在这里插入图片描述

 align-items: center;

在这里插入图片描述

子元素在侧轴的对齐方式
align-items: stretch;
子元素没有设置高度

在这里插入图片描述

总结:
◆在伸缩盒子中,子元素可以不用设置高度,如果不设置高度,那么该子元素的高度等于其父元素的高度,所以子元素在侧轴是拉伸的效果

设置伸缩盒子是否允许子元素换行

在伸缩盒子中,如果子元素的宽度超出了父元素的宽度,那么子元素不会换行显示。
设置子元素换行显示:
 /*设置子元素在父元素中是否换行显示*/
            flex-wrap: nowrap;

在这里插入图片描述

 /*子元素可以换行显示*/
            flex-wrap:wrap;

在这里插入图片描述

设置子元素换行后的对齐效果

/*设置子元素换行后的对齐效果*/
            align-content: flex-start;

在这里插入图片描述

align-content: flex-end;

在这里插入图片描述

align-content: center;

在这里插入图片描述

align-content: space-around;

在这里插入图片描述

align-content: space-between;

在这里插入图片描述

align-content: stretch;

在这里插入图片描述

总结:
◆该属性设置的前提是必须保证是换行后的元素

伸缩盒子中子元素的相关属性

◆flex:设置子元素占父元素剩下宽度的比例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css">
        .box{
            width: 500px;
            height: 500px;
            border: 1px solid red;
            /*将父元素设置为伸缩盒子*/
            display: flex;
            /*设置主轴的方向。默认为水平从左向右row*/
            /*flex-direction: row;*/
            /*flex-direction: row-reverse;*/
            /*flex-direction: column;*/
            /*flex-direction: column-reverse;*/

            /*设置子元素在主轴的对齐方式,默认flex-start*/
            /*justify-content: flex-start;*/
            /*justify-content: flex-end;*/
            /*justify-content: center;*/
            /*justify-content: space-between;*/
            /*justify-content: space-around;*/

            /*设置子元素在侧轴的对齐方式*/
            /*align-items: flex-start;*/
            /*align-items: flex-end;*/
            /*align-items: center;*/
            /*align-items: stretch;*/

            /*设置子元素在父元素中是否换行显示*/
            /*flex-wrap: nowrap;*/
            /*子元素可以换行显示*/
            flex-wrap:wrap;

            /*设置子元素换行后的对齐效果*/
            /*align-content: flex-start;*/
            /*align-content: flex-end;*/
            /*align-content: center;*/
            /*align-content: space-around;*/
            /*align-content: space-between;*/
            /*align-content: stretch;*/
        }
        .box>div{
            margin: 3px;
        }
        .one{
           flex: 1;
            height: 100px;
            background-color: #000000;
        }
        .two{
            /*width: 100px;*/
            height: 100px;
            flex: 1;
            background-color: red;
        }
        .three{
            flex: 1;
            /*width: 100px;*/
            height: 100px;
            background-color: blue;
        }
    </style>
</head>
<body>
<div class="box">
    <div class="one"></div>
    <div class="two"></div>
    <div class="three"></div>
</div>
</body>
</html>

在这里插入图片描述
◆order:排序
◆不需要改变HTML结构中的位置,就可以实现在页面中调换元素的显示位置
◆order的取值越大,那么该元素在页面中的显示位置就越靠后

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css">
        .box{
            width: 500px;
            height: 500px;
            border: 1px solid red;
            /*将父元素设置为伸缩盒子*/
            display: flex;
            /*设置主轴的方向。默认为水平从左向右row*/
            /*flex-direction: row;*/
            /*flex-direction: row-reverse;*/
            /*flex-direction: column;*/
            /*flex-direction: column-reverse;*/

            /*设置子元素在主轴的对齐方式,默认flex-start*/
            /*justify-content: flex-start;*/
            /*justify-content: flex-end;*/
            /*justify-content: center;*/
            /*justify-content: space-between;*/
            /*justify-content: space-around;*/

            /*设置子元素在侧轴的对齐方式*/
            /*align-items: flex-start;*/
            /*align-items: flex-end;*/
            /*align-items: center;*/
            /*align-items: stretch;*/

            /*设置子元素在父元素中是否换行显示*/
            /*flex-wrap: nowrap;*/
            /*子元素可以换行显示*/
            flex-wrap:wrap;

            /*设置子元素换行后的对齐效果*/
            /*align-content: flex-start;*/
            /*align-content: flex-end;*/
            /*align-content: center;*/
            /*align-content: space-around;*/
            /*align-content: space-between;*/
            /*align-content: stretch;*/
        }
        .box>div{
            margin: 3px;
        }
        .one{
           /*flex: 1;*/
            width: 100px;
            order: 1;
            height: 100px;
            background-color: #000000;
        }
        .two{
            width: 100px;
            height: 100px;
            /*flex: 1;*/
            background-color: red;
            order: 2;
        }
        .three{
            width: 100px;
            height: 100px;
            background-color: blue;
        }
    </style>
</head>
<body>
<div class="box">
    <div class="one"></div>
    <div class="two"></div>
    <div class="three"></div>
</div>
</body>
</html>

在这里插入图片描述

伸缩导航

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css">
        *{
            margin: 0;
            padding: 0;
            list-style: none;
        }
        .box{
            width: 960px;
            height: 60px;
            background-color: #ccc;
            margin: 100px auto;
            border-radius: 5px;
            overflow: hidden;
        }
        .box ul{
            display: flex;
        }
        .box li{
            flex: 1;
            line-height: 60px;
            display: flex;
            text-align: center;
        }
        .box a{
            flex: 1;
            text-decoration: none;
        }
        a:hover{
            background-color: red;
        }
    </style>
</head>
<body>
<div class="box">
    <ul>
        <li>
            <a href="#">首页</a>
        </li>
        <li>
            <a href="#">首页</a>
        </li>
        <li>
            <a href="#">联系我们</a>
        </li>
        <li>
            <a href="#">博客之星</a>
        </li>
        <li>
            <a href="#">VIP专栏</a>
        </li>
        <li>
            <a href="#">下载</a>
        </li>
        <li>
            <a href="#">论坛</a>
        </li>
        <li>
            <a href="#">问答</a>
        </li>
        <li>
            <a href="#">活动</a>
        </li>
        <li>
            <a href="#">更多</a>
        </li>
    </ul>
</div>
</body>
</html>

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值