侧边导航栏(抽屉式设计)界面 (html + css)

号外号外,我最近发现了一个非常棒的人工智能学习网站,它的内容通俗易懂,风趣幽默,让人印象深刻。我想和大家分享这个网站,点击链接即可访问。 

写在前面

哈喽~大家好,这篇呢带来的是侧边导航栏(抽屉式设计),采用 (html + css) 来实现的,编辑器是 WebStorm 。接下来来看看效果吧。

效果 

首先我们要导入阿里的图标样式文件(如何使用参考这篇大佬写的博客),将图标样式、字体样式导入到项目中,新建 css 样式文件。

导入

    <link rel="stylesheet" href="css/css1.css" type="text/css">
    <link rel="stylesheet" href="css/css2.css" type="text/css">

先设置全部的边距与常用的全局变量(配色问题的话可以参考这个配色网站,或者可以下载 .chm 文件,.chm 的文件链接我放在下面)


*{
    margin: 0;
    padding: 0;
/*    全局设置为0内外边距*/
}

:root{
    /*:root是指文档的根元素,在其中定义的变量可作为全局变量*/
    /*可以理解为 c语言 在main函数,定义的全局变量*/
    --color-menu-bg: #fff;
    --font-color-mi: #fdb095;
    --font-color-mi-hover: #7facd6;
    --color-bg-mi-hover: #e8b7d4;
    --border-radius-mi:2px;
    --transition-menu-time: 0.2s;
    --color-line-bg: #d3d3d3;
    --color-zidingyi:#210440;
}

 先写入 基本框架

	<div class="content">
        <div class="menu-box">
            <input type="checkbox" id="menu-btn">
            <label for="menu-btn"><i></i></label>
            <div class="menu">
            </div>
        </div>
    </div>

然后在 css 样式文件写入这些类标记

.content{
    background-color: #e7e7e7;
    min-height: 100vh;
}

.menu-box{
    font-family: 'Trebuchet MS', 'Lucida Sans Unicode', 'Lucida Sans', Arial, sans-serif;
    letter-spacing: 0.5px;
    /*设置字母之间的间距*/
    font-weight: 600;
    position: relative;
    width: fit-content;
    /* fit-content 作用: 根据内容自适应宽度 可以结合margin-auto 来实现居中*/
    min-height: 100vh;
    /*浏览器可见视口【高度】的百分比(1vh代表视窗【高度】的1%)*/
    padding: 6px 12px;
    box-sizing: border-box;
    /*border-box是指将边框border和内边距padding在现有元素的宽度和高度内设置*/
    /*background-color: var(--color-menu-bg);*/
    background-color: var(--color-zidingyi);
}

.menu-box>input#menu-btn:checked+label>i{
    transform: rotate(180deg);
}



/*
A+B{}这个+是选择相邻兄弟,称作“相邻兄弟选择器”,如果需要选择紧接在另一个元素后的元素,而且二者有相同的父元素,
可以使用相邻兄弟选择器,例如,如果要增加紧接在 h1 元素后出现的段落的上边距,可以这样写:
  h1 + p {margin-top:50px;}
  这个选择器读作:“选择紧接在 h1 元素后出现的段落,h1 和 p 元素拥有共同的父元素”。};
*/

.menu{
    font-size: 18px;
    width: 250px;
    min-height: 100%;
    cursor: pointer;
    overflow: hidden;
    transition: width var(--transition-menu-time);
    color: var(--font-color-mi);
}

然后这里有一个细节:我们在 input 的 type 为 checkbox 这里要重新定义,否则的话会这样

.menu-box input[type='checkbox'] {
    display: none;
    /*隐藏原生的多选框*/
}

然后将 html 的 label 改为:

<label for="menu-btn"><i class="iconfont icon-page_returns"></i></label>

 再则写入 “首页” 与 “列表1” 

                <div class="menu-title">
                    <h1>首页</h1>
                </div>

                <div class="menu-item">
                    <input type="checkbox" id="menu-item1">
                    <label for="menu-item1">
                        <i class="menu-item-icom iconfont icon-a-01-data_center"></i>
                        <span>列表1</span>
                        <i class="menu-item-last iconfont icon-down"></i>
                    </label>

                    <div class="menu-content">
                        <span>列表1.a</span>
                        <span>列表1.b</span>
                        <span>列表1.c</span>
                    </div>
                </div>

css 写入:

/*
    A~B 选择前面有A元素的每个 B 元素,即选择 A 之后出现的所有 B,两种元素必须拥有相同的父元素,但 B 不必紧随 A。
*/

.menu-box > input#menu-btn:checked ~ .menu{
    width: 0;
}

.menu-title{
    text-align: center;
    margin-bottom: 10px;
}

.menu-item>label{
    position: relative;
    display: flex;
    width: 100%;
    height: 50px;
    border-radius: var(--border-radius-mi);
    align-items: center;
}

.menu-item>label:hover{
    color: var(--font-color-mi-hover);
}

.menu-item>label>i:first-child{
    flex: none;
    margin-right: 6px;
    font-size: 24px;
}

.menu-item>label>span{
    flex: 1;
}

.menu-item>label>i:last-child{
    flex: none;
    font-size: 20px;
    font-weight: 900;
    transform: rotate(0deg);
    transition: transform var(--transition-menu-time);
}

.menu-item>input:checked+label>i:last-child{
    transform: rotate(180deg);
}

.menu-content{
    height: 0;
    overflow: hidden;
    /*清除浮动*/
    transition: height var(--transition-menu-time);
    display: flex;
    /*规定弹性项目会在需要时换行。*/
    flex-wrap: wrap;
    background-color: var(--color-zidingyi);
}

打开网页,这时实现了列表1,同样的道理,复制粘贴,然后修改文字

最后剩下了设置那一块了,写入 html 与 css ,原理都一样,这里不就一一显示了

点击运行,就 ok 了

.chm 链接

链接:https://pan.baidu.com/s/1rPz854DX_FQc3-ifZt_uEQ 
提取码:07js

源码见 链接

Bootstrap侧边导航栏可以使用Bootstrap提供的`nav`和`nav-pills`组件来实现。下面是一个简单的例子: ```html <div class="container-fluid"> <div class="row"> <nav class="col-md-2 d-none d-md-block bg-light sidebar"> <div class="sidebar-sticky"> <ul class="nav flex-column nav-pills"> <li class="nav-item"> <a class="nav-link active" href="#">菜单1</a> </li> <li class="nav-item"> <a class="nav-link" href="#">菜单2</a> </li> <li class="nav-item"> <a class="nav-link" href="#">菜单3</a> </li> </ul> </div> </nav> <main role="main" class="col-md-9 ml-sm-auto col-lg-10 pt-3 px-4"> <div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center"> <h1 class="h2">标题</h1> </div> <div class="table-responsive"> <table class="table table-striped table-sm"> <thead> <tr> <th>表头1</th> <th>表头2</th> <th>表头3</th> <th>表头4</th> <th>表头5</th> </tr> </thead> <tbody> <tr> <td>内容1</td> <td>内容2</td> <td>内容3</td> <td>内容4</td> <td>内容5</td> </tr> </tbody> </table> </div> </main> </div> </div> ``` 这里使用了Bootstrap提供的`nav-pills`组件,添加了三个导航菜单项,并设置了第一个菜单项为激活状态。在`nav`标签中,`flex-column`类将菜单项垂直排列,`nav-link`类设置了导航链接的样式。在`col-md-2`类中,`d-none d-md-block`类将侧边栏在小屏幕上隐藏,只在中等屏幕以上显示。 在`main`标签中,`col-md-9`类设置了主内容区域的宽度,`ml-sm-auto`类将内容区域左对齐,`pt-3 px-4`类添加了一些顶部和左右的内边距,`table-responsive`类使表格具有响应式布局。 你可以根据自己的需求进行调整和定制。
评论 35
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿追

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值