表格指定行背景变色

Element Plus表格(el-table)指定行背景变色的实现方式

#tech / dev / frame #type / howto #status / evergreen

表格指定行背景变色

可以,Element Plus 的 el‑table 提供了多种方式给指定行换背景颜色,常用的做法有:

  1. row-class-name(返回 CSS 类名)
  2. row-style(返回行内样式对象)
  3. 在列的 slot 中使用 :class / :style

下面分别演示这几种实现方式,供你根据需求挑选。


1️⃣ 通过 row-class-name 动态返回 CSS 类

<template>
<el-table
:data="tableData"
:row-class-name="rowClass"
border
style="width: 100%"
>
<el-table-column prop="id" label="ID" width="180" />
<el-table-column prop="name" label="Name" />
<el-table-column prop="amount1" label="Amount 1" />
</el-table>
</template>

<script lang="ts" setup>
import { ref } from 'vue'

interface Row {
id: string
name: string
amount1: number
highlight?: boolean// 自定义字段,用来标记需要高亮的行
}

const tableData = ref<Row[]>([
{ id: '1', name: 'Tom', amount1: 10, highlight: true },
{ id: '2', name: 'Jack', amount1: 20 },
{ id: '3', name: 'Lucy', amount1: 30, highlight: true },
])

// 根据行数据返回类名
const rowClass = ({ row }: { row: Row }) => {
return row.highlight ? 'row-highlight' : ''
}
</script>

<style scoped>
/* 自定义背景颜色 */
.row-highlight {
background-color: #fff3e0;/* 你想要的颜色 */
}
</style>
  • rowClass 接收当前行对象 row,返回类名字符串。
  • 只要行对象的 highlighttrue,对应的 <tr> 就会套上 row-highlight,实现背景变色。
  • 在 row-class-name 中使用方法函数来灵活地根据row属性来决定是否返回特定的类

2️⃣ 通过 row-style 返回行内样式对象

如果你不想写额外的 CSS 类,直接返回样式对象也很方便:

<el-table:data="tableData"
:row-style="rowStyle"
border
style="width: 100%"
>
<!-- columns … -->
</el-table>
const rowStyle = ({ row }: { row: Row }) => {
// 例如奇数行淡灰、偶数行淡蓝
return {
background: row.id % 2 === 0 ? '#e6f7ff' : '#f5f5f5'
}
}

注意:返回的对象属性必须使用 CSS 的 驼峰写法(如 backgroundcolor),Element Plus 会把它们转成行内样式。


3️⃣ 在列的 slot 中自行控制

如果你只想对某几列的单元格做背景颜色,而不是整行,可以在列上使用 scoped-slot

<el-table :data="tableData" border style="width: 100%">
<el-table-column prop="id" label="ID" width="180">
<template #default="{ row }">
<div :style="{ background: row.id === '1' ? '#ffebee' : '' }">
{{ row.id }}
</div>
</template>
</el-table-column>

<!-- 其它列保持默认 -->
<el-table-column prop="name" label="Name" />
<el-table-column prop="amount1" label="Amount 1" />
</el-table>
  • 这里我们在 id 列的单元格外层包一层 <div>,通过 :style 控制背景。
  • 只针对特定列生效,适合“高亮某列”而非整行的需求。

4️⃣ 小技巧 & 常见坑点

场景推荐方式常见问题
整行统一颜色row-class-namerow-style别忘了在 <style scoped> 中写类,或返回完整的样式对象。
根据业务字段动态高亮rowClass / rowStyle 中读取行数据字段确保字段在 tableData 中真实存在,否则会出现 undefined
需要在暗色主题下兼容使用 CSS 变量或 theme 配置直接写死颜色会在暗色模式下看不清。
大量数据时性能使用 row-class-name(只返回类名)row-style 每行都会生成行内样式,渲染稍慢。

✅ 总结

  • row-class-name:返回类名,配合 CSS 更灵活、易维护。
  • row-style:直接返回行内样式,写法简洁。
  • slot:针对单元格细粒度控制。

只要在 el-table 上加上相应属性,就能轻松实现行背景颜色的切换。


如果你已经有具体的业务场景(比如“金额大于 100 的行标红”,或“奇偶行交替颜色”),我可以帮你写出对应的完整代码示例。需要吗?

创建于 2025/1/1 更新于 2026/5/27