一、问题
使用element-UI的项目,打包部署以后,偶尔会出现iconfont显示乱码,但是刷新后又会好。研究后,查看打包后的css, 图标字体的content经过scss编译以后变成了这样
不过正常情况下图标还是会显示的,但是偶尔进入页面后,所有的iconfont图标会变成乱码。
二、原因
1、主要原因是sass 编译问题,针对iconfont 编译后会乱码,
2、项目中引用element,改了主题色,引入的elemtui 的scss文件包含了iconfont.scss,经过sass 会重新编译,
/* 改变主题色变量 */$--color-primary: #CCA05D;/* icon font path, required */$--font-path: '~element-ui/lib/theme-chalk/fonts';@import "~element-ui/packages/theme-chalk/src/index";
三、解决
对于第一个原因,sass的编译问题我们改变不了,所以我们就针对第2个原因来处理。如果引入的是elementui 编译后的css 文件,sass就不会再编译了,但我们这里需要改变主题色 需要用到scss变量,
所以最简单粗暴的方法是:
1. 项目里自定义element-ui主题的文件element-variables.scss,这个文件里本来有一个引入所有element组件scss文件的一行,这个文件其实也是包含了element所有模块的的scss文件
@import "~element-ui/packages/theme-chalk/src/index";
把这一行去掉,然后直接引入所有的scss文件,当然要去掉iconfont的scss
这里是所有组件,你也可以按需引入:
以下是所有scss文件,可以复制哦
/* 改变主题色变量 */$--color-primary: #CCA05D;/* icon font path, required */$--font-path: '~element-ui/lib/theme-chalk/fonts';@import "~element-ui/packages/theme-chalk/src/common/transition.scss";@import "~element-ui/packages/theme-chalk/src/pagination.scss";@import "~element-ui/packages/theme-chalk/src/dialog.scss";@import "~element-ui/packages/theme-chalk/src/autocomplete.scss";@import "~element-ui/packages/theme-chalk/src/dropdown.scss";@import "~element-ui/packages/theme-chalk/src/dropdown-menu.scss";@import "~element-ui/packages/theme-chalk/src/dropdown-item.scss";@import "~element-ui/packages/theme-chalk/src/menu.scss";@import "~element-ui/packages/theme-chalk/src/submenu.scss";@import "~element-ui/packages/theme-chalk/src/menu-item.scss";@import "~element-ui/packages/theme-chalk/src/menu-item-group.scss";@import "~element-ui/packages/theme-chalk/src/input.scss";@import "~element-ui/packages/theme-chalk/src/input-number.scss";@import "~element-ui/packages/theme-chalk/src/radio.scss";@import "~element-ui/packages/theme-chalk/src/radio-group.scss";@import "~element-ui/packages/theme-chalk/src/radio-button.scss";@import "~element-ui/packages/theme-chalk/src/checkbox.scss";@import "~element-ui/packages/theme-chalk/src/checkbox-button.scss";@import "~element-ui/packages/theme-chalk/src/checkbox-group.scss";@import "~element-ui/packages/theme-chalk/src/switch.scss";@import "~element-ui/packages/theme-chalk/src/select.scss";@import "~element-ui/packages/theme-chalk/src/button.scss";@import "~element-ui/packages/theme-chalk/src/button-group.scss";@import "~element-ui/packages/theme-chalk/src/table.scss";@import "~element-ui/packages/theme-chalk/src/table-column.scss";@import "~element-ui/packages/theme-chalk/src/date-picker.scss";@import "~element-ui/packages/theme-chalk/src/time-select.scss";@import "~element-ui/packages/theme-chalk/src/time-picker.scss";@import "~element-ui/packages/theme-chalk/src/popover.scss";@import "~element-ui/packages/theme-chalk/src/tooltip.scss";@import "~element-ui/packages/theme-chalk/src/message-box.scss";@import "~element-ui/packages/theme-chalk/src/breadcrumb.scss";@import "~element-ui/packages/theme-chalk/src/breadcrumb-item.scss";@import "~element-ui/packages/theme-chalk/src/form.scss";@import "~element-ui/packages/theme-chalk/src/form-item.scss";@import "~element-ui/packages/theme-chalk/src/tabs.scss";@import "~element-ui/packages/theme-chalk/src/tab-pane.scss";@import "~element-ui/packages/theme-chalk/src/tag.scss";@import "~element-ui/packages/theme-chalk/src/tree.scss";@import "~element-ui/packages/theme-chalk/src/alert.scss";@import "~element-ui/packages/theme-chalk/src/notification.scss";@import "~element-ui/packages/theme-chalk/src/slider.scss";@import "~element-ui/packages/theme-chalk/src/loading.scss";@import "~element-ui/packages/theme-chalk/src/row.scss";@import "~element-ui/packages/theme-chalk/src/col.scss";@import "~element-ui/packages/theme-chalk/src/upload.scss";@import "~element-ui/packages/theme-chalk/src/progress.scss";@import "~element-ui/packages/theme-chalk/src/spinner.scss";@import "~element-ui/packages/theme-chalk/src/message.scss";@import "~element-ui/packages/theme-chalk/src/badge.scss";@import "~element-ui/packages/theme-chalk/src/card.scss";@import "~element-ui/packages/theme-chalk/src/rate.scss";@import "~element-ui/packages/theme-chalk/src/steps.scss";@import "~element-ui/packages/theme-chalk/src/step.scss";@import "~element-ui/packages/theme-chalk/src/carousel.scss";@import "~element-ui/packages/theme-chalk/src/scrollbar.scss";@import "~element-ui/packages/theme-chalk/src/carousel-item.scss";@import "~element-ui/packages/theme-chalk/src/collapse.scss";@import "~element-ui/packages/theme-chalk/src/collapse-item.scss";@import "~element-ui/packages/theme-chalk/src/cascader.scss";@import "~element-ui/packages/theme-chalk/src/color-picker.scss";@import "~element-ui/packages/theme-chalk/src/transfer.scss";@import "~element-ui/packages/theme-chalk/src/container.scss";@import "~element-ui/packages/theme-chalk/src/header.scss";@import "~element-ui/packages/theme-chalk/src/aside.scss";@import "~element-ui/packages/theme-chalk/src/main.scss";@import "~element-ui/packages/theme-chalk/src/footer.scss";@import "~element-ui/packages/theme-chalk/src/timeline.scss";@import "~element-ui/packages/theme-chalk/src/timeline-item.scss";@import "~element-ui/packages/theme-chalk/src/link.scss";@import "~element-ui/packages/theme-chalk/src/divider.scss";@import "~element-ui/packages/theme-chalk/src/image.scss";@import "~element-ui/packages/theme-chalk/src/calendar.scss";@import "~element-ui/packages/theme-chalk/src/backtop.scss";@import "~element-ui/packages/theme-chalk/src/infinite-scroll.scss";@import "~element-ui/packages/theme-chalk/src/page-header.scss";@import "~element-ui/packages/theme-chalk/src/cascader-panel.scss";@import "~element-ui/packages/theme-chalk/src/avatar.scss";@import "~element-ui/packages/theme-chalk/src/drawer.scss";@import "~element-ui/packages/theme-chalk/src/popconfirm.scss";@import "~element-ui/packages/theme-chalk/src/skeleton.scss";@import "~element-ui/packages/theme-chalk/src/skeleton-item.scss";@import "~element-ui/packages/theme-chalk/src/empty.scss";@import "~element-ui/packages/theme-chalk/src/descriptions.scss";@import "~element-ui/packages/theme-chalk/src/descriptions-item.scss";@import "~element-ui/packages/theme-chalk/src/result.scss";
2、然后就是重新引入iconfont的css文件,在main.js里引入element的icon.css
import Element from 'element-ui'import "@/styles/element-variables.scss";import 'element-ui/lib/theme-chalk/icon.css'
再次打包编译后,查看css 文件就不会有乱码了