為什麼 Tailwind CSS 在 Angular 元件的 SCSS 檔案中不起作用?
Tailwind CSS 是一種實用優先的 CSS 框架,它透過使用大量預定義的類來簡化樣式化過程,這些類可以直接應用於 HTML。但是,當與 Angular 元件的 SCSS 檔案一起使用時,有時會出現問題,尤其是在 Tailwind CSS 預設情況下並非設計為匯入到單個元件樣式中時。本文探討了 Tailwind CSS 在 Angular 元件 SCSS 檔案中無法正常工作的主要問題,並提出瞭解決相關問題的方案。
目錄
Tailwind CSS 在 Angular 元件的 SCSS 檔案中不起作用可能有多種原因;我們已經涵蓋了所有這些原因。
Tailwind CSS 全域性生效,而非按元件
Tailwind CSS 通常在應用程式中全域性使用。當您將 Tailwind 匯入 Angular 專案時,應該只匯入一次,最好是在全域性樣式表中,例如 `styles.scss` 或 `styles.css`。全域性匯入允許實用程式類在整個 Angular 應用程式中可用。
解決方案
透過在 `src/styles.scss` 檔案中全域性匯入 Tailwind CSS,使其在 Angular 中有效使用。
tailwind base; tailwind components; tailwind utilities;
此配置使所有 Tailwind 實用程式在整個應用程式中可用。通常,您無需將 Tailwind 匯入到各個元件的 SCSS 檔案中,因為 Angular 也會將全域性樣式應用於元件的模板。
Angular 元件樣式預設情況下是封裝的
Angular 元件利用檢視封裝將樣式隔離到各個元件。在沒有任何配置的情況下,Angular 會將唯一的屬性選擇器附加到每個元件的 HTML 元素和樣式,以防止它們洩漏到應用程式的其他部分。這可能導致在元件的 SCSS 檔案內部忽略全域性定義的 Tailwind 類。
Angular 的三種封裝模式
- **模擬(預設):**樣式的作用域限定在元件內,但全域性樣式仍然會被應用。
- **無:**完全沒有封裝,因此全域性樣式會應用於元件。
- **Shadow DOM:**使用 Shadow DOM v1 規範來提供嚴格的樣式封裝。
解決方案
如果您需要 Tailwind 實用程式影響特定元件但遇到問題,可以在該元件的 TypeScript 檔案中簡單地將 `ViewEncapsulation` 設定為 `None`。
import { Component, ViewEncapsulation } from "@angular/core"; Component({ selector: "app-example", templateUrl: "./example.component.html", styleUrls: ["./example.component.scss"], encapsulation: ViewEncapsulation.None, }); export class ExampleComponent {}
這將刪除封裝,因此可以直接在元件內應用 Tailwind 類。但是,此方法應謹慎使用,因為它可能導致元件之間的樣式衝突。
SCSS 檔案中無法識別 Tailwind 類
這也可能是 Tailwind CSS 在 Angular 元件的 SCSS 檔案中不起作用的原因:Tailwind 類不會自動在元件內部找到的 SCSS 檔案中可用。Tailwind CSS 的類是透過 PostCSS 外掛建立的,需要使用 `@apply` 指令才能從 SCSS 或 CSS 檔案中使用它們。但 `@apply` 指令僅在某些設定下有效,因此在 Angular 的情況下,它的 SCSS 編譯預設情況下不會找到它。
解決方案
透過直接在元件的 HTML 模板中使用 Tailwind CSS 類來應用它們,而不是使用 SCSS 檔案,因為 SCSS 的相容性可能很困難。
使用 PostCSS 在 SCSS 中配置 Tailwind CSS
如果您要在 SCSS 檔案內部使用 Tailwind 的 `@apply` 指令,有時您需要修改 Angular 構建配置以允許對 Tailwind 的 CSS 程式碼進行後處理。在您的專案根目錄中,如果缺少 `postcss.config.js` 檔案,則需要新增它。
tailwindcss: {}, autoprefixer: {}, }, };
然後,確保您的 Angular 專案已配置為處理此 PostCSS 設定。這可能需要額外的配置,具體取決於您的 Angular 版本和構建設定。
缺少 Tailwind 指令或配置錯誤
有時,Tailwind CSS 不起作用是由於缺少指令或配置錯誤。Tailwind 需要某些指令(`@tailwind base`、`@tailwind components`、`@tailwind utilities`)來載入其樣式。
解決方案
確保您已在全域性 `styles.scss` 檔案中正確匯入了 Tailwind 指令。如果您沒有這樣做,Tailwind 的樣式將無法在您的 Angular 元件中使用。
tailwind base; tailwind components; tailwind utilities;
仔細檢查您的 Tailwind 配置檔案(`tailwind.config.js`),以確保它包含所有 Angular 元件模板的正確路徑。`tailwind.config.js` 中的 `content` 陣列應包含 Angular 元件的路徑,以便 Tailwind 掃描它們並生成相應的 CSS。
module.exports = { content: ["src{html,ts}"], theme: { extend: {}, }, plugins: [], };
快取問題
也許在您的某個配置中,一些 Tailwind 更改不會反映出來;好吧,也許問題源於在 Angular 構建快取中無法識別的樣式快取。
解決方案
您必須重新啟動並清除 Angular 的快取才能使上述過程成為可能。您必須使用“ng stop”停止伺服器。之後,您可以執行 ng serve–force 命令
ng serve --force
上述命令強制 Angular 使用最新的 Tailwind 更新重新編譯您的專案。