- 作者:老汪软件技巧
- 发表时间:2024-09-18 10:03
- 浏览量:
0 环境1 参考文档
geeker admin官方文档
element-plus官方文档
vue router官方文档
ToolBarRight.vue
useUserStore
mitt
ThemeDrawer/index.vue
ThemeDrawer/index.scss
2 前言
主要是介绍ThemeDrawer/index.scss,位置在src/layouts/components/ThemeDrawer/index.scss。下面我说的默认就是该index.scss。然后还有index.vue也在同级下,所有默认就是这两个文件。
3 正文
先看index.scss第1-9行,在打开index.vue,找到与class="divider"相关,第4-7行、73-76行、95-98行。
这里是抽取成一个类,设置上边距为15px,.el-icon目的的是调整图标的位置和大小。为啥要调整呢,因为图标位置和文字之间不对称,如下图:
再看index.scss第10-27行,再到index.vue中,找到class="theme-item",因为这个类相关的div太多了,所有我就截图了两个,如下图:只要图右边红色选中框,它下面有开关按钮的,都跟.theme-item相关,
这里做了什么呢,就是将span里的文字和图标(这里的图标不一定每个都有)与开关按钮,交叉轴上居中对齐,span和开关按钮,将它们置于首尾,但不能太靠边,左右内填充5px,上下边距14px,这样就美观很多了。
还有个问题就是span里的文字和图标偏大,图标和文字有点不对称,当你font-size: 14px;,当你将span里的文字和图标调小了,这种不对称还存在的,这里就需要交叉轴上居中对齐。还有图标黑色很难看,以及放上去没有手型的样式等细节,.el-icon的处理,设置左边距,调整图标大小,设置颜色,以及光标放上去为手型。还有mb50等同于margin-bottom: 50px !important;
剩下的inde.scss,从28行一直到最后,都是关于.layout-box,也就是index.vue第8行-52行。所针对的样式就是如下图:
这里相反不是以.layout-box为重点,而是以它的子项.layout-vertical,.layout-classic,.layout-transverse,.layout-columns为中心,因为需要宽高。而.layout-item则是前面这4个class都需要用到的。
首先根据观察,这些样式都是对.layout-dark、.layout-container、.layout-light做宽度或者高度的调整。具体对应块,并且我注释了flex-wrap: wrap;,如下图:
现在看.layout-box,首先有一个相对定位,貌似也没用到,然后是4个布局样式flex布局,并且可以换行显示,元素两边放,padding做了上左右填充的工作。.layout-item,设置盒模型,宽高和内填充、阴影、外边框圆角,加了一个过渡动画,.layout-dark主要是背景色 + 外边框圆角,.layout-light和它类似,无非背景色不同,.layout-content不仅需要背景色和外边框圆角,还需要虚线边框。
.el-icon它是对那个√做样式处理,绝对定位(子绝父相),固定在右下角的位置,设置颜色和动画。如下图所示。&:hover就是鼠标放上去的时候,有个阴影效果。
.is-active是被选中项,有个阴影边框的效果,如下图,最外面那个边框。
结合下面的代码 + 图片,下面我说的1、2、3是下图所指的位置,.layout-vertical,space-between是将1和2放两边,设置个下边距,.layout-dark设置百分比宽度,.layout-container需要上下布局,并且设置一个宽度,上下布局就需要考虑.layout-light和.layout-content它两个高度占比。注意了这里的3就是那个对勾图标,这里是通过v-if判断是否展示,而is-active也是通过layout == 'vertical'判断的。.layout-classic它们都类似。
"dark" content="纵向" placement="top" :show-after="200">
<div :class="['layout-item layout-vertical', { 'is-active': layout == 'vertical' }]" @click="setLayout('vertical')">
<div class="layout-dark">div>
<div class="layout-container">
<div class="layout-light">div>
<div class="layout-content">div>
div>
<el-icon v-if="layout == 'vertical'">
<CircleCheckFilled />
el-icon>
div>
// scss
.layout-vertical {
display: flex;
justify-content: space-between;
margin-bottom: 20px;
.layout-dark {
width: 20%;
}
.layout-container {
display: flex;
flex-direction: column;
justify-content: space-between;
width: 72%;
.layout-light {
height: 20%;
}
.layout-content {
height: 67%;
}
}
}
4 小结
scss就是分三大块,el-divider(图标 + 小标题)、文字(图标)和开关按钮、4种布局样式。最主要是4种布局样式细节比较多,.layout-item设置的是皮,.layout-vertical设置的是骨,是is-active判断,是给外边框套个颜色,看着清晰。选中时,还有个对勾的图标,这里通过v-if判断是否显示。