综合运用 vw + Flex + Less 实现B站移动端页面

综合运用 vw + Flex + Less 实现B站移动端页面

目前市面上有两种适配方案比较流行,一是rem,二是vw(未来趋势)。vw的核心概念是将屏幕平分为100份,若屏幕宽度750px,1vw则等于7.5px。VS Code提供了vw相关的插件,意味着不用手动去计算。

下面这个案例的宽高值,全部用vw单位。原插件的setting.json默认数值为750,我这里改成了375,以方便适应B站页面的制作。

在这里插入图片描述

最终效果如图所示:

在这里插入代码片在这里插入图片描述

主要分为四个部分,header、nav、content、openapp,当然,也可以分为三个部分,将nav放到header里面。

header部分分为两块,两个div,左边B站的logo,右边三个图标。使用flex布局,justify-content:space-between;align-items: center;使这两块内容两端对齐。然后将右边三个图标的父元素div,也设置flex,里面的每个图标各为flex:1,空间平分。

nav导航栏部分依旧使用flex布局,右边的小箭头使用固定宽高,左边内容则flex:1接管剩余空间。li内容使用float右浮动,ul宽度这里设置的是800px(主要为了显示长度)。

content主体部分,每一块内容的点击都会跳到另一个页面,因此使用a标签包住全部内容。为了避免白色字体在某些情况下看不清楚,增加了一个遮罩层(灰色渐变色),能突显白色。这一块内容需要注意的是,字体和图标尽可能放到一个div里,通过定位div,将它们俩整体移动,然后使用flex两端对齐。

最后是openapp部分,悬浮定位在页面的底端。用到fixed定位,left:50%,bottom自定义,transform:translateX(-50%),实现绝对居中,然后text-align和设置行高line-height将文本居中对齐,定义好剩余的样式,本页面完成。

具体代码如下:

// 所有vw值由"px2rem"插件自动转换,插件数值设置为375

*{
    padding: 0;
    margin: 0;
}
a{
    text-decoration: none;
}
.layout{
    // 头部
    .header{
        display:flex;
        // 用flex布局让两端对齐
        justify-content:space-between;
        // 侧轴中心对齐
        align-items: center;
        width: 100%;
        height: 11.7333vw;
        padding:1.3333vw 2.6667vw;
        box-sizing: border-box;
        .logo{
            >span{
                color: #fb7299;
                font-size:7.46666667vw;
            }
        }
        .header_right{
            display:flex;
            width: 42.6667vw;
            // flex布局让内容两端对齐
            justify-content:space-around;
            align-items: center;
            >a{
                // 剩余空间平分
                flex:1;
            }
            >a:nth-of-type(1){
                >span{
                    font-size: 5.8667vw;
                    color:#ccc;
                }
            }
            >a:nth-of-type(2){
                >img:nth-child(1){
                    width: 6.4vw;
                }
            }
            >a:nth-of-type(3){
                >img:nth-child(1){
                    width: 19.7333vw;
                    height: 6.4vw;
                }
            }
        }
    }
    // 导航栏部分
    .nav{
        height: 10.6667vw;
        display:flex;
        justify-content:space-between;
        margin-bottom: 0.8vw;
        .items{
            overflow:scroll;
            line-height: 10.6667vw;
            flex:1;
            >ul{
                list-style-type: none;
                >li{
                    // 此处不用flex,用float右浮动
                    float: left;
                    padding:0 2.6667vw;
                }
                // 设置导航栏的“首页”为粉色
                >li:nth-child(1){
                    color:rgb(255, 98, 125);
                }
            }
        }
        .items_right{
            width: 10.6667vw;
            height: 10.6667vw;
            text-align:center;
            // 行高与元素高度一致,实现内容垂直居中
            line-height: 10.6667vw;
        }
    }
    .content{
        width: 100%;
        >a{
            float: left;
            &.item{
                width:50vw;
                padding-bottom: 2.6667vw;
                .top{
                    position: relative;
                    padding:0 1.33vw;

                    >img{
                        width: 100%;
                    }
                    // 创建遮罩层,让图片中的白色字体能看得清楚些
                    .mark{
                        background-image: linear-gradient(rgb(255, 255, 255,0.1),rgba(216, 216, 216, 0.3));
                        position: absolute;
                        top:0;
                        left:0;
                        opacity: 0.2;
                    }
                    >div{
                        width: 100%;
                        display:flex;
                        justify-content:space-between;
                        // 将div整体定位,然后flex将div里的内容左右两端对齐
                        position: absolute;
                        bottom: 1.3333vw;
                        >span{
                            color:#fff;
                            font-size: 3.2vw;
                            padding:0vw 3.6vw;
                            
                        }
                    }
                }
                >p{
                    color:#000;
                    font-size: 3.2vw;
                    margin-top: 1vw;
                    padding:0vw 1.8vw;
            
                }
            }
        }
    }
    .openapp{
        background-color: rgb(255, 155, 172);
        position: fixed;
        bottom: 10.6667vw;
        left:50%;
        transform: translateX(-50%);
        width: 93.6vw;
        height: 9.8667vw;
        line-height: 9.8667vw;
        text-align: center;
        border-radius: 4.5333vw;
        color: #fff;
        font-size: 4.5333vw;
        >span:first-child{
            margin-right: 5.3333vw;
            width: 9.3333vw;
            font-size: 5vw;
        }
    }
}

此为Less代码,浏览器暂不支持,需转换为css方能正常读取。

<!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>Document</title>
    <link rel="stylesheet" href="./css/b.css">
    <!-- 引入图标链接 -->
    <link rel="stylesheet" href="./fonts/iconfont.css">
</head>

<body>
    <div class="layout">
        <!-- B站头部 -->
        <div class="header">
            <div class="logo">
                <span class="iconfont Navbar_logo"></span>
            </div>
            <div class="header_right">
                <a href="#"><span class="iconfont ic_search_tab"></span></a>
                <a href="#"><img src="./images/login.png" alt=""></a>
                <a href="#"><img src="./images/download.png" alt=""></a>
            </div>
        </div>
        <!-- 导航栏 -->
        <div class="nav">
            <div class="items">
                <ul>
                    <li>首页</li>
                    <li>动画</li>
                    <li>番剧</li>
                    <li>国创</li>
                    <li>音乐</li>
                    <li>舞蹈</li>
                    <li>游戏</li>
                    <li>知识</li>
                </ul>
            </div>
            <!-- 导航栏右边的向下箭头图标 -->
            <div class="items_right">
                <span class="iconfont general_pulldown_s"></span>
            </div>
        </div>
        <!-- 主体内容 -->
        <div class="content">
            <a href="#" class="item">
                <div class="top">
                    <img src="./images/1.jpg" alt="">
                    <!-- 设置遮罩层 -->
                    <div class="mark"></div>
                    <div>
                        <!-- 将两个span放到一个div,方便整体定位和flex控制 -->
                        <span><i class="iconfont icon_shipin_bofangshu"></i> 108.9万</span>
                        <span><i class="iconfont icon_shipin_danmushu"></i> 702</span>
                    </div>
                </div>
                <p>养了一群《吞金兽》</p>
            </a>
            <a href="#" class="item">
                <div class="top">
                    <img src="./images/4.jpg" alt="">
                    <div class="mark"></div>
                    <div>
                        <span><i class="iconfont icon_shipin_bofangshu"></i> 145.7万</span>
                        <span><i class="iconfont icon_shipin_danmushu"></i> 521</span>
                    </div>
                </div>
                <p>《明日方舟》SideStory[武道仙路]</p>
            </a>
            <a href="#" class="item">
                <div class="top">
                    <img src="./images/3.jpg" alt="">
                    <div class="mark"></div>
                    <div>
                        <span><i class="iconfont icon_shipin_bofangshu"></i> 122.4万</span>
                        <span><i class="iconfont icon_shipin_danmushu"></i> 707</span>
                    </div>
                </div>
                <p>粉丝家蹭饭 厨子蹭饭¥0</p>
            </a>
            <a href="#" class="item">
                <div class="top">
                    <img src="./images/2.jpg" alt="">
                    <div class="mark"></div>
                    <div>
                        <span><i class="iconfont icon_shipin_bofangshu"></i> 66.9万</span>
                        <span><i class="iconfont icon_shipin_danmushu"></i> 427</span>
                    </div>
                </div>
                <p>2022还有10元西餐店?</p>
            </a>
            <a href="#" class="item">
                <div class="top">
                    <img src="./images/1.jpg" alt="">
                    <div class="mark"></div>
                    <div>
                        <span><i class="iconfont icon_shipin_bofangshu"></i> 108.9万</span>
                        <span><i class="iconfont icon_shipin_danmushu"></i> 702</span>
                    </div>
                </div>
                <p>养了一群《吞金兽》</p>
            </a>
            <a href="#" class="item">
                <div class="top">
                    <img src="./images/4.jpg" alt="">
                    <div class="mark"></div>
                    <div>
                        <span><i class="iconfont icon_shipin_bofangshu"></i> 145.7万</span>
                        <span><i class="iconfont icon_shipin_danmushu"></i> 521</span>
                    </div>
                </div>
                <p>《明日方舟》SideStory[武道仙路]</p>
            </a>
            <a href="#" class="item">
                <div class="top">
                    <img src="./images/3.jpg" alt="">
                    <div class="mark"></div>
                    <div>
                        <span><i class="iconfont icon_shipin_bofangshu"></i> 122.4万</span>
                        <span><i class="iconfont icon_shipin_danmushu"></i> 707</span>
                    </div>
                </div>
                <p>粉丝家蹭饭 厨子蹭饭¥0</p>
            </a>
            <a href="#" class="item">
                <div class="top">
                    <img src="./images/2.jpg" alt="">
                    <div class="mark"></div>
                    <div>
                        <span><i class="iconfont icon_shipin_bofangshu"></i> 66.9万</span>
                        <span><i class="iconfont icon_shipin_danmushu"></i> 427</span>
                    </div>
                </div>
                <p>2022还有10元西餐店?</p>
            </a>
        </div>
        <div class="openapp">
            <span class="iconfont Navbar_logo"></span>
            <span>打开APP,看你感兴趣的视频</span>
        </div>
    </div>

    <script>
        // 使导航栏宽度大于父元素,实现滑动效果
        document.querySelector(".items>ul").style.width = "800px";
    </script>
</body>

</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值