东拼西凑完成一个“前端框架”(3) - 侧边栏

写在前面

    <link href="lib/font-awesome/css/font-awesome.min.css" rel="stylesheet" />

iconfont自定义图标

    <link href="css/icon.css" rel="stylesheet" />

整体框架来到关键的部分,侧边栏菜单;

侧边栏

收起展开动画

说到动画我们可以通过 jQuerycss3来实现,关于css3jQuery 动画的实现方式就不详细说了,简单总结以下几点:

  1. css3 使用 GPU,jQuery 使用 CPU
  2. css3 比 jQuery 更流畅,更快,更效率
  3. jQuery 支持所有游览器
  4. css3(animation, transition) 不支持 ie6, 7, 8, 9
  5. css3 animation 更灵活

综上,还是推荐 css3 实现动画效果,实现动画效果可以通过 transitionanimation 属性,这里我试用 transition 属性来实现动画;
1. 定义transition属性

.ls-layout .ls-layout-slider {
    width: 200px;
    height: 100vh;
    border: none;
    background: #1f242a;
    box-shadow: 2px 0 6px rgba(0, 21, 41, .35);
    -webkit-transition: width 300ms ease;
    transition: width 300ms ease;
    opacity: 1;
    z-index: 9;
}

2. 侧边栏 收起 样式

.ls-layout .ls-layout-slider.contracted {
    width: 50px;
}

.ls-layout-slider.contracted .header span {
    height: 0px;
    overflow: hidden;
}

3. js 改变class属性

var page = page || {};
(function($) {
    $.extend(page, {
        slide: function(el) {
            var $el = $(".nav-left .operate-item.slider .ls-icon");
            var slider = $(".ls-layout-slider");
            if (slider.hasClass("contracted")) {
                slider.removeClass("contracted");
                $el.removeClass("ls-icon-shrink-right");
            } else {
                slider.addClass("contracted");
                $el.addClass("ls-icon-shrink-right");
            }
        }
    });
})(jQuery);

4. 看效果

菜单

菜单的实现比较简单,首先是一个树:
css

.slider-menu ul li a:hover {
    text-decoration: none;
}

.slider-menu li ul li a {
    padding: 6px 0px 6px 20px;
}

.slider-menu li ul li ul li a {
    padding: 6px 0px 6px 30px;
}

.slider-menu li ul li ul li ul li a {
    padding: 6px 0px 6px 40px;
}

.slider-menu ul li .node:hover {
    background: rgba(0, 0, 0, .2);
    color: #fff;
}

.selected {
    border-left: 3px solid #1d7ce3;
    background: rgba(0, 0, 0, .5);
}

.selected i,
.selected b,
.selected span {
    color: #fff;
}

.selected-hover {
    border-left: 3px solid #1d7ce3;
}

.slider-menu ul li .selected:hover {
    background: rgba(0, 0, 0, .2);
}

.slider-menu .expandable {
    position: absolute;
    right: 15px;
    line-height: 20px;
}

html

...
    <ul>
        <li class="node-container node-container-root">
            <a pid="1" class="node node-root" onclick="page.expand(this)">
                <i class="fa fa-cog fa-fw" aria-hidden="true"></i>
                <span>系统管理</span>
                <b class="expandable fa fa-angle-left" aria-hidden="true"></b>
            </a>
            <ul class="node-container-son">
                <li>
                    <a pid="2" class="node " onclick="javascript:void(0);">
                        <i class="fa fa-list fa-fw" aria-hidden="true"></i>
                        <span>菜单管理</span>
                    </a>
                </li>
                <li>
                    <a pid="7" class="node " onclick="javascript:void(0);">
                        <i class="fa fa-shield fa-fw" aria-hidden="true"></i>
                        <span>权限管理</span>
                    </a>
                </li>
                <li>
                    <a pid="12" class="node " onclick="javascript:void(0);">
                        <i class="fa fa-user fa-fw" aria-hidden="true"></i>
                        <span>用户管理</span>
                    </a>
                </li>
                <li>
                    <a pid="17" class="node " onclick="javascript:void(0);">
                        <i class="fa fa-file-text-o fa-fw" aria-hidden="true"></i>
                        <span>操作管理</span>
                    </a>
                </li>
                <li>
                    <a pid="22" class="node " onclick="javascript:void(0);">
                        <i class="fa fa-trophy fa-fw" aria-hidden="true"></i>
                        <span>角色管理</span>
                    </a>
                </li>

            </ul>
        </li>
        <li class="node-container node-container-root">
            <a pid="44" class="node node-root" onclick="page.expand(this)">
                <i class="fa fa-copy fa-fw" aria-hidden="true"></i>
                <span>日志</span>
                <b class="expandable fa fa-angle-left" aria-hidden="true"></b>
            </a>
            <ul class="node-container-son">
                <li>
                    <a pid="45" class="node " onclick="javascript:void(0);">
                        <i class="fa fa-list-alt fa-fw" aria-hidden="true"></i>
                        <span>日志管理</span>
                    </a>
                </li>
            </ul>
        </li>
    </ul>
...

收缩之后的样式:

.ls-layout-slider.contracted .node-root span {
    display: none;
}

.ls-layout-slider.contracted .node-root b {
    display: none;
}

.ls-layout-slider.contracted .slider-menu .node-root {
    padding: 6px 0;
    text-align: center;
}

.ls-layout-slider.contracted .slider-menu .node-container-root {
    position: relative;
}

.ls-layout-slider.contracted .slider-menu .node-container-son {
    display: none;
    width: 150px;
    position: absolute;
    background: #1f242a;
    padding: 10px;
    padding: 10px;
    border-radius: 4px;
    left: 51px;
    top: 0;
}

.ls-layout-slider.contracted .slider-menu .node-container-root:hover .node-container-son {
    display: block;
}

.ls-layout .ls-layout-slider.contracted input {
    width: 0;
}

.ls-layout .layui-tab-title.contracted .node-container .slider-menu li ul {
    background: rgba(0,0,0,0);
}

看效果:

基本完成,欢迎批评指正;

原文地址:https://www.cnblogs.com/xinwang/p/12026335.html

时间: 2024-08-15 04:21:19

东拼西凑完成一个“前端框架”(3) - 侧边栏的相关文章

东拼西凑完成一个“前端框架”(4) - Tabs页

目录 东拼西凑完成一个后台 "前端框架" (1) -?布局 ?东拼西凑完成一个后台 "前端框架" (2) - 字体图标 东拼西凑完成一个"前端框架"(3) - 侧边栏 写在前面 在完成了侧边栏后,后台的基础架子已经基本出来了:下面是来加入Tab页面,正在纠结于Tab页面是否用现成的轮子, 比如 LayUI 想一想还是撸起袖子直接干一个 Tabs 实现原理 Title 列表 头部标题部分,用于显示Tab页的标题和打开状态 Content 内容 用于

东拼西凑完成一个“前端框架”(5) - Tabs操作

目录 东拼西凑完成一个后台 "前端框架" (1) -?布局 东拼西凑完成一个后台 "前端框架" (2) - 字体图标 东拼西凑完成一个"前端框架"(3) - 侧边栏 东拼西凑完成一个"前端框架"(4) - Tabs页 写在前面 Tabs页面完成的基本操作完成,但是功能还不够完备: Tab页打开过多超出的如何处理? Tab页关闭所有.关闭其它操作 Tab页刷新操作 设计 这里参考LayUIAdmin的设计方式: Tab栏左右未知

东拼西凑完成一个“前端框架”(6) - 按钮

目录 东拼西凑完成一个后台 "前端框架" (1) -?布局 东拼西凑完成一个后台 "前端框架" (2) - 字体图标 东拼西凑完成一个"前端框架"(3) - 侧边栏 东拼西凑完成一个"前端框架"(4) - Tabs页 东拼西凑完成一个"前端框架"(5) - Tabs操作 东拼西凑完成一个"前端框架"(6) - 按钮 写在前面 完成了整体框架的工作,下面开始写一些组件:从按钮开始,设计的思

东拼西凑完成一个“前端框架”(1) - 布局

前言 在如今"大前端"时代,各种前端框架层出不穷,诸如: ant-Design ant-Design Pro Element iView LayUI 等许多非常优秀的前端框架:本着程序员折腾的精神,于是计划自己去写一套后台的"前端框架",之所以这个前端框架要用"",是因为它只是把许多常用的组件经过改造拼接到一起,类似于 AdminLTE; Start 起个名字 - lsadmin 基于 jQuery 布局 布局参照目前许多流行的后台框架,类似于a

东拼西凑完成一个“前端框架”(2) - 字体图标

前言 还记得以前开发的项目目录下都会存放一大堆图标文件,难以维护,同时图标和字体的对齐也是一个麻烦事儿: 下面简单列出字体图标的优劣势,内容摘自图标字体的优缺点和使用 优势 轻量级:一个图标字体要比一系列的图像要小.一旦字体加载了,图标就会马上渲染出来,不需要下载一个个图像.这样可以减少HTTP的请求数量,而且和HTML5的离线存储配合,可以对性能做出优化. 灵活性:不调字体可以像页面中的文字一样,通过font-size属性来对其进行大小的设置,而且还可以添加各种文字效果,如color.hove

前端框架技术交流群

近来想研究前端框架,所以建立一个前端框架的爱好群,欢迎各位大牛进入,378388745

一个很实用的前端框架Zui

杰哥给我推荐了一个很有用的前端框架-Zui,我看着觉得很神奇的,因为有很多我都不懂.在这里分享总结一下.首先,这是一个中国自己开发的框架,比起很多外国的框架来说,有很详细的API,而且是全中文的,不需要再经过其他人的翻译了.然后,它的内容十分丰富,很系统的分为了:基础,控件,组件,JS插件,视图几大块:而且使用起来,只需要导入js,在适当的地方加上正确的class类就可以了.对于,没有什么js基础的人,也是十分容易上手的.下面我就大体的介绍一下它的各个模块的功能.基础:基础里面我觉得很有用的主要

发现 一个业务管理系统 解决了 orm 和 前端框架 剩下的 是 业务逻辑 了 。 哈

解决了 orm 和 前端框架 剩下的 是 业务逻辑 了 . 哈 还有 各种 aop 组件 呢 . 大家 high 来 准备 用 fluent data  和 mysql 写一个 wcf 的 接口呢. wcf 比 webservice 后出来吧 然后 在 用 web api 写一个 接口呢..

前端框架对页面的损害+如何判断一个dom是否存在某个属性

目录 进入主题 我的经历 特此记下造福后人 如何判断一个dom是否存在某个属性 进入主题 今天遇到一个问题就是引发了我对各种前端框架的思考. 首先我个人认为前端js+css框架,多数其实原理是这样的: 写页面的时候使用框架提供的css类. 然后框架通过这些预定义样式提供美观的界面. 涉及到功能的则是通过jquery的选择器根据class选择到dom元素,然后对dom元素进行操作. 完毕 如上所述,框架会对页面dom元素进行简单的修改. 我的经历 今天我使用框架,使用了框架的dialog,我的di