国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

詳解源碼vue3的樣式穿透scope

這篇具有很好參考價值的文章主要介紹了詳解源碼vue3的樣式穿透scope。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

vue3在打包之后只有一個html文件,為了避免樣式污染可以為style標簽引入scope屬性,它的原理十分簡單,它會為每一個dom元素都添加一個data屬性,這個屬性是不重復的,然后會在當前組件的選擇器的末尾,追加一個屬性選擇器,當兩者匹配上時,會把樣式命中到dom上

scope渲染規(guī)則:

1.每個dom元素會自帶一層data

2.當前組件的選擇器會追加一個屬性選擇器來保證一一對應

3.當一個組件引入另一個組件時,scope的唯一data屬性只會添加到最外層標簽

vue3 樣式穿透,vue,前端,javascript,html

此時,我們就在backstage這個單文件組件里引入elementplus的組件,我們觀察一下此時data屬性的位置?

vue3 樣式穿透,vue,前端,javascript,html

發(fā)現(xiàn)只有最外層的div有data屬性?

vue3 樣式穿透,vue,前端,javascript,html

現(xiàn)在我們有一個需求,把邊框的白線給去掉?

打開調試工具可知我們需要選中截圖紅框的元素并修改其css屬性

vue3 樣式穿透,vue,前端,javascript,html

?如果我們做出如下修改

vue3 樣式穿透,vue,前端,javascript,html

?vue3 樣式穿透,vue,前端,javascript,html

發(fā)現(xiàn)頁面并沒有變化,原因就在于container這個容器是由一層data的,此時的屬性選擇器是被加到了el-table_cell后面,我們并沒有命中到container,所以樣式不生效

做出如下修改

vue3 樣式穿透,vue,前端,javascript,html

?我們再觀察此時頁面的情況

vue3 樣式穿透,vue,前端,javascript,html

?發(fā)現(xiàn)此時的屬性選擇器被追加到了container后,此時我們就成功命中父級元素container,后面操作它的子元素樣式就可以順利生效。所以這個:deep()深度選擇器就干了一件事情,deep寫在誰后面,就會把data屬性選擇器追加到誰后面

使用樣式穿透后可以寫的更優(yōu)雅一點

vue3 樣式穿透,vue,前端,javascript,html

?文章來源地址http://www.zghlxwxcb.cn/news/detail-771637.html

現(xiàn)在我們來看看他的源碼

vue3源碼在此

vue3 樣式穿透,vue,前端,javascript,html

scope的具體實現(xiàn)在compiler-src里,這個文件主要就是用于處理后綴名.vue的單文件組件的,

這里寫了三個解析器分別解析template標簽、script標簽、style標簽

vue3 樣式穿透,vue,前端,javascript,html?這里觀察到會首先判斷是否開啟scope屬性,如果有,則會往postcss plugin 里添加一個插件,

vue3 樣式穿透,vue,前端,javascript,html

我們點進去看看這個插件具體做了什么事情

vue3 樣式穿透,vue,前端,javascript,html

?發(fā)現(xiàn)這個插件主要是將css轉化成AST,有點類似babel,babel主要操作就是將高階es6語法先轉義成AST,得到這么一個樹之后我們就可以隨意操作它的節(jié)點,甚至做一些定制化的操作

我們點進processRule

vue3 樣式穿透,vue,前端,javascript,html

它首先先聲明了一個弱集合processeRules,然后判斷rule是否存在,這里的rule是AST,如果有,就return出去,如果沒有就往里面添加AST

vue3 樣式穿透,vue,前端,javascript,html

然后會遍歷這個AST,為每個item都調了rewirteSelector 這個函數

我們再看看這個函數

vue3 樣式穿透,vue,前端,javascript,html

首先判斷我們所使用的深度選擇器,如果是vue2的這兩種,就不給我們做樣式穿透并彈出警告,我們接著往下看

?首先還是會判斷類型,類型pseudo如下

vue3 樣式穿透,vue,前端,javascript,html

?然后再判斷我們的深度選擇器是否符合vue3規(guī)范,如果符合,則幫我們做樣式穿透,實現(xiàn)的方式其實就是挪動下屬性選擇器的追加位置,第三個框框就是挪動的實現(xiàn)vue3 樣式穿透,vue,前端,javascript,html

?觀察這里的挪動

vue3 樣式穿透,vue,前端,javascript,html

?

到了這里,關于詳解源碼vue3的樣式穿透scope的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • CSS樣式穿透技巧:利用scoped與deep實現(xiàn)前端組件樣式隔離與穿透

    一、什么是scoped 在vue文件中的style標簽上,有一個特殊的屬性:scoped。 當一個style標簽擁有scoped屬性時,它的CSS樣式就只能作用于當前的組件,通過該屬性,可以使得組件之間的樣式不互相污染。 二、scoped的原理 為組件實例生成一個唯一標識,給組件中的每個標簽對應的d

    2024年04月10日
    瀏覽(22)
  • 前端UI庫樣式穿透問題解決

    前端UI庫樣式穿透問題解決

    文章目錄 隨著前端框架的興起,程序員是越來越懂得利用工具,各種層出不窮的前端UI組件庫應運而生,大大減少了程序員對于制作頁面需要花費的時間,把時間更專注于業(yè)務的邏輯開發(fā),但是應該定制好的組件庫固然方便,但是這樣大家就會開到千篇一律的組件,高度定制

    2024年02月09日
    瀏覽(13)
  • 【尚醫(yī)通】vue3+ts前端項目開發(fā)筆記 2 —— 創(chuàng)建項目、封裝網絡請求、集成elment-plus 、重置樣式、準備狀態(tài)管理/路由 等開發(fā)前準備

    【尚醫(yī)通】vue3+ts前端項目開發(fā)筆記 2 —— 創(chuàng)建項目、封裝網絡請求、集成elment-plus 、重置樣式、準備狀態(tài)管理/路由 等開發(fā)前準備

    服務器地址:http://syt.atguigu.cn 醫(yī)院接口:http://139.198.34.216:8201/swagger-ui.html 公共數據接口:http://139.198.34.216:8202/swagger-ui.html 會員接口:http://139.198.34.216:8203/swagger-ui.html 短信驗證碼接口:http://139.198.34.216:8204/swagger-ui.html 訂單接口:http://139.198.34.216:8206/swagger-ui.html 文件上傳接口:

    2024年02月13日
    瀏覽(19)
  • 【vue3】13-前端路由-Vue-Router的詳解: 從入門到掌握

    【vue3】13-前端路由-Vue-Router的詳解: 從入門到掌握

    路由其實是網絡工程中的一個術語: 在 架構一個網絡 時,非常重要的兩個設備就是 路由器和交換機 。 當然,目前在我們生活中 路由器 也是越來越被大家所熟知,因為我們生活中都會用到 路由器 : 事實上, 路由器 主要維護的是一個 映射表 ; 映射表 會決定數據的流向; 路由

    2024年02月09日
    瀏覽(58)
  • vue 3 第二十六章:樣式(scoped及樣式穿透)

    vue 3 第二十六章:樣式(scoped及樣式穿透)

    在 Vue 中,我們可以使用 scoped 特性來給組件的樣式添加作用域。通過為組件的 style 標簽添加 scoped 特性,我們可以確保組件的樣式僅應用于該組件的模板中,而不會影響其他組件或全局樣式。 在上面的例子中, .example 類的樣式只會應用于該組件的模板中,而不會影響其他組

    2024年02月06日
    瀏覽(36)
  • 帶你玩轉 ui 框架 ——scoped及樣式穿透問題詳解

    帶你玩轉 ui 框架 ——scoped及樣式穿透問題詳解

    前言 在我們前端的開發(fā)中經常會使用到各種 ui 框架 下面這兩個是比較火的,也是我常用的兩個ui框架。 問題描述 但是在使用框架的時候難免會遇到需要改變組件中的一些樣式,當然如果我們所有頁面的組件樣式都是統(tǒng)一的話,我們可以進行全局設置樣式,但是如果我們僅僅

    2023年04月21日
    瀏覽(22)
  • Vue3淺談:(三)Vue3類與樣式綁定

    目錄 一、Vue3?Class 綁定 1.Vue3?Class 綁定基礎 綁定對象: 綁定數組 二、Vue3 Style?綁定 1.Vue3?Style? 綁定基礎 綁定對象: 綁定數組: 自動前綴?: 樣式多值: 數據綁定的一個常見需求場景是操縱元素的 CSS class 列表和內聯(lián)樣式。我們可以使用? v-bind ?將它們和動態(tài)的字符串綁定

    2024年02月02日
    瀏覽(20)
  • Vue3動態(tài)樣式

    Vue3動態(tài)樣式

    我們準備一個簡單的 Vue3 項目,并寫兩個頁面: Home : About 頁面: 效果如下: 記得添加路由。添加好之后,我們點擊加1按鈕,看看會發(fā)生什么? 首先來看下我們做的事情: 我們定義了幾個響應式數據,其中有個 colorRef ,它會根據 count 變量是奇數還是偶數來改變顏色。 我

    2024年02月02日
    瀏覽(30)
  • 前端開發(fā)攻略---從源碼角度分析Vue3的Propy比Vue2的defineproperty到底好在哪里。一篇文章讓你徹底弄懂響應式原理。

    前端開發(fā)攻略---從源碼角度分析Vue3的Propy比Vue2的defineproperty到底好在哪里。一篇文章讓你徹底弄懂響應式原理。

    Vue的響應式到底要干什么? 無非就是要知道當你 讀取 對象的時候,要知道它讀了。要做一些別的事情 無非就是要知道當你 修改 對象的時候,要知道它改了。要做一些別的事情 所以要想一個辦法, 把讀取和修改的動作變成一個函數 ,讀取和修改的時候分別調用對應的函數

    2024年04月17日
    瀏覽(35)
  • vue3-類與樣式綁定

    Class 與 Style 綁定 class 和 style 都是 attribute,我們可以和其他 attribute 一樣使用 v-bind 將它們和動態(tài)的字符串綁定。 Vue 專門為 class 和 style 的 v-bind 用法提供了特殊的功能增強。除了字符串外,表達式的值也可以是對象或數組。 綁定class :class (v-bind:class 的縮寫) 傳遞一個對象來

    2024年01月19日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包