当前位置: 首页 > article >正文

vue3:十一、主页面布局(修改左侧导航条的样式)

一、样式

1、初始样式

2、 左侧导航栏搭建完成样式

二、实现

1、设置左侧导航栏底色

(1)去掉顶部和左侧导航栏的底色

初始页面效果

顶部与左侧底色样式

将代码中与顶部与左侧的样式删掉

移除后页面效果

加入设定背景色

#f4f6f9

加入底色后颜色展示

 

(2)去除菜单项底色

初始页面效果

根据开发者工具找到菜单项的底色

修改底色

在全局css中将找的.el-menu的背景色的变量var(--el-menu-bg-color); 设置为指定色:#f4f6f9

展示效果

(3)选中菜单项底色

初始页面效果

目前选中项只有一个文字颜色改变,现在需要给一个背景色以及文字色

根据开发者工具找到对应选中效果

修改选中状态的效果

在页面中增加选中的背景色和文字颜色

 使用的变量

存在问题:选择子项时,该项也会有选中效果

问题解决

选中效果是对于el-menu-item的效果,所以.is-active与其是同级

只需将is-active写入el-menu-item中即可(&表示同级) 

效果

 

(4)悬停菜单底色

 初始页面效果

根据开发者工具找到对应选中项

修改悬停效果

由开发者工具,可以知道设置悬停效果的是个变量,所以直接在全局中修改此变量值即可

(5)调整菜单栏高度

初始页面效果

根据开发者工具找到对应选中效果

修改菜单块高度

在全局css中修改高度为45px

效果

三、完整代码

1、base.css

/* color palette from <https://github.com/vuejs/theme> */
:root {--vt-c-white: #ffffff;--vt-c-white-soft: #f8f8f8;--vt-c-white-mute: #f2f2f2;--vt-c-black: #181818;--vt-c-black-soft: #222222;--vt-c-black-mute: #282828;--vt-c-indigo: #2c3e50;--vt-c-divider-light-1: rgba(60, 60, 60, 0.29);--vt-c-divider-light-2: rgba(60, 60, 60, 0.12);--vt-c-divider-dark-1: rgba(84, 84, 84, 0.65);--vt-c-divider-dark-2: rgba(84, 84, 84, 0.48);--vt-c-text-light-1: var(--vt-c-indigo);--vt-c-text-light-2: rgba(60, 60, 60, 0.66);--vt-c-text-dark-1: var(--vt-c-white);--vt-c-text-dark-2: rgba(235, 235, 235, 0.64);--el-color-primary: #646cff;--el-button-hover-bg-color: #868bf7;--el-color-primary-light-3: #868bf7;--el-color-primary-light-5:#b4b7ef;--el-color-primary-light-9:#e5e6f7;--el-color-primary-light-7:#c6c8fa;--el-color-primary-light-8:#d9e3ff;--el-menu-bg-color:#f4f6f9;--el-menu-active-color:rgb(131, 162, 255);--el-menu-hover-bg-color:#d1e0ff;--el-menu-item-height:45px;
}/* semantic color variables for this project */
:root {--color-background: var(--vt-c-white);--color-background-soft: var(--vt-c-white-soft);--color-background-mute: var(--vt-c-white-mute);--color-border: var(--vt-c-divider-light-2);--color-border-hover: var(--vt-c-divider-light-1);--color-heading: var(--vt-c-text-light-1);--color-text: var(--vt-c-text-light-1);--section-gap: 160px;
}/* 
@media (prefers-color-scheme: dark) {:root {--color-background: var(--vt-c-black);--color-background-soft: var(--vt-c-black-soft);--color-background-mute: var(--vt-c-black-mute);--color-border: var(--vt-c-divider-dark-2);--color-border-hover: var(--vt-c-divider-dark-1);--color-heading: var(--vt-c-text-dark-1);--color-text: var(--vt-c-text-dark-2);}
} *//* *,
*::before,
*::after {box-sizing: border-box;margin: 0;font-weight: normal;
} */body {min-height: 100vh;color: var(--color-text);background: var(--color-background);transition:color 0.5s,background-color 0.5s;line-height: 1.6;font-family:Inter,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Fira Sans','Droid Sans','Helvetica Neue',sans-serif;font-size: 15px;text-rendering: optimizeLegibility;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;margin: 0;
}

2、src/layout/index.vue

<template><el-container class="layout-container-demo" style="height: 100vh"><el-aside :class="{ 'is-short': iscollapse }" class="sidebar"><div class="logo flex flex-center"><img src="@/assets/logo.png" alt=""><transition name="el-zoom-in-top"><span v-if="!iscollapse" class="logo_title">CMS管理系统</span></transition></div><el-scrollbar class="scrollbar-height"><!-- default-openeds:默认展开菜单 --><!-- default-active:默认选中菜单 --><!-- collapse:是否折叠菜单 --><el-menu :default-active="activeMenu" :router="true" :collapse='iscollapse'><!-- 遍历一级菜单 --><template v-for="(item, index) in menu" :key="index"><!-- 如果一级菜单有子菜单,渲染 el-sub-menu --><el-sub-menu v-if="item.children && item.children.length > 0" :index="`${index + 1}`"><template #title><el-icon v-if="item.icon"><component :is="item.icon" /></el-icon><span>{{ item.name }}</span></template><!-- 遍历二级菜单 --><el-menu-item v-for="(secondmenu, secondindex) in item.children" :key="secondindex":index="secondmenu.path"><span>{{ secondmenu.name }}</span></el-menu-item></el-sub-menu><!-- 如果一级菜单没有子菜单,渲染 el-menu-item --><el-menu-item v-else :index="item.path"><el-icon v-if="item.icon"><component :is="item.icon" /></el-icon><span>{{ item.name }}</span></el-menu-item></template></el-menu></el-scrollbar></el-aside><el-container><el-header style="font-size: 12px"><span @click="toggleSideBar">展开/收缩</span><div class="toolbar"><el-dropdown><el-icon style="margin-right: 8px; margin-top: 1px"><setting /></el-icon><template #dropdown><el-dropdown-menu><el-dropdown-item>View</el-dropdown-item><el-dropdown-item>Add</el-dropdown-item><el-dropdown-item>Delete</el-dropdown-item></el-dropdown-menu></template></el-dropdown><span>Tom</span></div></el-header><!-- 右侧内容 --><el-main><el-scrollbar><RouterView /></el-scrollbar></el-main><!-- 底部信息 --><el-footer class="flex flex-center"><span>@2025-2030 wen</span></el-footer></el-container></el-container>
</template><script setup>
import { ref, reactive } from 'vue'
import { useRoute } from 'vue-router'//获取当前页面路径
const route = useRoute();
const currentPath = route.path;
const activeMenu = ref(currentPath);//左侧菜单展开与收缩
const iscollapse = ref(true);//默认不收缩
//点击按钮实现收缩还是展开
const toggleSideBar = () => {iscollapse.value = !iscollapse.value;
}
// 菜单
const menu = reactive([{name: 'Navigator One',icon: "message",path: '/home',},{name: 'Navigator Two',icon: "message",children: [{name: 'Option 1',path: '/about',},{name: 'Option 2',},{name: 'Option 3',},{name: 'Option 4',},]},
]);</script><style scoped lang="scss">
/* logo */
.logo {height: 60px;font-weight: bold;color: var(--el-color-primary);white-space: nowrap;img {width: 30px;height: 30px;}.logo_title {margin-left: 10px;}
}/* 左侧菜单宽度设置 */
.sidebar {width: 200px;transition: width .5s;overflow: hidden;background-color: #f4f6f9;.el-menu-item {&.is-active {background-color: var(--el-menu-active-color);color: var(--vt-c-white);}}}.is-short {width: 60px;span {margin-right: 0px;opacity: 0;transition: all .5s;}
}.scrollbar-height {height: calc(100vh - 60px);
}.layout-container-demo .el-menu {border-right: none;
}.layout-container-demo .el-main {padding: 0;
}.layout-container-demo .toolbar {display: inline-flex;align-items: center;justify-content: center;height: 100%;right: 20px;
}
</style>

相关文章:

vue3:十一、主页面布局(修改左侧导航条的样式)

一、样式 1、初始样式 2、 左侧导航栏搭建完成样式 二、实现 1、设置左侧导航栏底色 (1)去掉顶部和左侧导航栏的底色 初始页面效果 顶部与左侧底色样式 将代码中与顶部与左侧的样式删掉 移除后页面效果 加入设定背景色 #f4f6f9 加入底色后颜色展示 (2)去除菜单项底色 初…...

开发网页程序时预览时遇到跨域问题解决方法

CocosCreator 开发h5游戏要用接口、开发html程序网页程序在chrome中预览时都会遇到跨域问题,怎么办? 网上有很多方法,主要是通过服务器端去配置,但那个相对来说消弱安全问题,这个不建议,因为是开发,个人行业,我们知道问题所以,简单点就主要是通过chrome的参数来禁用: 关闭 Ch…...

Sentinel源码—7.参数限流和注解的实现二

大纲 1.参数限流的原理和源码 2.SentinelResource注解的使用和实现 2.SentinelResource注解的使用和实现 (1)SentinelResource注解的使用 (2)SentinelResource注解和实现 (1)SentinelResource注解的使用 一.引入Sentinel Spring Boot Starter依赖 <dependency><…...

操作系统原理简要介绍

文章目录 计算机启动的底层流程&#xff08;从裸机到操作系统&#xff09;内核用户态与内核态内核分类 进程与线程&#xff1a;操作系统的 “执行者”内存管理&#xff1a;数据的“存储与调度”文件系统&#xff1a;数据的“组织与持久化”设备驱动&#xff1a;硬件的“翻译官”…...

QML ShaderEffect(着色器效果)组件

ShaderEffect 是 QML 中用于实现自定义着色器效果的组件&#xff0c;允许开发者使用 GLSL 着色器语言创建图形效果。 核心属性 基本属性 属性类型默认值说明fragmentShaderstring""片段着色器代码vertexShaderstring""顶点着色器代码blendingbooltrue是…...

2.6 递归

递归 特性&#xff1a; >.一递一归 >.终止条件 一般为&#xff1a;0 1 -1 #测试函数的返回值为函数 def test_recursion():return test_recursion() print(test_recursion()) RecursionError: maximum recursion depth exceeded #案例&#xff1a;计算 …...

麒麟系统网络连接问题排查

麒麟系统网络连接有红色叹号,不能上外网 了。 首先执行 ping -c4 8.8.8.8 和 nc -zv 8.8.8.8 53,如果 都能正常通信,说明你的网络可以访问公共 DNS 服务器(如 Google DNS 8.8.8.8),但域名解析仍然失败,可能是 DNS 解析配置问题 或 系统 DNS 缓存/代理干扰。以下是进一步…...

opencv(双线性插值原理)

双线性插值是一种图像缩放、旋转或平移时进行像素值估计的插值方法。当需要对图像进行变换时&#xff0c;特别是尺寸变化时&#xff0c;原始图像的某些像素坐标可能不再是新图像中的整数位置&#xff0c;这时就需要使用插值算法来确定这些非整数坐标的像素值。 双线性插值的工…...

从信号处理角度理解图像处理的滤波函数

目录 1、预备知识 1.1 什么是LTI系统? 1.1.1 首先来看什么是线性系统,前提我们要了解什么是齐次性和叠加性。...

echarts模板化开发,简易版配置大屏组件-根据配置文件输出图形和模板(vue2+echarts5.0)

实现结果 项目结构 根据我的目录和代码 复制到项目中 echartsTemplate-echarts图形 pie实例 <template><div :id"echartsId"></div> </template> <script> export default {name: ,components: {},mixins: [],props: [echartsId,…...

从人工到智能:外呼系统如何重构企业效率新生态

在数字化转型的浪潮中&#xff0c;智能外呼系统正从边缘辅助工具演变为企业效率革命的核心引擎。根据Gartner最新调研数据&#xff0c;部署AI外呼系统的企业客服效率平均提升68%&#xff0c;销售线索转化率增长42%。但在这场技术驱动的变革中&#xff0c;真正决定成败的往往不是…...

HTTP 2.0 和 3.0 的区别

HTTP 2.0 和 3.0 的核心区别体现在底层协议设计、性能优化和网络适应性上&#xff0c;以下是具体对比&#xff1a; 一、核心区别对比 特性HTTP 2.0HTTP 3.0&#xff08;HTTP/3&#xff09;底层传输协议TCPUDP&#xff08;基于 QUIC 协议&#xff09;队头阻塞&#xff08;TCP …...

Qt项目——Tcp网络调试助手服务端与客户端

目录 前言结果预览工程文件源代码一、开发流程二、Tcp协议三、Socket四、Tcp服务器的关键流程五、Tcp客户端的关键流程六、Tcp服务端核心代码七、客户端核心代码总结 前言 这期要运用到计算机网络的知识&#xff0c;要搞清楚Tcp协议&#xff0c;学习QTcpServer &#xff0c;学…...

4.21 从0开始配置spark-local模式

首先准备好安装包 然后使用命令解压 使用source /etc/profile命令让环境变量生效 输入命令 spark-submit --class org.apache.spark.examples.SparkPi --master local[2] /opt/module/spark-local/examples/jars/spark-examples_2.12-3.1.1.jar 10 即在spark运行了第一个程序…...

chili3d调试笔记3 加入c++ 大模型对话方法 cmakelists精读

加入 #include <emscripten/bind.h> #include <emscripten/val.h> #include <nlohmann/json.hpp> 怎么加包 函数直接用emscripten::function&#xff0c;如&#xff1a; emscripten::function("send_to_llm", &send_to_llm); set (CMAKE_C…...

go语言八股文

1.go语言的接口是怎么实现 接口&#xff08;interface&#xff09;是一种类型&#xff0c;它定义了一组方法的集合。任何类型只要实现了接口中定义的所有方法&#xff0c;就被认为实现了该接口。 代码的实现 package mainimport "fmt"// 定义接口 type Shape inte…...

C++——多态、抽象类和接口

目录 多态的基本概念 如何实现多态 在C中&#xff0c;派生类对象可以被当作基类对象使用 编程示例 关键概念总结 抽象类 一、抽象类的定义 基本语法 二、抽象类的核心特性 1. 不能直接实例化 2. 派生类必须实现所有纯虚函数才能成为具体类 3. 可以包含普通成员函数和…...

【Java面试笔记:基础】3.谈谈final、finally、 finalize有什么不同?

1. final、finally、finalize 的区别 final&#xff1a; 用途&#xff1a;用于修饰类、方法和变量。 修饰类&#xff1a;表示该类不能被继承。 final class ImmutableClass { // 此类无法被其他类继承 }修饰方法&#xff1a;表示该方法不能被子类重写。 class Parent {fin…...

基于 DeepSeek大模型 开发AI应用的理论和实战书籍推荐,涵盖基础理论、模型架构、实战技巧及对比分析,并附表格总结

以下是基于 DeepSeek大模型 开发AI应用的理论和实战书籍推荐&#xff0c;涵盖基础理论、模型架构、实战技巧及对比分析&#xff0c;并附表格总结&#xff1a; 1. 推荐书籍及内容说明 (1) 《深度学习》&#xff08;Deep Learning&#xff09; 作者&#xff1a;Ian Goodfellow…...

从数字化到智能化,百度 SRE 数智免疫系统的演进和实践

1. 为什么 SRE 需要数智免疫系统&#xff1f; 2022 年 10 月&#xff0c;在 Gartner 公布的 2023 年十大战略技术趋势中提到了「数字免疫系统」的概念&#xff0c;旨在通过结合数据驱动的一系列手段来提高系统的弹性和稳定性。 在过去 2 年的时间里&#xff0c;百度基于该…...

[Git] Git Stash 命令详解

1. Git Stash 的基本概念 Git Stash 是一个用于暂存当前工作目录中更改的命令。当你正在处理一个功能分支&#xff0c;但突然需要切换到另一个分支进行紧急修复或查看其他工作时&#xff0c;Git Stash 就显得非常有用。它允许你将当前工作目录中的更改保存起来&#xff0c;以便…...

ArcGIS及其组件抛出 -- “Sorry, this application cannot run under a Virtual Machine.“

产生背景&#xff1a; 使用的是“破解版本”或“被套壳过”的非官方 ArcGIS 版本 破解版本作者为了防止&#xff1a; 被研究破解方式 被自动化抓包/提权/逆向 被企业环境中部署多机使用 通常会加入**“虚拟化环境检测阻断运行”机制** 原因解释&#xff1a; 说明你当前运…...

Python项目调用Java数据接口实现CRUD操作

Django Python项目调用Java数据接口实现CRUD操作&#xff1a;接口设计与实现指南 引言 在现代软件架构中&#xff0c;系统间的数据交互变得越来越重要。Python和Java作为两种流行的编程语言&#xff0c;在企业级应用中常常需要实现跨语言的数据交互。本报告将详细介绍如何在D…...

进阶篇 第 5 篇:现代预测方法 - Prophet 与机器学习特征工程

进阶篇 第 5 篇&#xff1a;现代预测方法 - Prophet 与机器学习特征工程 (图片来源: ThisIsEngineering RAEng on Pexels) 在前几篇中&#xff0c;我们深入研究了经典的时间序列统计模型&#xff0c;如 ETS 和强大的 SARIMA 家族。它们在理论上成熟且应用广泛&#xff0c;但有…...

ubuntu 交叉编译 macOS 库, 使用 osxcross 搭建 docker 编译 OS X 库

1. ubuntu 交叉编译 macOS 库, 使用 osxcross 搭建 docker 编译 OS X 库 1. ubuntu 交叉编译 macOS 库, 使用 osxcross 搭建 docker 编译 OS X 库 1.1. 安装依赖1.2. 安装 osxcross 及 macOS SDK 1.2.1. 可能错误 1.3. 编译 cmake 类工程1.4. 编译 configure 类工程1.5. 单文件…...

JavaScript 中的单例模式

单例模式在 JavaScript 中是一种确保类只有一个实例&#xff0c;并提供全局访问点的方式。由于 JavaScript 的语言特性&#xff08;如对象字面量、模块系统等&#xff09;&#xff0c;实现单例有多种方式。 常见实现方式 1. 对象字面量&#xff08;最简单的单例&#xff09; …...

深度学习基石:神经网络核心知识全解析(一)

神经网络核心知识全解析 一、神经网络概述 神经网络作为机器学习领域的关键算法&#xff0c;在现代生活中发挥着重要作用&#xff0c;广泛应用于图像识别、语音处理、智能推荐等诸多领域&#xff0c;深刻影响着人们的日常生活。它通过模拟人类大脑神经系统的结构和功能&#…...

java的反编译命令

1. javap -c: 显示方法中的字节码 2. javap -p&#xff1a; 显示所有访问级别&#xff0c;包括private 3. Javap -v&#xff1a; verbose模式&#xff0c;全信息&#xff0c;输出的内容包括&#xff1a; 类的访问标志&#xff08;access_flags&#xff09; 类名、父类、接口 …...

影刀填写输入框(web) 时出错: Can not convert Array to String

环境&#xff1a; 影刀5.26.24 Win10专业版 问题描述&#xff1a; [错误来源]行12: 填写输入框(web) 执行 填写输入框(web) 时出错: Can not convert Array to String. 解决方案&#xff1a; 1. 检查变量内容 在填写输入框之前&#xff0c;打印BT和NR变量的值&#xff…...

词语关系图谱模型

参数配置说明 sentences, # 分词后的语料&#xff08;列表嵌套列表&#xff09; vector_size100, # 每个词的向量维度 window5, # 词与上下文之间的最大距离&#xff08;滑动窗口大小&#xff09; min_count5, # 忽略出现次数小于5的…...