Wordpress

Elementor CSS 沒生效?問題不在力道,在特異度

Custom CSS 欄位貼上一段樣式、按下存檔、重新整理前台,畫面卻連一個像素都沒有變。於是把每一行都補上 !important,改到整段宣告看起來像是在硬闖,前台還是佈景主題原本的樣子。

多數人碰到 Elementor CSS 沒生效,第一個反應是「力道不夠」,一路把 !important 疊得越來越滿,卻沒發現這個假設本身就有問題。!important 只解決一種故障:兩條規則互相搶優先權時,讓自己這條無條件勝出。但「沒生效」實際上至少對應四種不同的成因:CSS 根本沒有真的送到瀏覽器(被某一層快取擋住)、CSS 寫在錯的欄位或選錯了選擇器(規則從頭到尾沒選到目標元素)、規則確實送達也選對了元素卻在特異度上輸給另一條規則,還有一種最容易讓人找不到方向,也就是對手也掛了 !important,力道已經打平,接下來比的完全是別的東西。

這篇要做的不是再教一次怎麼在 Custom CSS 欄位打字,而是教怎麼用瀏覽器內建的開發者工具,直接看到自己的規則輸給了誰、輸在哪一個環節,再對症把選擇器寫到剛好贏過對手,而不是繼續加碼賭運氣。先從最容易被誤判成「規則之爭」的假性故障排除起,這一輪確認過後,才進到真正的特異度診斷。

加了 !important 還是被蓋掉,代表問題不是出在力道

多數人碰到這種情況會懷疑,是不是只有自己的網站設定特別奇怪。實際上 WordPress.org 官方支援論壇上至少有兩則獨立提問,處境跟這篇要拆解的一模一樣。一則標題直接寫「theme CSS seems to be loading after custom elementor CSS even with !important」,提問者表示已經清過快取、重新載入 critical CSS,換回預設佈景 Twenty Twenty-One 之後問題就消失,確認出在佈景衝突而不是快取沒清乾淨。另一則提問標題是「Force All Elementor Styles to Load before theme styles」,提問者直言「the only way I can override the default Elementor Styles is to use !important which makes really messy CSS」,同樣是被迫堆 !important 才能過關。

Elementor 官方 GitHub 議題庫的紀錄拉得更久。編號 21342 的議題於 2023 年 2 月開立,標記與 2021 年 7 月開立的 15746 相關,兩則橫跨兩年,描述的都是同一件事,也就是 Elementor 產生的內嵌 CSS 蓋過使用者自訂或佈景主題的 CSS,逼得使用者只能用 !important 硬繞。其中一位提報者甚至在議題裡明講「don’t suggest to use important! as a solution」,等於直接點破 !important 只是治標,不是治本。

這些真實案例指向同一個結論:Elementor CSS 沒生效其實是好幾種故障的統稱。!important 只處理其中一種,也就是兩條規則搶優先權、讓自己這條無條件勝出的情境;剩下三種常見故障,包括 CSS 根本沒送到瀏覽器、CSS 寫在錯的欄位或選錯了選擇器,以及對手也掛了 !important 讓力道打平,加再多 !important 都沒有用。接下來要做的不是找更暴力的寫法,而是先確認自己碰到的是哪一種故障,再對症處理。

殘留的快取與尚未重新產生的 CSS 檔案會偽裝成沒生效

在懷疑是規則互相競爭之前,先排除一種更單純、卻最常被忽略的可能,也就是 CSS 根本沒有真的送到瀏覽器,看起來像沒生效,其實只是舊版畫面還沒被換掉。這一輪排除用不到開發者工具,照 Elementor 官方文件〈Custom CSS not working〉列出的順序做一遍,通常幾分鐘就能確認自己是不是屬於這種情況。

第一步是重新產生 Elementor 自己的 CSS 快取,進到 WordPress 後台的 Elementor 設定裡的工具頁,在 Elementor Cache 欄位按下 Clear Files & Data 再存檔,逼 Elementor 把所有動態產生的 CSS 檔案重新計算一次。第二步是檢查有沒有快取外掛,或伺服器、CDN 層級的快取把舊版頁面鎖住,這些快取跟 Elementor 自己的 CSS 快取是分開的兩層,清了其中一層不代表另一層也乾淨。第三步是清瀏覽器自己的快取,或直接打開私密瀏覽視窗檢查,用私密視窗的另一個理由是避免看到管理員身分才有的即時預覽版面,那個版面不一定等於真正的訪客看到的前台。

第四步是把佈景主題暫時換成 WordPress 內建的預設佈景,例如 Twenty Twenty-One 測試,如果換了佈景問題就消失,代表故障確實出在原本的佈景主題,需要往佈景本身去查,而不是繼續在 Elementor 這一側加碼。第五步是留意頁面上是不是同時用了不只一種頁面編輯器或版面外掛,多個編輯器疊加在同一個頁面時,後載入的那個可能覆蓋掉 Elementor 建立的內容,這種情況的做法是把已經做好的頁面存成範本,再到新頁面用「新增範本」把它插進去,繞開兩個編輯器互搶版面的邊界情況。

這五步走完一輪之後,才有把握說這不是檔案沒更新的問題。值得留意的是,這份 Elementor 官方文件從頭到尾沒有提到特異度,也沒有提到怎麼用開發者工具判斷規則是不是被別的規則蓋過,那正是接下來幾節要補的部分。

三個 Custom CSS 欄位的優先順序與 selector 關鍵字陷阱

排除快取問題之後,下一步是確認 CSS 真的寫在對的地方、選到對的元素。Elementor 本身提供三層可以填寫 Custom CSS 的欄位,範圍從整個網站到單一元素都有,彼此之間有內建的優先順序;另外 Elementor 還準備了一個叫 selector 的佔位字,方便直接針對某個元素寫 CSS,但這個字只在特定欄位才有作用,用錯地方等於選擇器完全沒選到任何東西,外觀上跟被佈景蓋過幾乎分不出來,成因卻完全不同,得先排除掉。

網站、頁面、元素三層級的覆蓋順序

Elementor 官方文件〈Custom CSS in Elementor〉用一組範例把三層說得很具體。在「網站設定」的 Custom CSS 分頁寫 body { background: red; },全站背景都會變紅;換到某一頁的「頁面設定」寫 body { background: blue; },那一頁的背景會是藍色,官方原文特別註明「This page-level CSS overrides any site-level CSS settings, so even if you used the site CSS described above, this page would still have a blue background」;再進到那一頁某個元素的「進階」分頁寫 #my-element { background: green; },這個元素就會是綠色,官方原文同樣寫著「This CSS overrides any site-level or page-level CSS」。整理起來,Elementor 官方明講的優先順序是元素層級最高,頁面層級居中,網站層級最低。

Elementor 三層 Custom CSS 欄位的優先順序,範圍越小的元素層級優先度最高,網站層級最低
同一個屬性衝突時,範圍越小的欄位優先度越高,寫在網站層級的規則贏不過元素層級的規則。

把這個順序對照自己實際寫的欄位,通常能立刻抓到問題。如果目標是改單一按鈕的顏色,卻把 CSS 寫在網站層級,範圍最小、優先度最高的還是另一個頁面或元素層級的規則,寫在網站層級那條當然贏不了。心法很簡單,範圍越小的欄位優先度越高,先確認自己寫的那段 CSS 是不是放對了層級,比急著加 !important 有效得多。

selector 這個字只在元素層級的欄位有效

selector 是 Elementor 專門為元素層級的 Custom CSS 設計的一個佔位字。在某個元素的進階分頁展開 Custom CSS,輸入 selector { border: solid red; },Elementor 存檔時會自動把 selector 換成這個元素實際對應的容器,等於幫忙省下去挖 Elementor 內部類別名稱的功夫。Elementor 官方文件〈CSS selectors in Elementor〉說這個機制「simplifies the process of creating selectors」,也列出三種基礎選擇器可以搭配使用,分別是 HTML 元素、CSS Class、CSS ID,依情境挑合適的寫法。

但同一個 selector 字如果貼到頁面層級或網站層級的欄位,Elementor 不會做任何替換,瀏覽器只會把它當成一個真實不存在的 CSS Class 去找,等於這條規則完全沒有選到任何東西。外觀上這跟規則被蓋過幾乎一樣,都是畫面沒有變化,但成因完全不同:一個是選對了元素、輸給了特異度;一個是根本沒選到任何元素。

更值得注意的是,Elementor 官方自己的教學〈Use selector In the custom CSS tab〉裡也示範過一次類似的特異度僵局,只是這次陷入僵局的並不是 selector 佔位字本身。教學先示範用 selector .elementor-button { background-color: #ffff00; } 就直接把按鈕改成黃色,沒有掛 !important;但接著改用使用者自訂的 CSS Class(範例取名 so-yellow)取代 selector,寫成 .so-yellow .elementor-button { background-color: #ffff00; },卻踩了坑——原文寫著「You’ll notice that the button’s purple color does NOT change」,一路到改成 .so-yellow .elementor-button { background-color: #ffff00 !important; } 才成功。連 Elementor 官方教學都示範過同一條規則因為選擇器寫法不同而一贏一輸,這裡對付的還是 Elementor 自己產生的元件樣式,範圍可控,贏家早就知道;跟佈景主題對戰時範圍不可控,才需要接下來要教的診斷方式。

特異度看的不是選擇器長度,是 IDCLASSTYPE 三欄加總

排除掉快取與欄位選錯之後,如果 CSS 確實送到了瀏覽器、也選對了元素,畫面卻還是沒變,接下來要處理的就是真正的規則之爭,也就是瀏覽器判斷兩條互相衝突的規則要聽誰的,靠的是特異度。MDN 官方文件對特異度的定義是:每一個選擇器可以拆成三欄分別計算,依序是 IDCLASS(含屬性選擇器與虛擬類別)、TYPE(含虛擬元素),寫成「ID-CLASS-TYPE」的形式,比較時由左到右逐欄比大小,只要前面的欄位分出高下,後面欄位無論多少都不影響結果。

MDN 給的計分規則很具體:每個 ID 選擇器加 1-0-0;每個 class、屬性選擇器(像 [type="radio"])、虛擬類別(像 :hover:nth-of-type())加 0-1-0;每個 HTML 元素選擇器與虛擬元素(像 ::before)加 0-0-1;萬用選擇器 * 則是 0-0-0,完全不影響特異度。文件用一個實例證明特異度比的不是字數多寡:#myElement { color: green; } 只有一欄有數字,卻會贏過看起來複雜很多的 .bodyClass .sectionClass .parentClass [id="myElement"] { color: yellow; },因為第一欄 ID 的數量不同時,後面 CLASS 欄再高也沒有用。

CSS 特異度把選擇器拆成 ID、CLASS、TYPE 三欄逐欄比大小,#myElement 的 1-0-0 贏過看似複雜的 0-4-0 選擇器
特異度比的不是選擇器長度,而是 ID、CLASS、TYPE 三欄由左到右逐欄比較,第一欄分出高下後面就不看了(資料來源:MDN)。

還有兩個判斷順序時常被忽略。第一,行內樣式,例如元素上直接寫 style="color: red;",權重比任何選擇器都高,MDN 官方文件寫著「Inline styles added to an element… always overwrite any normal styles in author stylesheets」,並把這種權重形容為 1-0-0-0,等於自動排在所有 CSS 選擇器前面,官方也明講「The only way to override inline styles is by using !important」。第二,如果兩條規則的特異度完全打平,MDN 的規則是原始碼裡宣告在後面的那一條生效,這代表就算兩邊特異度一樣,CSS 檔案載入的先後順序也會決定輸贏。這三欄計分、由左到右比大小的規則,是後面用開發者工具診斷時要對照的判準。

Styles 面板用刪除線標出被覆蓋的宣告

知道特異度怎麼計算之後,不必自己動手心算,Chrome 內建的開發者工具會直接把結果攤開來給你看,不用另外安裝任何外掛。第一步是打開自己寫的那條規則實際生效的元素,點右鍵選擇「檢查」,切到 Styles 面板,找到自己在 Custom CSS 裡寫的那條規則。

Chrome 官方開發者文件對這個面板的定義是「The Styles pane crosses out properties that are overridden by other properties according to the Cascading order」,文件舉的例子是元素上的行內樣式 width: 300px; 會覆蓋某個 class 上的 width: 100%,在面板裡呈現方式就是那一行被劃了一道線。只要自己寫的那條規則在 Styles 面板裡出現刪除線,就代表它確實存在、確實被瀏覽器讀到了,只是在層疊順序中輸給了另一條規則,這時候就能直接對照上一節的特異度判斷法,去看是輸在哪一欄。

Chrome 官方文件也提醒一個容易混淆的地方:畫面上除了「輸給另一條規則」的刪除線,還有另外三種不同成因的訊號要分清楚。顏色變淡顯示,代表這個選擇器根本沒有比對到目前檢查的元素,或是這個屬性因為其他規則而完全無效;斜體文字,代表這條宣告來自瀏覽器內建的 user agent stylesheet 這類無法編輯的來源,跟規則輸贏無關;帶警告圖示的宣告,則代表屬性名稱或屬性值本身寫錯、無效。值得留意的是,無效的屬性同樣會被劃上刪除線並附上警告圖示,所以真正該看的判斷依據是有沒有警告圖示,而不是單看有沒有刪除線。看到刪除線但沒有警告圖示,才是純粹輸給另一條規則的特異度訊號;只要看到警告圖示,就要回頭檢查選擇器或屬性值本身寫錯了什麼。

Computed 面板依特異度排序列出贏過你的規則

Styles 面板只告訴你這條規則輸了,真正告訴你贏的是哪一條、贏在哪裡的是 Computed 面板。切到這個面板,在搜尋欄輸入自己在意的 CSS 屬性名稱,例如 colorbackground-color,面板會列出這個元素最終實際套用的值,旁邊有一個小三角可以展開,看到所有曾經試圖影響這個屬性的規則清單。

Chrome 官方開發者文件說明這份清單的排序邏輯,原文寫著「For properties with multiple sources, the Computed pane shows the Cascade winner first」,也就是清單最上面那一條,就是瀏覽器最終真正套用的規則,其餘排在後面的都是輸家。展開清單時勾選「顯示全部」,還能看到繼承自父層元素、以及瀏覽器預設值這些平常被隱藏的來源,把整條判斷鏈補齊。找到贏家規則之後,接下來要做的不是繼續在自己的規則上加 !important,而是去看那條贏家規則的選擇器長什麼樣子、特異度落在哪一欄,才知道自己該寫多精準的選擇器才贏得過它。

開發者工具的 Styles 面板用刪除線標出被覆蓋的宣告,Computed 面板把層疊順序中勝出的規則排在清單最上面
Styles 面板的刪除線代表這條宣告輸給了另一條規則,Computed 面板則把真正套用的贏家排在最上面,不必自己心算特異度(示意圖,仿 Chrome 開發者工具)。

點進連結可以跳到規則所在的檔案與行數

Computed 面板列出的每一條規則旁邊都附了它的原始出處,點下去可以直接跳到 Sources 面板,定位到那條規則實際寫在哪一個檔案的第幾行。這一步能確認贏家規則是誰寫的:如果檔案路徑指向佈景主題本身的 CSS 檔,代表問題確實出在佈景層級;如果指向的是快取外掛合併過的整合檔案,代表某個快取層還沒清乾淨,得回頭補做前面〈殘留的快取〉那一節的排除步驟。

知道贏家規則實際寫在哪個檔案,也能判斷這條規則未來會不會隨佈景更新而改變。如果贏家規則是佈景主題核心檔案裡的樣式,代表每次佈景更新都可能重新載入同一條規則,自己的 Custom CSS 選擇器一旦寫得夠精準、能穩定贏過它,往後就不必每次更新都重新檢查一遍;如果贏家規則是另一個外掛動態產生的,就要留意那個外掛日後版本更新是否會改變選擇器本身。

兩條規則都掛 !important,比的仍是特異度與先後順序

前面幾節處理的都是自己的規則沒掛 !important、對手的規則也沒掛的情境,但最容易讓人停在這一步的是另一種,也就是自己已經在 Custom CSS 裡加了 !important,前台看起來卻還是原本的樣子。這通常代表對手那條規則,多半是佈景主題本身,很多佈景為了保護自己按鈕、標題的預設樣式,本來就在關鍵選擇器上掛了 !important,也掛了同樣的標記。

MDN 官方文件對這種雙方都掛 !important 的情境講得很明確,原文寫著「If declarations from the same origin and cascade layer conflict and one property value has the !important flag set, the important declaration is applied no matter the specificity. When conflicting declarations from the same origin and cascade layer with the !important flag are applied to the same element, the declaration with a greater specificity is applied」。換句話說,!important 這個標記只在跟沒有掛 !important 的規則對戰時無腦獲勝;一旦雙方都掛,!important 本身就被打平,瀏覽器退回去比正常的特異度,跟完全沒人用 !important 時的判斷邏輯一模一樣。如果連特異度都相同,才輪到原始碼裡宣告在後面的那條勝出。

兩條規則都掛 !important 時 !important 互相打平,退回比特異度、特異度相同再比宣告順序決定輸贏
!important 只在對手沒掛時無腦獲勝,雙方都掛就被打平、退回比特異度,特異度也相同才看宣告順序(資料來源:MDN)。

這代表繼續往自己的規則堆疊更多 !important 解決不了跟另一個 !important 的對抗,只會讓兩邊的 CSS 都更難維護,未來更難追蹤是誰蓋過誰。MDN 也直接把這種做法定性為不良實踐,官方原文寫著「Using !important to override specificity is considered a bad practice and should be avoided for this purpose. Understanding and effectively using specificity and the cascade can remove any need for the !important flag」。真正該做的是回到上一節教的方法,用 Computed 面板看清楚對手那條掛了 !important 的規則,特異度落在哪一欄,再寫一條特異度更高、或持平但宣告在後面的規則。

選擇器夠精準就不必再依賴 !important

前面幾節已經示範怎麼用 Computed 面板看到贏家規則的完整選擇器與特異度分數,接下來就是寫一條特異度剛好贏過贏家規則、卻不必依賴 !important 的選擇器,而不是繼續往自己的規則上加碼賭運氣。

MDN 官方文件給出的建議做法,原文列了三種:「Increase the specificity of the selector of the formerly !important declaration so that it is greater than other declarations」,把原本想靠 !important 覆蓋的那條規則,選擇器特異度提高到大於對手;或是「Give it the same specificity and put it after the declaration it is meant to override」,讓兩條規則的特異度打平,靠宣告順序在後面的優勢勝出。實作上,對照前面提過的 Elementor 官方教學示範,與其去猜測 Elementor 自動產生的內部元素 ID,改用元素層級 Custom CSS 加上 selector 佔位字,直接指定到子元素本身,例如 selector .elementor-button { ... },選擇器天生只作用在這一個元素,範圍收得夠窄,通常不需要額外堆疊特異度或 !important 去對抗其他不相關的元素。

!important 該留給哪一種情境?MDN 也講得很清楚,唯一真的無法用特異度贏過的對手是行內樣式屬性,因為行內樣式的權重本來就高於任何一般選擇器,只有 !important 能贏過它。除了這一種情境,其他跟另一條外部 CSS 規則的對抗,都應該優先靠選擇器精準度去贏,而不是把 !important 當成預設的解法。

切回 Internal Embedding,等於重新請回同一種特異度衝突

前面幾節教的是怎麼在既有的架構下打贏一場特異度的仗,這節要講一個更根本的現象。內嵌樣式贏過外部樣式檔的特異度問題,不是使用者自己想像出來的陰謀論,而是 Elementor 工程團隊自己踩過、公開寫進版本更新紀錄裡的真實案例。

Elementor 官方開發者部落格的〈Elementor 3.24 Developers Update〉說明,Elementor 曾經在一項名為「Improved CSS Loading」的實驗中,依 widget 的 CSS 檔案大小決定載入方式:檔案小於 8kb 就用內嵌的 <style> 標籤載入,大於 8kb 才用外部的 <link> 標籤載入。後續官方自己承認這個做法出了問題,原文寫著「users reported that it caused CSS specificity issues, as styles in <style> tags have higher specificity over external styles loaded using <link> tags」,也就是內嵌的 <style> 標籤天生比外部 <link> 載入的樣式特異度更高,逼得使用者被迫用 !important 才能覆蓋。官方因此在 Elementor 3.24 版放棄了這個依檔案大小切換的策略,原文寫明「as of Elementor 3.24, widgets’ CSS files will be loaded using external link tags only」——這正好對應前面提到的兩則 GitHub 議題 21342 與 15746 多年來的回報內容,證明這是官方公開承認、跨版本存在過的真實架構問題,不是自己寫錯 CSS。

「CSS Print Method」這個設定本身並沒有被拿掉,效能頁裡仍看得到 External File 與 Internal Embedding 兩個選項。但 Elementor 官方知識庫的〈Dealing with flickers/FOUC〉目前的立場已經轉向:官方 FAQ 明講「Setting the CSS Print Method to Internal Embedding can create conflicts with site caching mechanisms and degrade overall performance, particularly on complex websites」,直接把切成內嵌列為不建議的做法,改推薦用 Page Transitions、進場動畫,或是調整快取外掛把 Elementor CSS 排除在延遲載入之外來處理閃爍。這跟 3.24 版放棄依檔案大小切換內嵌樣式是同一個方向:只要手動把 CSS Print Method 切回 Internal Embedding,都是在重新請回同一種特異度衝突,未來若又碰到 Elementor CSS 沒生效,第一件事就該回頭檢查這個設定有沒有被切回外部檔案,也就是官方目前的預設值 External File。

用穩定的自訂類別取代 Elementor 自動產生的元素 ID

前面每一節教的都是已經遇到問題之後怎麼用工具找出原因,收尾前的這一節談預防,與其每次改版都要重新打開開發者工具抓一次贏家規則,不如從一開始就把 CSS 選擇器建立在不會變動的基礎上。

Elementor 官方文件〈CSS classes in Elementor〉的做法是先選取要命名的元素,在「進階」分頁的「CSS Classes」欄位輸入一個自訂的類別名稱,這個 class 可以重複套用在多個元素上。文件示範搭配網站層級的 Custom CSS 統一控制這個 class 的樣式,例如 .change-color { color: green; },日後只要改這一處,所有套用同一個 class 的元素都會一起變動。

這個做法跟前面 MDN 對特異度的建議是同一條路,也就是把選擇器建立在單一穩定的自訂 class 上,計分只落在 CLASS 那一欄,也就是 0-1-0,而不是依賴 Elementor 自動產生、可能因為複製元素或重新整理頁面結構而改變的內部元素 ID。長期下來,常改的樣式集中寫在網站層級、對著這個固定的 class,不必散落在各個元素層級的欄位裡各寫一份,也不必每次改版都重新打一場特異度的仗。

!important 從來不是一個可以無限加碼的按鈕,它只在跟沒有掛同樣標記的規則對戰時才無腦獲勝,一旦對手也掛了它,勝負又回到最原始的特異度與宣告順序。與其把每一行 CSS 都疊上這四個字碰運氣,不如打開瀏覽器內建的開發者工具,直接看清楚自己的規則被誰蓋過、贏家又是憑什麼贏,這幾分鐘的診斷通常比重寫十次選擇器更快找到答案。往後再碰到 Elementor CSS 沒生效,也能少走一段先懷疑力道不夠、後來才發現問題出在別處的彎路。

常見問答

本區問答由 AI 依文章內容自動整理,僅供快速參考,正式內容仍以全文為準。

Elementor CSS 沒生效可能有哪些成因?

Elementor CSS 沒生效至少有四種成因:CSS 沒送到瀏覽器被快取擋住、CSS 寫錯欄位或選錯選擇器、規則送達也選對元素卻在特異度上輸了,或對手掛了 !important 讓力道打平。多加 !important 只能解決其中一種。

Elementor 三層 CSS 欄位優先順序是什麼?

範圍越小的欄位優先度越高:元素層級的 Custom CSS 優先度最高,頁面層級居中,網站層級最低。同一屬性起衝突時,元素層級寫的規則會蓋過頁面與網站層級寫的同一屬性,CSS 寫錯層級,優先度再低都贏不了。

CSS 特異度怎麼拆成三欄計算?

特異度依序拆成 ID、CLASS、TYPE 三欄:每個 ID 選擇器加 1-0-0,每個 class、屬性選擇器或虛擬類別加 0-1-0,每個 HTML 元素選擇器加 0-0-1,由左到右比大小,前面欄位分出高下,後面欄位就不影響結果。

Computed 面板怎麼看出贏家規則?

在 Computed 面板搜尋欄輸入屬性名稱,展開清單後最上面那一條就是層疊順序中真正勝出、瀏覽器實際套用的規則,其餘排在後面的都是輸家,點進去還能跳到規則實際寫在哪個檔案的第幾行,確認贏家是佈景主題還是外掛產生的樣式。

兩條規則都掛 !important 時比的是什麼?

雙方都掛 !important 時這個標記本身會被打平,瀏覽器退回去比正常的特異度,跟完全沒人用 !important 時的判斷邏輯一樣;如果連特異度都相同,才輪到原始碼裡宣告在後面的那一條規則勝出。

資料來源
  1. theme CSS seems to be loading after custom elementor CSS even with !important — WordPress.org
  2. Force All Elementor Styles to Load before theme styles — WordPress.org
  3. Improved CSS Loading is loaded inline and breaks the cascade due to higher specificity (Related to #15746) · Issue #21342 · elementor/elementor — GitHub
  4. Issue #15746 · elementor/elementor — GitHub
  5. Custom CSS not working — Elementor
  6. Custom CSS in Elementor — Elementor
  7. CSS selectors in Elementor — Elementor
  8. Use selector In the custom CSS tab — Elementor
  9. Specificity - CSS — MDN
  10. Find invalid, overridden, inactive, and other CSS — Chrome
  11. Elementor 3.24 Developers Update — Elementor
  12. Dealing with flickers/FOUC — Elementor
  13. CSS classes in Elementor — Elementor