美文网首页
关于在使用elementUI开发项目中,需要结合需求修改样式的问

关于在使用elementUI开发项目中,需要结合需求修改样式的问

作者: 一定要成为可以帮助别人的人 | 来源:发表于2018-03-29 20:13 被阅读0次

使用饿了么官方出版的elementUI近半年了,提升的开发速率可不是一点半点,那真是蹭蹭的往上窜。但是在开发过程中会遇到一种情况:需要结合自己公司的业务,修改element的样式,这就尴尬了。。。造成这种情况的原因是因为element的组件里面都有自己的样式,scoped控制了外界样式和当前组件不互通来防止组件间样式重叠或冲突,所以你在当前页面给<el-xxx>组件写class,然后利用class去调整样式是不可行的。

        在刚开始开发过程中,尝试了三种解决方案:

1、修改源码:尝试着去修改element源码,修改其内部样式为结合自己业务想要的样式。但是假如修改了<el-input>的基础样式,我只想作用于某一模块中,而不像全局都跟着修改这样的话,可以在源码中添加逻辑,增加一个参数,让<el-input>知道是不是该特殊组件,然后可以利用三元表达式加上相应的特殊class来执行其css样式。个人感觉此方式个别小需求还可以,由于自己水平有限,不敢大动源码,怕伤害到本身,所以弃之。

2、打补丁:在开发项目过程中,新建了一个patch.css的文件,并在全局引用。这样的话就突破了scope关键字的限制,直接开启上帝视角,想改哪里就改哪里。这样的方式不会破坏源码,当然这样的方式会比较乱,你还要结合看当前作用的.el-xxx--xxx .el-xxx--xxx .el-xxx 等一大串的css样式,相互结合形成的样式。而且你写新的样式去覆盖el的老样式时,需要特别注意css权重的问题,一定要比el组件内的权重高,不然不会生效的。


@import "vars";

// selct和input保持宽度一致

.el-select .el-input__inner, .el-input--suffix .el-input__inner {

  padding: 0 $dim_spacing_large5;

}

.el-input__inner {

  padding: 0 $dim_spacing_large5;

}

// 筛选条件板块样式

.el-form {

  background: $color_fg_contrast;

  border: $dim_radius_small5 solid $color_bg_white3;

  border-radius: $dim_radius_small3;

  padding: $dim_spacing_medium $dim_spacing_large5;

  margin-bottom: $dim_spacing_large2;

}

// table边框处理

.el-table {

  border: $dim_radius_small5 solid $color_bg_white3;

}

// table-bg切换tabs时的背景处理

.tabs-bg .el-tabs__item.is-active {

  color: $color_fg_contrast;

  background: $color_bg_white2;

}

.tabs-bg .el-tabs__item:hover {

  color: $color_fg_primary;

}

// 侧边nav及其动态样式

.el-submenu__title:hover {

  background-color: $color_bg_black2;;

  color: $color_fg_contrast;

}

.el-submenu__title {

  color: $color_bg_white4;

}

.el-menu {

  background-color: $color_bg_black3;

  border-right: $dim_radius_small5 solid $color_bg_black3;

}

.el-submenu .el-menu-item {

  background-color: $color_bg_black1;

  color: $color_bg_white4;

  text-align: center;

}

.el-menu-item:hover, .el-menu-item.is-active {

  background-color: $color_bg_black2;

  color: $color_fg_contrast;

}

// 左侧导航li最低不能为200,修改为150

.el-submenu .el-menu-item {

  min-width: $dim_width_large3;

}

// 修改input筛选条件区域

.el-form-item__content {

  line-height: $dim_height_small0;

}

.el-form-item {

  margin-bottom: $dim_spacing_medium;

}

.el-form--inline .el-form-item__label {

  color: $color_fg_primary;

  font-size: $dim_font_medium1;

}


这是我在项目中结合一些特殊的点来做的修改。

3、封装自己的组件:拿来主义,用别人现成的永远都要受别人的限制和条件约束。毕竟吃人嘴短拿人手软!!!自己写自己的用着才最舒服,当然也最麻烦。最好结合自己的项目走向,做一些能够长期使用并且能够多平台使用的组件会更好。写之前可以参考下element的组件,它提供了哪些api,输入参数需要什么,使用场景是什么,你想做成什么样的功能,下面是我自己写的一个比较简单的field组件。


<template>

    <div>

            <label :class="(labelClass || 'label')+(toLines?'' : 'inline')">{{ label+(noColon)?'':':' }}</label>

            <div :class="twoLines?'twoLines':'inline'">

                <slot />

            </div>

    </div>

</template>

<script>

  export default {

    name: 'field',

    props: ['label', 'labelClass', 'twoLines', 'noColon']

  }

</script>

<style>

  @import "../../assets/css/vars.scss";

  @import "../../assets/css/font.scss";

  .label {

    @extend .font-bold;

    width: $dim_width_large1;

  }

</style>


其实功能没有多少,具体效果可以为:名称:input/select/button。。。都可以。

本人水平有限,欢迎交流和批评。

相关文章

网友评论

      本文标题:关于在使用elementUI开发项目中,需要结合需求修改样式的问

      本文链接:https://www.haomeiwen.com/subject/jflvcftx.html