主题和样式
本章主要讲述样式相关的内容,如自定义定制主题、修改默认样式等。
使用Tailwind CSS
Tailwind CSS 作为一个CSS框架本质上是一个工具集,包含了大量类似 flex、 pt-4、 text-center 以及 rotate-90 等工具类,可以组合使用并直接在 HTML 代码上实现任何 UI 设计。
Tailwind CSS 原理基于一组预定义的类,这些类代表了常见的 CSS 属性和值。使用 Tailwind CSS,你不再需要手动编写 CSS 规则,而是通过在 HTML 元素上应用这些类来实现样式的设计。
原子化类:将
CSS
样式分解为原子级别的类,每个类都代表一个特定的CSS
属性和值组合。可配置性:允许你自定义每个类的样式,通过修改配置文件来调整颜色、字体等属性的值,实现定制化的设计风格。
组合性:通过将多个类组合在一起,你可以轻松地创建复杂的样式。例如,
text-center
bg-blue-500
text-white
p-4
将一个元素的文本水平居中显示,背景颜色设置为蓝色,文字颜色设置为白色,并添加了内边距为 4 个单位。
提醒
Web端框架内置了Tailwind CSS
, 可以开箱即用。当然这是一个Best to Have
的东西,如果你不习惯用它,完全可以用手写CSS替代。
Tailwind CSS
<div class="font-medium flex bg-white pt-[4px] m-[4px]"></div>
相当于CSS
<div class="custom"></div>
.custom{
font-weight:500;
display:flex;
background:white;
padding-top:4px;
margin:4px
}
使用SCSS
SCSS是一种 CSS 预处理器,它扩展了普通的 CSS 语法,提供了一些额外的功能,例如嵌套规则、变量、Mixin 等,使得样式表的编写更加简洁和可维护。
提醒
同样的,框架已经内置了对于SCSS的支持,指定style的lang为scss
即可
<style lang='scss'>
</style>
变量
$primary-color: #007bff;
$secondary-color: #6c757d;
.btn-primary {
background-color: $primary-color;
color: #fff;
}
.btn-secondary {
background-color: $secondary-color;
color: #fff;
}
嵌套规则
对于父子层级的样式,嵌套的写法非常方便
.card {
padding: 20px;
background-color: #fff;
.card-title {
font-size: 18px;
font-weight: bold;
}
.card-body {
margin-top: 10px;
}
}
相当于
.card {
padding: 20px;
background-color: #fff;
}
.card .card-title {
font-size: 18px;
font-weight: bold;
}
.card .card-body {
margin-top: 10px;
}
继承
%btn-base {
padding: 8px 16px;
background-color: #007bff;
color: #fff;
}
.btn-primary {
@extend %btn-base;
}
.btn-secondary {
@extend %btn-base;
background-color: #6c757d;
}
覆盖Element Plus样式
框架使用Element Plus
作为默认的组件库,组件自带了一套样式。有的时候,我们希望在使用组件的时候,对样式进行微调。如将Button
组件的背景调成特殊色。
正常情况,我们为了防止样式干扰,通常在编写样式的时候,会加上scoped
关键字,这样在编译时候,会默认的给样式加上唯一的hash值,使得样式仅仅在组件内部起作用,而不会影响其他组件的同类名样式。
- 组件A
<template>
<div class='dd'></div>
</template>
<style scoped lang="scss">
.dd{
color:red
}
</style>
- 组件B
<template>
<div class='dd'></div>
</template>
<style scoped lang="scss">
.dd{
color:red
}
</style>
因为有scoped,.dd
的样式不会相互影响。
但是当我想覆盖组件库样式的时候,发现无法修改
<template>
<div class='dd'>
<el-button></el-button>
</div>
</template>
<style scoped lang="scss">
.dd{
color:red;
.el-button{
background:pink; //无法修改
}
}
</style>
这是因为编译的时候,因为scoped的存在,编译器会忽略没有出现在组件内部的样式。如这里.el-button
是写在子组件的类名,会被忽略。 最终编译的css
如下:
.dd-xxx{
color:red;
}
// 不会出现.el-button 相关的样式
使用:deep
关键字
我们可以使用:deep
关键字来帮助我们覆盖子组件的样式
<template>
<div class='dd'>
<el-button></el-button>
</div>
</template>
<style scoped lang="scss">
.dd{
color:red;
:deep(.el-button ){
background:pink; //可以被修改
}
}
</style>
最终编译的css
如下:
.dd-xxx .el-button{
color:red;
}
// 出现.el-button 相关的样式
.dd-xxx{
background:pink;
}
定制主题
Web端框架基于Element Plus默认提供一套主题,CSS 命名采用 BEM 的风格,方便使用者覆盖样式。 但是如果需要大规模替换样式,例如: 将主题颜色从蓝色改为橙色或绿色,也许一个个将其覆盖起来不是一个好主意。
更改主题色
平台默认的主题色是 #2187ff
。
提醒
系统会自动的根据主题色,计算出基于主题色的不同透明度的颜色。如Button
组件设置为plain类型时的背景色是主题色
加了90%
的透明度而来。
如果需要更改,在 /src/styles/theme.scss
中修改primary
的颜色。
@forward 'element-plus/theme-chalk/src/common/var.scss' with (
$colors: (
'primary': (
'base': #2187ff // 修改主题色
)
... //其他辅助色等
),
$card: (
'padding': '16px'
),
$button: (
'font-weight': '400'
)
);
@use 'element-plus/theme-chalk/src/index.scss' as *;
当然您还仿照格式可以修改其他辅助色,如success
,waring
,danger
,info
等。具体的颜色默认值如下:
'white': #ffffff,
'black': #000000,
'primary': (
'base': #2187ff,
),
'success': (
'base': #67c23a,
),
'warning': (
'base': #e6a23c,
),
'danger': (
'base': #f56c6c,
),
'error': (
'base': #f56c6c,
),
'info': (
'base': #909399,
),
全局修改element Plus 其他样式
如果您想全局修改组件库样式,而不是一处一处覆盖,如下拉选择的padding
的值。可在 src/styles/element-plus.scss
中修改。
.el-dropdown-menu {
padding: 0 !important;
}
更多自定义样式方法请参考链接。