Vue3中動(dòng)態(tài)修改樣式與級(jí)聯(lián)樣式優(yōu)先順序圖文詳解
前言
本編記錄了Vue3中動(dòng)態(tài)修改CSS樣式的方法,在項(xiàng)目中,經(jīng)常會(huì)遇到CSS樣式要變更的地方。
文章后面有對(duì)【級(jí)聯(lián)樣式優(yōu)先級(jí)順序】的復(fù)習(xí)
一、ref修改樣式
1、通過 Vue 的 ref 組件獲取 DOM 元素節(jié)點(diǎn)
通過ref對(duì)元素實(shí)現(xiàn)動(dòng)態(tài)綁定,可以獲取到對(duì)應(yīng)的DOM元素節(jié)點(diǎn),代碼如下:
提示:以下代碼語法采用Vue3比較精簡(jiǎn)的setup語法糖展示
<template> <div class="squareClass" ref="squareRef"> </div> </template> <script setup> import {onMounted, ref} from 'vue' //聲明squareRef對(duì)應(yīng)ref對(duì)象為一個(gè)常量 const squareRef = ref() onMounted(() => { //setup語法用.value獲取ref對(duì)象的值 console.log('獲取到的DOM對(duì)象: ' + squareRef.value) console.log(squareRef.value) }) </script>
瀏覽器控制臺(tái)打印結(jié)果如下:
注:這邊比較一下,和 DOM操作 document.getElementById(‘id’) 這個(gè)方法有什么區(qū)別
Vue中,在生命周期create階段ref組件就會(huì)對(duì)DOM節(jié)點(diǎn)進(jìn)行動(dòng)態(tài)綁定
如果在Vue3中要使用 document.getElementById(‘id’) 這個(gè)方法的話
要在onMounted組件中獲取節(jié)點(diǎn),代碼如下:
<template> <div id="squareId"> </div> </template> <script setup> import {onMounted} from 'vue' let squareId onMounted(() => { squareId = document.getElementById('squareId') //這邊和ref的調(diào)用區(qū)別少了個(gè).value console.log(squareId) }) </script>
瀏覽器控制臺(tái)打印結(jié)果如下:
2、通過 ref 修改 DOM 元素節(jié)點(diǎn)樣式
以下代碼展示的是通過 ref 來修改樣式,代碼如下:
<template> <div ref="squareRef"> </div> </template> <script setup> import {onMounted, ref} from 'vue' const squareRef = ref() onMounted(() => { //ref修改DOM節(jié)點(diǎn)樣式,DOM操作document.getElementById('id')的寫法一樣,只不過去掉了.value,所以原理上是一樣的 squareRef.value.style.width = '200px' squareRef.value.style.height = '200px' //這邊樣式名稱有點(diǎn)小小的區(qū)別,在CSS中背景顏色的屬性名稱為:background-color,在style對(duì)象中的"-"符號(hào)不能用來引用屬性值 //所以這邊一律使用駝峰命名方式來調(diào)取CSS屬性或賦值,background-color對(duì)應(yīng)backgroundColor squareRef.value.style.backgroundColor = 'greenyellow' squareRef.value.style.border = '5px dashed green' }) </script>
效果展示:
二、通過v-bind對(duì)Html元素的樣式(style)進(jìn)行動(dòng)態(tài)綁定
在Vue中,正常的v-bind寫法如下:
<div v-bind:style="squareStyle">
在項(xiàng)目使用中,我們普遍會(huì)省略掉前面的v-bind,簡(jiǎn)寫的方式如下:
<div :style="squareStyle">
這時(shí)候我們只要聲明一個(gè)變量或常量,初始化該變量或常量的ref的值為css對(duì)象
就可以實(shí)現(xiàn)樣式的動(dòng)態(tài)綁定,代碼如下:
提示:以下style樣式的動(dòng)態(tài)綁定采用簡(jiǎn)寫:style實(shí)現(xiàn)
<template> <div :style="squareStyle"> </div> </template> <script setup> import {ref} from 'vue' //聲明一個(gè)常量或變量即可實(shí)現(xiàn)樣式動(dòng)態(tài)綁定 const squareStyle = ref({ width: '200px', height: '200px', backgroundColor: 'skyblue', border: '5px dotted blue', borderRadius: '110px' }) </script>
效果展示:
三、v-bind:style動(dòng)態(tài)綁定和ref修改style樣式的區(qū)別
在Vue中,通過ref組件對(duì)style進(jìn)行動(dòng)態(tài)綁定之后,這個(gè)style的對(duì)象除了用ref組件重新賦值之外
通過ref.value.style是不能對(duì)動(dòng)態(tài)綁定的對(duì)象進(jìn)行修改的。
<template> <div ref="squareRef" :style="squareStyle"> </div> </template> <script setup> import {onMounted, ref} from 'vue' const squareRef = ref(), squareStyle = ref() onMounted(()=>{ //v-bind:style動(dòng)態(tài)綁定 squareStyle.value = { width: '200px', height: '200px', backgroundColor: 'skyblue', border: '5px dotted blue', borderRadius: '110px' } //通過ref組件進(jìn)行style樣式修改 squareRef.value.style.width = '300px' squareRef.value.style.height = '300px' squareRef.value.style.backgroundColor = 'greenyellow' squareRef.value.style.border = '5px dashed green' squareRef.value.style.borderRadius = '' }) </script>
結(jié)果展示:
我明明已經(jīng)修改了樣式,怎么不生效呢?
因?yàn)樵摌邮綄?duì)象已被動(dòng)態(tài)綁定,就算修改了值,也會(huì)馬上變回去
這時(shí)候只有通過修改動(dòng)態(tài)綁定的style對(duì)象,才能對(duì)其進(jìn)行修改
代碼如下:
<template> <div :style="squareStyle"> </div> </template> <script setup> import {onMounted, ref} from 'vue' const squareStyle = ref() onMounted(() => { //第一個(gè)樣式是天空藍(lán)圓形 squareStyle.value = { width: '200px', height: '200px', backgroundColor: 'skyblue', border: '5px dotted blue', borderRadius: '110px' } //第二個(gè)樣式是黃綠方塊 squareStyle.value = { width: '300px', height: '300px', backgroundColor: 'greenyellow', border: '5px dashed green' } }) </script>
結(jié)果展示:
修改的樣式會(huì)把前一次的樣式整個(gè)覆蓋掉(上面的borderRadius屬性不見了),這是需要注意的地方
四、【級(jí)聯(lián)樣式優(yōu)先級(jí)順序】復(fù)習(xí)
這邊我們復(fù)習(xí)一下關(guān)于CSS樣式賦值的【級(jí)聯(lián)樣式優(yōu)先級(jí)順序】
下面代碼展示三種級(jí)聯(lián)樣式的類型:外聯(lián)式樣式、內(nèi)聯(lián)式樣式、內(nèi)嵌式樣式
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>級(jí)聯(lián)樣式測(cè)試</title> <!-- 在head標(biāo)簽里用link標(biāo)簽引入的樣式文件為【外聯(lián)式樣式】 --> <link rel="stylesheet" href="CSS.css" rel="external nofollow" type="text/css"> <!-- 在head標(biāo)簽里的style標(biāo)簽為【內(nèi)聯(lián)式樣式】 --> <style> .circle { /* 這邊我們用background-color(背景顏色)來做級(jí)聯(lián)優(yōu)先級(jí)測(cè)試 */ /* 加上【 !important 】最高優(yōu)先級(jí)關(guān)鍵字來進(jìn)行標(biāo)注和比較 */ background-color: greenyellow !important; /* 內(nèi)聯(lián)式樣式的背景顏色為【黃綠色】 */ } </style> </head> <body> <!-- 在元素標(biāo)簽中,style屬性代表級(jí)聯(lián)樣式類型中的【內(nèi)嵌式樣式】 --> <div class="circle" style="width: 200px; background-color: skyblue !important; /* 內(nèi)嵌式樣式的背景顏色為【天空藍(lán)】 */ height: 200px;border: 5px blue dashed; border-radius: 110px"> </div> <script> </script> </body> </html>
注:IE6瀏覽器不支持【 !important 關(guān)鍵字 】
【外聯(lián)式樣式】的 CSS.css 文件內(nèi)容如下:
/* 外聯(lián)式樣式中,背景顏色為【深粉色】 */ .circle { background-color: deeppink !important; }
頁面效果展示:
我們來標(biāo)記一下三個(gè)樣式級(jí)別在頁面中圓形的CSS背景顏色:
- 內(nèi)嵌式樣式: 天空藍(lán)
- 內(nèi)聯(lián)式樣式: 黃綠色
- 外聯(lián)式樣式: 深粉色
所以這邊展示后得到的結(jié)果說明最高級(jí)別的樣式為: 【 內(nèi)嵌式樣式 】
【級(jí)聯(lián)樣式優(yōu)先級(jí)順序】測(cè)試結(jié)果如下圖所示:
五、總結(jié)
實(shí)際上,動(dòng)態(tài)綁定style的優(yōu)先級(jí)是大于對(duì)style樣式進(jìn)行修改的
這邊項(xiàng)目上有時(shí)候代碼多了,可能忘了某個(gè)樣式動(dòng)態(tài)綁定過就給它通過style修改了樣式
發(fā)現(xiàn)不生效,這時(shí)候排查問題就會(huì)發(fā)現(xiàn)它已經(jīng)有動(dòng)態(tài)綁定的值了
所以才寫了這篇來加深記憶和幫助一下遇到同樣問題的朋友
到此這篇關(guān)于Vue3中動(dòng)態(tài)修改樣式與級(jí)聯(lián)樣式優(yōu)先順序的文章就介紹到這了,更多相關(guān)Vue3動(dòng)態(tài)修改樣式與級(jí)聯(lián)樣式優(yōu)先順序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用element-ui table expand展開行實(shí)現(xiàn)手風(fēng)琴效果
這篇文章主要介紹了使用element-ui table expand展開行實(shí)現(xiàn)手風(fēng)琴效果,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03vue實(shí)現(xiàn)文字轉(zhuǎn)語音功能詳解
這篇文章主要介紹了vue實(shí)現(xiàn)文字轉(zhuǎn)語音功能詳解的相關(guān)資料,需要的朋友可以參考下2022-09-09vue導(dǎo)出excel和echart圖形分別在不同工作表的實(shí)現(xiàn)方法
這篇文章主要給大家介紹了如何使用vue實(shí)現(xiàn)導(dǎo)出excel和echart圖形分別在不同工作表,文中有詳細(xì)的代碼示例供大家參考,對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2023-10-10cesium開發(fā)之如何在vue項(xiàng)目中使用cesium,使用離線地圖資源
這篇文章主要介紹了cesium開發(fā)之如何在vue項(xiàng)目中使用cesium,使用離線地圖資源問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04Vue中登錄驗(yàn)證成功后保存token,并每次請(qǐng)求攜帶并驗(yàn)證token操作
這篇文章主要介紹了Vue中登錄驗(yàn)證成功后保存token,并每次請(qǐng)求攜帶并驗(yàn)證token操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-09-09