vue中使用定義好的變量設(shè)置css樣式詳解
前言
在做項(xiàng)目的時(shí)候,通常會(huì)遇到需要在 HTML 標(biāo)簽上綁定變量來(lái)設(shè)置樣式,對(duì)于這種需求,共有兩種情況。
實(shí)現(xiàn)
第一種情況
如果是對(duì)于代碼中實(shí)實(shí)在在存在的 HTML 標(biāo)簽,我們可以直接綁定變量來(lái)設(shè)置樣式,比如改變表格的邊框。
- 先設(shè)置一個(gè)表格邊框樣式的 JS 變量(table_border)。
- 再在 HTML 標(biāo)簽的 style 屬性上綁定該 JS 變量。
<template>
<div class="app-container">
<template>
<el-table
:data="tableData"
:style="table_border"
>
<el-table-column
prop="date"
label="日期"
width="180"
/>
<el-table-column
prop="name"
label="姓名"
width="180"
/>
<el-table-column
prop="address"
label="地址"
/>
</el-table>
</template>
</div>
</template>
<script>
export default {
data() {
return {
// 表格數(shù)據(jù)
tableData: [{
date: '2016-05-02',
name: '王小虎',
address: '上海市普陀區(qū)金沙江路 1518 弄'
}, {
date: '2016-05-04',
name: '王小虎',
address: '上海市普陀區(qū)金沙江路 1517 弄'
}, {
date: '2016-05-01',
name: '王小虎',
address: '上海市普陀區(qū)金沙江路 1519 弄'
}, {
date: '2016-05-03',
name: '王小虎',
address: '上海市普陀區(qū)金沙江路 1516 弄'
}],
table_border: 'border: 1px solid red'// 設(shè)置表格邊框樣式
}
}
}
</script>效果如下:

第二種情況
如果我想手動(dòng)改變表格表頭的邊框顏色,有時(shí)候由于一些 UI 框架的組件是封裝好的,實(shí)際的 HTML 標(biāo)簽代碼中并不能直接設(shè)置,這時(shí)候就需要在 css 中進(jìn)行設(shè)置,那么怎么在 css 中使用變量呢。
語(yǔ)法
首先,我們要搞明白在 css 中如何聲明一個(gè) css 變量,如下:
--color: red
如何使用該 css 變量,如下:
.className{
color: var(--color)
}方法一
基于以上語(yǔ)法,我們來(lái)實(shí)現(xiàn)設(shè)置表格表頭的邊框,如下:
- 先設(shè)置樣式,一個(gè)表格邊框樣式的 JS 變量(table_border)及一個(gè)表頭邊框樣式的 JS 變量(table_header_border)。
- 再在 computed 中定義一個(gè)參數(shù)(setStyles),其返回值為 css 樣式集。其中鍵為 css 變量名,值為 css 樣式屬性值。
- 將該參數(shù)(setStyles)綁定到 HTML 標(biāo)簽的 Style 屬性上。
- 最后在 style 中使用,找到需要改變或者設(shè)置樣式的 HTML 標(biāo)簽的 className,將 css 變量進(jìn)行綁定即可。
<template>
<div class="app-container">
<template>
<el-table
:data="tableData"
:style="setStyles"
>
<el-table-column
prop="date"
label="日期"
width="180"
/>
<el-table-column
prop="name"
label="姓名"
width="180"
/>
<el-table-column
prop="address"
label="地址"
/>
</el-table>
</template>
</div>
</template>
<script>
export default {
data() {
return {
// 表格數(shù)據(jù)
tableData: [{
date: '2016-05-02',
name: '王小虎',
address: '上海市普陀區(qū)金沙江路 1518 弄'
}, {
date: '2016-05-04',
name: '王小虎',
address: '上海市普陀區(qū)金沙江路 1517 弄'
}, {
date: '2016-05-01',
name: '王小虎',
address: '上海市普陀區(qū)金沙江路 1519 弄'
}, {
date: '2016-05-03',
name: '王小虎',
address: '上海市普陀區(qū)金沙江路 1516 弄'
}],
table_border: '1px solid red', // 設(shè)置表格邊框樣式
table_header_border: '3px solid green'// 設(shè)置表頭邊框樣式
}
},
computed: {
setStyles() {
return {
'--tableBorder': this.table_border,
'--tableHeaderBorder': this.table_header_border
}
}
}
}
</script>
<style lang="scss">
.el-table--fit{
border: var(--tableBorder);
}
.el-table__header-wrapper{
border: var(--tableHeaderBorder);
}
</style>效果如下:

方法二
對(duì)于第二種情況,除了以上方法以外,我們還可以在 HTML 標(biāo)簽上使用 ref 屬性來(lái)實(shí)現(xiàn),如下:
- 先設(shè)置樣式,一個(gè)表格邊框樣式的 JS 變量(table_border)及一個(gè)表頭邊框樣式的 JS 變量(table_header_border)。
- 在 HTML 標(biāo)簽上設(shè)置屬性 ref 為 tableStyle。
- 再在 methods 中定義一個(gè)方法 setStyles,該方法通過(guò) this.refs.tableStyle.refs.tableStyle.refs.tableStyle.el.style.setProperty 來(lái)手動(dòng)將定義好的 JS 變量值綁定到對(duì)應(yīng)的 css 變量上。
- 在 mounted 中調(diào)用 setStyles 方法。
- 最后在 style 使用,找到需要改變或者設(shè)置樣式的 HTML 標(biāo)簽的 className,將 css 變量進(jìn)行綁定即可。
<template>
<div class="app-container">
<template>
<el-table
ref="tableStyle"
:data="tableData"
>
<el-table-column
prop="date"
label="日期"
width="180"
/>
<el-table-column
prop="name"
label="姓名"
width="180"
/>
<el-table-column
prop="address"
label="地址"
/>
</el-table>
</template>
</div>
</template>
<script>
export default {
data() {
return {
// 表格數(shù)據(jù)
tableData: [{
date: '2016-05-02',
name: '王小虎',
address: '上海市普陀區(qū)金沙江路 1518 弄'
}, {
date: '2016-05-04',
name: '王小虎',
address: '上海市普陀區(qū)金沙江路 1517 弄'
}, {
date: '2016-05-01',
name: '王小虎',
address: '上海市普陀區(qū)金沙江路 1519 弄'
}, {
date: '2016-05-03',
name: '王小虎',
address: '上海市普陀區(qū)金沙江路 1516 弄'
}],
table_border: '1px solid red', // 設(shè)置表格邊框樣式
table_header_border: '3px solid green'// 設(shè)置表頭邊框樣式
}
},
mounted() {
this.setStyles()
},
methods: {
setStyles() {
this.$nextTick(() => {
this.$refs.tableStyle.$el.style.setProperty('--tableBorder', this.table_border) // 給變量賦值
this.$refs.tableStyle.$el.style.setProperty('--tableHeaderBorder', this.table_header_border) // 給變量賦值
})
}
}
}
</script>
<style lang="scss">
.el-table--fit{
border: var(--tableBorder);
}
.el-table__header-wrapper{
border: var(--tableHeaderBorder);
}
</style>效果如下:

總結(jié)
對(duì)于在 css 中定義 css 變量來(lái)獲取 JS 變量設(shè)置樣式,我個(gè)人感覺(jué)挺有用的,特別是在做自適應(yīng)的時(shí)候,總是需要?jiǎng)討B(tài)獲取一些樣式數(shù)據(jù)來(lái)進(jìn)行渲染。
到此這篇關(guān)于vue中使用定義好的變量設(shè)置css樣式的文章就介紹到這了,更多相關(guān)vue定義好的變量設(shè)置css樣式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue中通過(guò)vue-router實(shí)現(xiàn)命名視圖的問(wèn)題
這篇文章主要介紹了在Vue中通過(guò)vue-router實(shí)現(xiàn)命名視圖,本文給大家提到了vue-router的原理解析,給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04
Vue導(dǎo)出el-table表格為Excel文件的兩種方式
在開(kāi)發(fā)過(guò)程中,我們經(jīng)常需要將表格數(shù)據(jù)導(dǎo)出為 Excel 文件,大多數(shù)情況下,由后端處理即可,但是當(dāng)數(shù)據(jù)量不大、需要快速響應(yīng)用戶(hù)操作、或者數(shù)據(jù)已經(jīng)在前端進(jìn)行處理和展示時(shí),前端該如何實(shí)現(xiàn)呢,本文將介紹兩種方法,需要的朋友可以參考下2024-09-09
前端vue3使用axios調(diào)用后端接口的實(shí)現(xiàn)方法
vue本身不支持ajax接口的請(qǐng)求,所以在vue中經(jīng)常使用axios這個(gè)接口請(qǐng)求工具,下面這篇文章主要給大家介紹了關(guān)于前端vue3使用axios調(diào)用后端接口的實(shí)現(xiàn)方法,需要的朋友可以參考下2022-12-12
Vue.js實(shí)現(xiàn)數(shù)據(jù)雙向綁定的代碼示例
在我們使用vue的時(shí)候,當(dāng)數(shù)據(jù)發(fā)生了改變,界面也會(huì)跟著更新,但這并不是理所當(dāng)然的,我們修改數(shù)據(jù)的時(shí)候vue是如何監(jiān)聽(tīng)數(shù)據(jù)的改變以及當(dāng)數(shù)據(jù)發(fā)生改變的時(shí)候vue如何讓界面刷新的,所以本文就給大家講講Vue.js 數(shù)據(jù)雙向綁定是如何實(shí)現(xiàn)的2023-07-07
vue項(xiàng)目是如何運(yùn)行起來(lái)的
這篇文章主要介紹了vue項(xiàng)目是如何運(yùn)行起來(lái)的,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09
vue實(shí)現(xiàn)鼠標(biāo)移過(guò)出現(xiàn)下拉二級(jí)菜單功能
這篇文章主要介紹了vue實(shí)現(xiàn)鼠標(biāo)移過(guò)出現(xiàn)下拉二級(jí)菜單功能,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12
如何使用vue3簡(jiǎn)單實(shí)現(xiàn)WebSocket通信
這篇文章主要給大家介紹了關(guān)于如何使用vue3簡(jiǎn)單實(shí)現(xiàn)WebSocket通信的相關(guān)資料,WebSocket是全雙工網(wǎng)絡(luò)通信通信協(xié)議,實(shí)現(xiàn)了客戶(hù)端和服務(wù)器的平等對(duì)話(huà),任何一方都可以主動(dòng)發(fā)送數(shù)據(jù),需要的朋友可以參考下2023-08-08

