深入解析CSS(第六天)

93 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第二十天,点击查看活动详情

深入解析CSS(第六天)

flex布局

flex布局应该是目前很多css开发者用的比较多的一种布局,保持同一行,居中,垂直居中,等高列等等都可以用到flex来实现,flex也称作为弹性盒子布局,跟浮动布局相比,Flexbox的可预测性更好,还能提供更精细的控制。

基本使用

当我们给元素添加display:flex时就会让该元素变成一个弹性容器,它的直接子元素变成弹性子元素,弹性子元素默认在同一行按照从左到右的顺序并排,弹性容器有一个很大特点就是能自动填满可用宽度,而且弹性子元素的高度会保持一致

一个弹性容器能控制内部元素的布局

image.png

子元素按照主轴线排列,主轴的方向为主起点(左)到主终点(右)。垂直于主轴的是副轴。方向从副起点(上)到副终点(下)。

实例

我们可以通过实例更加快速的了解到flex的强大之处,在很多网站中的导航栏,侧边栏等等都可以使用flex轻松实现

image.png

如果我们想实现掘金这样的导航栏就可以使用flex轻松实现

第一步

第一步我们先设置导航栏的高度,我们这里设置为60px,并将其设置成弹性容器

image.png

image.png

第二步

我们将导航栏的内容填写一下,将其设置为同一行

 <div class="header">
        <div>
            <img src="https://lf3-cdn-tos.bytescm.com/obj/static/xitu_juejin_web/e08da34488b114bd4c665ba2fa520a31.svg"
                alt="稀土掘金" class="logo-img" data-v-250c3156="">
        </div>

        <div>首页</div>
        <div>沸点</div>
        <div>课程</div>
        <div>直播</div>
        <div>活动</div>
        <div>商城</div>
        <div>APP</div>
        <div>插件</div>
        <img src="https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/19e7f58eecbd497c92397344e1d489a6~tplv-k3u1fbpfcp-zoom-1.image"
            style="max-width: 115px; vertical-align: middle" data-v-250c3156="">
        <div><input type="text" /></div>
        <div><button>创作者中心</button></div>
        <div><button>会员</button></div>
        <div>头像</div>
    </div>

image.png

第三步

接下来无疑就是修改样式,这里我们需要用align-items将其垂直居中,然后使用justify-content将其进行均分分布

image.png

image.png

这样是不是好看很多,但是我们可以发现她好像还是有点点差距

image.png

第四步

我们再分析分析一下原图,可以发现这个是二边分布,也就是这个导航栏其实是分为左右二部分,所以我们需要将左边的文字设置成一部分,右边的搜索或者其他设置成另一部分,并设置相对应的宽度,并用align-items将其垂直居中,然后使用justify-content将其进行均分分布

<div class="header">
        <div class="left">
            <div>
                <img src="https://lf3-cdn-tos.bytescm.com/obj/static/xitu_juejin_web/e08da34488b114bd4c665ba2fa520a31.svg"
                    alt="稀土掘金" class="logo-img" data-v-250c3156="">
            </div>

            <div>首页</div>
            <div>沸点</div>
            <div>课程</div>
            <div>直播</div>
            <div>活动</div>
            <div>商城</div>
            <div>APP</div>
            <div>插件</div>
            <img src="https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/19e7f58eecbd497c92397344e1d489a6~tplv-k3u1fbpfcp-zoom-1.image"
                style="max-width: 115px; vertical-align: middle" data-v-250c3156="">
        </div>
        <div class="right">
            <div><input type="text" /></div>
            <div><button>创作者中心</button></div>
            <div><button>会员</button></div>
            <div>头像</div>
        </div>

    </div>
    <style>
        .header {
            background-color: #ff9c6e;
            width: 100%;
            height: 60px;
            display: flex;
            align-items: center;
        }

        .left {
            display: flex;
            width: 50%;
            align-items: center;
            justify-content: space-evenly;
        }

        .right {
            margin-left: 10%;
            display: flex;
            width: 40%;
            align-items: center;
            justify-content: space-around;
        }
    </style>

image.png