【ElementUI】通过改变SCSS变量修改ElementUI样式

目录

一、创建覆盖ElementUI样式的文件

二、在项目入口文件中引入上记文件

三、覆盖ElementUI的样式变量

四、如何修改变量以外的样式

五、既然可以直接修改样式,为什么还要覆盖变量


 

大家好

 

在Element官网中,提供了四种方法来对样式进行自定义:

  1. 主题编辑器
  2. 仅替换主题色
  3. 在项目中改变SCSS变量
  4. 命令行主题工具

 

本文将按照官网的描述,介绍如何在使用了SCSS的项目中,通过改变SCSS变量修改ElementUI样式,并在此基础上给出示例和补充。

 

一、创建覆盖ElementUI样式的文件

Element 的 theme-chalk 使用 SCSS 编写,我们可以直接在项目中改变 Element 的样式变量。

首先,我们新建一个样式文件,例如 element-variables.scss,用来覆盖ElementUI的样式。(在本文示例中,该文件创建在src根目录)

 

以下是该文件的基本代码:

// element-variables.scss

/* 改变 icon 字体路径变量,必需 */
$--font-path: '~element-ui/lib/theme-chalk/fonts';

@import "~element-ui/packages/theme-chalk/src/index";

上记代码中,我们还没有添加我们想要覆盖的样式。

其中的$--font-path是字体路径变量,是必须进行覆盖的,将其赋值为 Element 中 icon 图标所在的相对路径即可。

"~element-ui/packages/theme-chalk/src/index"是ElementUI的SCSS文件,文件的内容是引用各个组件的SCSS文件。所以如果我们是按需引入组件,此处也可以只引入对应组件的SCSS文件。

关于“~”的用法:URL中“~”后的内容会作为一个模块请求被解析,可以参考VUE-CLI的文档 https://cli.vuejs.org/zh/guide/html-and-static-assets.html#url-%E8%BD%AC%E6%8D%A2%E8%A7%84%E5%88%99

 

二、在项目入口文件中引入上记文件

然后,为了在项目中应用上记文件,我们需要在入口文件中引用,代码如下:

// main.js

import Vue from 'vue'
import Element from 'element-ui'
import './element-variables.scss'

Vue.use(Element)

到此为止,我们在样式文件的修改就可以反映在项目中啦。

 

三、覆盖ElementUI的样式变量

ElementUI预置了一些样式变量,我们可以查看想要修改的组件的样式文件,也可以通过Element的在线工具(https://element.eleme.io/#/zh-CN/theme/preview)了解可以修改哪些变量。

最后,我们来覆盖ElementUI的样式变量。以修改按钮的样式为例:

ElementUI的按钮提供了多种大小,如果在项目中经常使用某一种大小的按钮,我们一般会在Vue安装Element时进行设定。比如我们使用超小按钮:

// main.js

import Vue from 'vue'
import Element from 'element-ui'
import './element-variables.scss'

Vue.use(ElementUI, {size: 'mini'})

我们来看看这个超小按钮的样子吧:

<!-- index.vue -->
<template>
  <div>
    <el-button>ボタン</el-button>
  </div>
</template>

 

可有时候,我们觉得超小型按钮也有点太大了,我们想调整按钮的大小。于是我们可以覆盖下记两个变量:

// element-variables.scss

/* 改变 超小按钮 的大小 */
$--button-mini-padding-vertical: 3px; // 纵向内边距 原始为7px
$--button-mini-padding-horizontal: 7px; // 横向内边距 原始为15px

/* 改变 icon 字体路径变量,必需 */
$--font-path: '~element-ui/lib/theme-chalk/fonts';

@import "~element-ui/packages/theme-chalk/src/index";

现在我们再来看这个按钮,是不是比原来还要小啦

 

四、如何修改变量以外的样式

有的时候,只通过修改变量,并不能完全满足我们的需求。一些组件的样式,并未使用SCSS变量。遇到这种情况,我们可以选择覆盖Element的Class。

以下是一个单独修改卡片标题高度的例子:

<!-- index.vue -->
<template>
  <div>
    <el-card header="カード">内容</el-card>
  </div>
</template>

我们来修改影响标题高度的样式:

// element-variables.scss


/* 改变 超小按钮 的大小 */
$--button-mini-padding-vertical: 3px; // 纵向内边距 原始为7px
$--button-mini-padding-horizontal: 7px; // 横向内边距 原始为15px

/* 改变 icon 字体路径变量,必需 */
$--font-path: '~element-ui/lib/theme-chalk/fonts';

@import "~element-ui/packages/theme-chalk/src/index";

// 修改卡片样式
.el-card {
  .el-card__header {
    padding: 6px 18px; // 卡片标题内边距 原始为18px 20px;
  }
}

这样就大功告成啦~

 

五、既然可以直接修改样式,为什么还要覆盖变量

像主题色之类的样式,组件之间是共用的。只改变一个组件中的主题色样式,会与其他组件的颜色主题不一致,产生违和感。

这其实就是变量的优点,可复用。而且变量名包含语义,读起来也更容易理解,方便维护。

 

 

以上就是本文的全部内容啦,本人能力有限,如果记述有误,还请您留言指出,感谢谅解和支持,欢迎留言评论!

原文地址:https://blog.csdn.net/csdn_vplus/article/details/114799058

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


el-menu 有个属性 :default-active="curActive"  el-menu-item有个属性:index=“home”这2个属性值对上号就自动定位了data(){ return{ curActive:"home" }; },
基础用法1<el-inputv-model="input1"palcehoder="请输入"></el-input>23varMain={4data(){5return{6input1:''7}8}9}10varCtor=Vue.extend(Main)11newCtor().$mount('#app&#03
 1.安装element-uinpminstallelement-ui-S 2.在main.js中importElementUIfrom'element-ui'import'element-ui/libheme-chalk/index.css'Vue.use(ElementUI)注意index.css的路径不要出错:在node_modules文件夹里node_modules\element-ui\lib\theme-c
layout布局通过基础的24分栏,可进行快速布局基础布局使用单一分栏创建基础的栅格布局,通过span属性指定每栏的大小<el-col:span="8"></el-col>1<el-row>2<el-col:span="8"><divclass="grid-contentbg-purple"></div>&
 今天做一个选择年份的功能,直接调用了ElementUI里面的DatePicker组件,官网上有该组件的用法介绍,讲得很清楚。 我的代码: 官网说明: 奇怪的事情发生了,我明明按照例子写了  value-format="yyyy" 可是获得的值却一直还是Date对象 仔细检查后,我突然发现我的v-model
  that.end 即为结束日期
vueelementUitree懒加载使用详情2018年11月21日11:17:04开心大表哥阅读数:3513 https://blog.csdn.net/a419419/article/details/84315751 背景:vue下使用elementUI文档:http://element-cn.eleme.io/#/zh-CN/componentree#tree-shu-xing-kong-jian需求:只保存二
环境搭建说明:1、全局安装angluar脚手架npminstall-g@angular/cli2、初始化项目(支持scss)ngnew项目名称--style=scss//进入项目cd项目名称运行代码可以是:serve或者npminstall(安装依赖)npmstart(运行)3、安装elementnpm
1、在写埋点监控项目的时候,需求是表格里面的数据后台传递过来为0,但是要求显示的时候为—,在elementUI判断,将prop去掉在下面加上<templateslot-scope="scope"><emplate>里面在写vue的判断,因为通过Scopedslot可以获取到row,column,$index和store(table内容的状态管理)的数据。2、
<el-table-columnprop="pubArea"//表格data中对应的字段column-key="pubArea"//过滤条件变化时根据此key判断是哪个表头的过滤label="报修类型"align="center"width=
1.npminstallbabel-plugin-component-D   然后.babelrc替换plugins 文件就在根目录下  2.组件中英文及自定义中英文importVueI18nfrom'vue-i18n'importenLocalefrom'element-ui/lib/locale/lang/en'importzhLocalefrom'element-ui/lib/locale/lang/zh-C
 <el-treeref="tree":data="menu.treeData":props="menu.defaultProps":filter-node-method="filterNode":expand-on-click-node=&quot
2019独角兽企业重金招聘Python工程师标准>>>使用vue+elementui的tree组件,elementui官网elementui的tree组件问题描述:tree层级过多时左右不可滚动问题解决:修改overflow属性值.el-tree-node>.el-tree-node_children{overflow:visible;} 其他相关链接:css--ov
首先elementUI的导航栏中的选中项的高亮显示时的字体颜色可以在属性中设置,但是高亮时的背景颜色不能设置,所以要自己修改高亮的背景颜色.el-menu-item.is-active{background-color:#00b4aa!important;} 在使用elementUI构建vue项目的时候会遇到页面刷新的时候子路由会保
1.首先创建Vue项目(使用vue-cli进行创建)创建项目文章指导地址: https://blog.csdn.net/assiduous_me/article/details/892086492.ElementUI:一套为开发者、设计师和产品经理准备的基于Vue2.0的桌面端组件库 链接地址:http://element.eleme.io/#/zh-CN3.正式开
使用vue开发项目,用到elementUI,根据官网的写法,我们可以自定义主题来适应我们的项目要求,下面来介绍一下两种方法实现的具体步骤,(可以参考官方文档自定义主题官方文档),先说项目中没有使用scss编写,用主题工具的方法(使用的较多)第一种方法:使用命令行主题工具使用vue-cli安装完项目并引
每页显示的序号都是一样的:<el-table:data="tableData"highlight-current-row@current-change="handleCurrentChange"><el-table-columntype="index"width="50"></el-table-column><el-table>根据
  记录一下自己踩的坑,控制element内的table的某列显示隐藏不能用v-show,而是要用v-if具体网上百度了,看一下v-show和v-if的区别吧猜测:由于el-table-column会生成多行标签元素,根据v-show是不支持template语法的,推断v-show不能显示隐藏多个元素 
样式重置单vue文件中重置全局重置多写一个style不加scrop,可能会影响全局样式待补充table单价数量小计3252?在ElementUI中,我需要获取row内的数据并进行计算,需要用到v-slot<el-table-columnlabel="小计"><templatev-slot="scope">{{scop
工作需要做一个带滑块效果的导航栏,初步想法是用element的导航组件去做,后面摸坑结合各位大佬的博客初步实现效果,话不多说,直接上代码,记录一下爬坑之旅1<template>2<divclass="y-nav">3<el-rowclass="nav">4<el-menu5:default-active="$route.