前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【CSS动效实战(纯CSS与JS动效)】02 flex 布局实战(仿 JD 及 gitCode 布局)及 media 自适应初探 下

【CSS动效实战(纯CSS与JS动效)】02 flex 布局实战(仿 JD 及 gitCode 布局)及 media 自适应初探 下

作者头像
1_bit
发布2022-09-30 15:32:53
3940
发布2022-09-30 15:32:53
举报
文章被收录于专栏:我的知识小屋

二、flex 仿 gitCode 布局 及 自适应

首先查看我们的页面:

这个时候直接顶部一个块,下面分为左中右三个块,然后就解决了,是不是很简单?相比刚刚那么这个简单多了。那就来做吧。

2.1 基本布局

首先给一个 style 价格 flex,一样的开头:

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>gitcode flex demo</title>
    <style>
        .flex{
            display: flex;
        }
    </style>
</head>
<body>
    
</body>
</html>

接着 给予 body flex 样式,并且由于当前 flex 是竖着的,那么给予一个 cloumn 样式确定方向还有对应的背景色、边距等,这些都不存在什么疑问吧?学过上一小节的都看得懂吧,代码如下:

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>gitcode flex demo</title>
    <style>
        * {
            margin: 0;
        }
        
        body {
            height: 100vh;
        }
        div {
            background-color: white;
            margin: 4px
        }
        .flex{
            display: flex;
        }
        .column{
            flex-direction: column;
        }
        .bgcolor {
            background-color: rgb(230, 230, 230);
        }
    </style>
</head>
<body class="flex column bgcolor">
    
</body>
</html>

那么接下来咱们就在 body 里面新建两个 div:

代码语言:javascript
复制
<body class="flex column bgcolor">
    <!--头-->
    <div style="height: 60px;"></div>
    <!--内容-->
    <div style="flex:1"></div>
</body>

此时页面效果如下:

一点问题没有,那么接下来在内容的div 里新建 3 个 div 分别是左中右:

代码语言:javascript
复制
<body class="flex column bgcolor">
    <!--头-->
    <div style="height: 60px;"></div>
    <!--内容-->
    <div style="flex:1">
        <!--左-->
        <div></div>
        <!--中-->
        <div></div>
        <!--右-->
        <div></div>
    </div>
</body>

一看这 3 个 div 不用占满行,那么肯定,给予这个 内容 div 一个 flex ,并且给予内部元素不大于 1 的比例即可,还有一定要给予灰色背景,不然全白了看不见:

代码语言:javascript
复制
<!--内容-->
<div class="flex bgcolor" style="flex:1">
    <!--左-->
    <div style="flex:0.2"></div>
    <!--中-->
    <div style="flex:0.4"></div>
    <!--右-->
    <div style="flex:0.2"></div>
</div>

那么既然不占满行,那么肯定需要对应的居中,给予居中样式:

代码语言:javascript
复制
<style>
.center {
    justify-content: center;
}
</style>

调用后页面如下:

2.2 左侧元素内部排列

接着左侧一看就是竖着的:

那么给予一个样式 column 以及 flex:

代码语言:javascript
复制
<!--左-->
<div style="flex:0.2" class="column"></div>

接着往内部添加 3 个 div 以及对应高度,若想看见这 3 个 div,你还需要给予这个 左 的 div 背景色:

代码语言:javascript
复制
<!--左-->
<div style="flex:0.2" class="column flex bgcolor">
    <div style="height: 150px;"></div>
    <div style="height: 150px;"></div>
    <div style="height: 150px;"></div>
</div>

效果如下:

2.3 右侧元素内部排列

右侧也一样,直接给予多个 div 并且设置对应的 flex 样式即可:

代码语言:javascript
复制
<!--右-->
<div style="flex:0.2" class="column flex bgcolor">
    <div style="height: 150px;"></div>
    <div style="height: 150px;"></div>
    <div style="height: 150px;"></div>
    <div style="height: 150px;"></div>
</div>

效果如下:

那么中间有点特殊,因为内容很多,那么这个时候我们填充内容会使顶部的内容发生挤压,那么需要一个 flex-shrink: 0; 使其内容不压缩,我们直接给予 头部 这个属性即可:

代码语言:javascript
复制
<!--头-->
<div style="height: 60px;flex-shrink: 0;"></div>

接着给予中部巨多 div 内容,并且设置对应的高度:

代码语言:javascript
复制
<!--中-->
<div style="flex:0.4" class="column flex bgcolor">
    <div style="height: 150px;"></div>
    <div style="height: 150px;"></div>
    <div style="height: 150px;"></div>
    <div style="height: 150px;"></div>
    <div style="height: 150px;"></div>
    <div style="height: 150px;"></div>
    <div style="height: 150px;"></div>
    <div style="height: 150px;"></div>
    <div style="height: 150px;"></div>
    <div style="height: 150px;"></div>
    <div style="height: 150px;"></div>
    <div style="height: 150px;"></div>
    <div style="height: 150px;"></div>
    <div style="height: 150px;"></div>
    <div style="height: 150px;"></div>
    <div style="height: 150px;"></div>
</div>

div过多超出页面后我们可以滚动查看底部 div:

但是在原本的 gitcode 页面中顶部是一直都存在的,不会拖动内容后顶部栏就消失,那么怎么做呢?

我们直接给予内容的 div 一个 属性 overflow 即可:

代码语言:javascript
复制
<!--内容-->
<div class="flex bgcolor center" style="flex:1;overflow: auto;">

overflow auto 会给予超出内容一个滚动条,此时滑动再多,当前页面的头部也将会一直显示:

此部分完整代码如下:

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>gitcode flex demo</title>
    <style>
        * {
            margin: 0;
        }
        
        body {
            height: 100vh;
        }
        
        div {
            background-color: white;
            margin: 4px
        }
        
        .flex {
            display: flex;
        }
        
        .column {
            flex-direction: column;
        }
        
        .bgcolor {
            background-color: rgb(230, 230, 230);
        }
        
        .center {
            justify-content: center;
        }
    </style>
</head>

<body class="flex column bgcolor">
    <!--头-->
    <div style="height: 60px;flex-shrink: 0;"></div>
    <!--内容-->
    <div class="flex bgcolor center" style="flex:1;overflow: auto;">
        <!--左-->
        <div style="flex:0.2" class="column flex bgcolor">
            <div style="height: 150px;"></div>
            <div style="height: 150px;"></div>
            <div style="height: 150px;"></div>
        </div>
        <!--中-->
        <div style="flex:0.4;" class="column flex bgcolor">
            <div style="height: 150px;flex-shrink: 0;"></div>
            <div style="height: 150px;flex-shrink: 0;"></div>
            <div style="height: 150px;flex-shrink: 0;"></div>
            <div style="height: 150px;flex-shrink: 0;"></div>
            <div style="height: 150px;flex-shrink: 0;"></div>
            <div style="height: 150px;flex-shrink: 0;"></div>
            <div style="height: 150px;flex-shrink: 0;"></div>
            <div style="height: 150px;flex-shrink: 0;"></div>
            <div style="height: 150px;flex-shrink: 0;"></div>
            <div style="height: 150px;flex-shrink: 0;"></div>
            <div style="height: 150px;flex-shrink: 0;"></div>
            <div style="height: 150px;flex-shrink: 0;"></div>
            <div style="height: 150px;flex-shrink: 0;"></div>
            <div style="height: 150px;flex-shrink: 0;"></div>
            <div style="height: 150px;flex-shrink: 0;"></div>
            <div style="height: 150px;flex-shrink: 0;"></div>
        </div>
        <!--右-->
        <div style="flex:0.2" class="column flex bgcolor">
            <div style="height: 150px;"></div>
            <div style="height: 150px;"></div>
            <div style="height: 150px;"></div>
            <div style="height: 150px;"></div>
        </div>
    </div>
</body>

</html>

2.4 自适应

有时候内容不复杂时,咱们使用自适应将会很方便,当设备是手机访问时,屏幕大小将会改变,原有 PC 页面显示有问题,那么只需要使用 media 即可解决,此时我们先创建一个 空的类样式:.

代码语言:javascript
复制
<style>
.content{

}
</style>

接着,给这个 content 样式给予到内容样式之中:

代码语言:javascript
复制
<!--内容-->
<div class="content flex bgcolor center" style="flex:1;overflow: auto;">

随后使用 media:

代码语言:javascript
复制
<style>
@media ( max-width:600px) {
    .content {
        flex-direction: column;
    }
}
</style>

media 表示当 max-width:600px 当前屏幕最大宽度为 600px 时,那么就是移动端设备,直接给予 content 属性为 flex-direction: column;,那么内容就会垂直显示,那么就不会并排,那么就很好的适配了手机:

大家可以拿代码去试试,自己拖动自己的屏幕可以看得到这个效果,完整代码如下:

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>gitcode flex demo</title>
    <style>
        * {
            margin: 0;
        }
        
        body {
            height: 100vh;
        }
        
        div {
            background-color: white;
            margin: 4px
        }
        
        .flex {
            display: flex;
        }
        
        .column {
            flex-direction: column;
        }
        
        .bgcolor {
            background-color: rgb(230, 230, 230);
        }
        
        .center {
            justify-content: center;
        }
        
        .content {}
        
        @media ( max-width:600px) {
            .content {
                flex-direction: column;
            }
        }
    </style>
</head>

<body class="flex column bgcolor">
    <!--头-->
    <div style="height: 60px;flex-shrink: 0;"></div>
    <!--内容-->
    <div class="content flex bgcolor center" style="flex:1;overflow: auto;">
        <!--左-->
        <div style="flex:0.2" class="column flex bgcolor">
            <div style="height: 150px;"></div>
            <div style="height: 150px;"></div>
            <div style="height: 150px;"></div>
        </div>
        <!--中-->
        <div style="flex:0.4;" class="column flex bgcolor">
            <div style="height: 150px;flex-shrink: 0;"></div>
            <div style="height: 150px;flex-shrink: 0;"></div>
            <div style="height: 150px;flex-shrink: 0;"></div>
            <div style="height: 150px;flex-shrink: 0;"></div>
            <div style="height: 150px;flex-shrink: 0;"></div>
            <div style="height: 150px;flex-shrink: 0;"></div>
            <div style="height: 150px;flex-shrink: 0;"></div>
            <div style="height: 150px;flex-shrink: 0;"></div>
            <div style="height: 150px;flex-shrink: 0;"></div>
            <div style="height: 150px;flex-shrink: 0;"></div>
            <div style="height: 150px;flex-shrink: 0;"></div>
            <div style="height: 150px;flex-shrink: 0;"></div>
            <div style="height: 150px;flex-shrink: 0;"></div>
            <div style="height: 150px;flex-shrink: 0;"></div>
            <div style="height: 150px;flex-shrink: 0;"></div>
            <div style="height: 150px;flex-shrink: 0;"></div>
        </div>
        <!--右-->
        <div style="flex:0.2" class="column flex bgcolor">
            <div style="height: 150px;"></div>
            <div style="height: 150px;"></div>
            <div style="height: 150px;"></div>
            <div style="height: 150px;"></div>
        </div>
    </div>
</body>

</html>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-09-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 二、flex 仿 gitCode 布局 及 自适应
    • 2.1 基本布局
      • 2.2 左侧元素内部排列
        • 2.3 右侧元素内部排列
          • 2.4 自适应
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档