第三方UI组件库的样式修改

一、场景:

       一般来说,我们在使用第三方UI组件库(如:vant,element-plus等)时,UI组件库自带的样式不能满足用户的个性化需求时,就需要我们开发人员自己动手对组件库的局部样式进行修改。

二、修改UI组件库的顺序和方法

1、修改主题

1、修改主题:每个ui组件库都有专门的修改主题的解释,如vant。Vant 3 - Lightweight Mobile UI Components built on Vue

2、使用props

如:element-plus的el-buton组件,可以通过 修改type属性的取值,来改变外观样式

<el-button type="primary">按钮</el-button>

3、添加 class/style
<el-button type="success" class="mybutton" style="height: 250px;">按钮</el-button>
​
​
<style lang="css" scoped>
​
.mybutton{
    border-radius: 20px;
}
    
</style>

如果某个属性覆盖不了,就加属性的权重

.mybutton{ border-radius: 20px !important; }

4、查看元素,查询相关样式名,修改编译后的样式
<el-button type="success" class="mybutton" style="height: 250px;">按钮</el-button>
​
<style lang="css" scoped>
​
.mybutton{
    border-radius: 20px;
}
​
.el-button{
    width: 600px;
}
    
</style>

5、样式穿透(覆盖ui组件库的样式名)
1)、 .a >>> .b { /* ... */ } 深度选择器;

如果实在不行的话,可以考虑给外面加一个容器

即: 自定义的样式名 >>> ui组件库的样式名

注意:这个写法sass和less不支持。

<template>
    <el-table class="mytable" :data="tableData" style="width: 100%">
      <el-table-column prop="date" label="Date" width="180" />
      <el-table-column prop="name" label="Name" width="180" />
      <el-table-column prop="address" label="Address" />
    </el-table>
  </template>
  
  <script  setup>
  const tableData = [
    {
      date: '2016-05-03',
      name: 'Tom',
      address: 'No. 189, Grove St, Los Angeles',
    },
    {
      date: '2016-05-02',
      name: 'Tom',
      address: 'No. 189, Grove St, Los Angeles',
    }
  ]
  </script>
​
<style scoped>
​
.mytable >>> .el-table_1_column_1  .cell{
    background-color: red;
}
​
</style>

2)、 /deep/ ui组件选择器 { }
/deep/ .a{
​
    ***
​
}

sass和less的写法:

<style lang="scss" scoped>
.a{
  /deep/ .b { 
  /* ... */
 }
}
</style>

scoped 影响 (不加scoped,deep不生效)

3)、::v-deep ui组件选择器 { }
::v-deep .a{
​
    ***
​
}

示例代码:

<el-button type="success" class="mybutton" style="height: 250px;">按钮</el-button>
​
<style lang="css" scoped>
​
.mybutton{
    border-radius: 20px;
}
​
::v-deep .el-button span{
    width: 100px;
    height: 30px;
    background-color: aqua;
}
​
.el-button{
    width: 600px;
}
​
</style>


sass和less的写法:

<style lang="scss" scoped>
.a{
 ::v-deep .b { 
  /* ... */
 }
} 
</style>

/deep/在某些时候会报错,::v-deep更保险并且编译速度更快.

三、最后

由于UI组件库内部的样式我们不是完全清楚,所以,以上方法,都可以尝试,那种方式可以,就用那种。

其实,你可以打开chrome浏览器的元素(elements),查看不同组件的内部标签结构和样式,先做做尝试,再在代码中写,同时,也能够了解UI组件库内部的样式情况。

### 修改第三方 UI 库组件样式的常见方式 #### 1. 使用全局样式覆盖 可以通过 CSS 的 `/deep/` 或 `>>>` 符号来穿透 Scoped CSS 并修改子组件的样式。如果该方法失效,可以尝试将样式写入全局样式文件中,并结合 `!important` 提高优先级[^2]。 ```css /* 全局样式 */ .van-loading { background-color: red !important; } ``` #### 2. 利用 Props 自定义样式 许多第三方 UI 组件库提供了用于自定义样式的属性(Props),例如颜色、大小等。开发者可以直接通过这些 Props 来调整组件外观而无需手动编写额外的样式[^1]。 ```vue <van-button type="primary" color="#7232dd">紫色按钮</van-button> ``` #### 3. 插槽机制实现样式定制 当需要更复杂的样式控制时,可以利用插槽(Slot)功能,在父组件的作用域下插入自定义的内容并应用特定样式[^3]。 ```vue <van-tabbar-item badge="3"> <span>自定义</span> <template #icon="props"> <img :src="props.active ? icon.active : icon.inactive" /> </template> </van-tabbar-item> <style scoped> img { height: 28px; } </style> ``` #### 4. 主题配置工具 部分 UI 组件库支持主题定制化服务,允许用户通过在线编辑器或者本地配置文件更改默认的主题变量,从而批量影响整个项目的视觉风格。 --- ### 注意事项 - 如果发现某些样式无法被正常覆盖,请确认目标选择器的具体路径以及是否存在更高权重的选择器干扰。 - 对于基于 Vue 3 构建的应用程序,注意 `/deep/` 已经废弃,应改用 `::v-deep()` 替代。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值