鑰匙要點
- SASS的@Extend功能允許類互相共享屬性,簡化了CSS樣式表的組織,並使大型網站更易於風格。 > @Extend功能可以減少CSS樣式表中的重複,並使HTML類清潔,節省開發人員的時間和精力,並使CSS結構更有條理,更易於維護。 但是,在使用@Extend時,請謹慎行事,因為它可以大大提高CSS文件大小和影響性能,如果不小時使用。僅當繼承類直接與所繼承的對象相關時,才應使用它。 SASS是對CSS的寶貴擴展,可以使其更清潔,結構良好且易於開發和維護。建議那些以前從未嘗試過的人,但應仔細地使用它以避免潛在的陷阱。
- 組織CSS樣式表對於有效地設計大型網站已經至關重要,但是我們項目中的樣式表越來越大,更複雜,更難維護。這是Sass來使所有內容變得更簡單的地方。
- 對於尚未探索Sass的人來說,這是CSS的擴展。它為我們提供了本機CS中不存在的功能,例如表達式,變量,嵌套,Mixins(Sass的函數名稱),繼承等等。 在本文中,我將使用@Extend概述Sass中的繼承。我將介紹此功能在自己的項目中使用時帶來的優勢和經驗。重要的是要注意,@Extend可能會被濫用,雨果·吉羅(Hugo Giraudel)在Sitepoint上甚至寫了一篇文章,說明了為什麼您應該避免使用Sass @extend。因此請注意,@Extend可能是一個有爭議的主題。 > 觀看Atoz:Sass 通過信函學習薩斯
- 觀看此課程 觀看此課程 在以下示例中,我將使用SCSS語法。這是包含CSS的所有功能和結構的語法,並具有SASS的其他功能。 什麼是@extend?
@Extend是SASS的功能,允許類彼此共享一組屬性。 SASS中@Extend class的選擇器將在其延伸的類旁邊包含其選擇器,從而導致逗號分隔的列表。
>用法

這是:
>在上面的示例中,我定義了.foo和.bar,它們具有以下功能:
- .bar從.foo繼承,包含父級的所有屬性.foo。
- .bar通過添加屬性背景色來擴展.foo。
使用@extend
>用例1:重複
在組合CSS時,很難避免重複類之間的屬性。這可以使您的樣式表更加複雜。例如:
正如我們在上面的示例中所看到的。 farkfast,。 -ornunch和.dinner包含具有相同值的屬性,邊框,盒子陰影,邊距和填充物。這些屬性是重複的,使我們的代碼看起來很混亂,所以讓我們用@Extend重寫:
<span><span>@extend .class-name;</span></span>在上面重寫的CSS中,我們可以看到,使用SASS可以幫助單獨使用SASS更加干淨。
>
請參閱codepen上的SCSS(@sitepoint)中SCSS中屬性的筆複製。<span><span>.foo</span> { </span> <span>color: black; </span> <span>border: 1px solid black; </span><span>} </span> <span><span>.bar</span> { </span> <span><span>@extend .foo;</span> </span> <span>background-color: red; </span><span>}</span>
案例2:將多個類移出HTML
通常在設計一個頁面時,通常會有一個類別具有另一個類的所有樣式的情況。我們經常通過在html中使用多個類名來處理這種情況。
>我們的CSS看起來像:
我們的html for tht css:
<span><span>.foo, .bar</span> { </span> <span>color: black; </span> <span>border: 1px solid black; </span><span>} </span> <span><span>.bar</span> { </span> <span>background-color: red; </span><span>}</span>在上面的示例中,我們的
>
<span><span>.breakfast</span> { </span> <span>color: #333; </span> <span>border: 1px solid #bbb; </span> <span>box-shadow: 1px 1px 0 #ddd; </span> <span>margin: 0 0 10px; </span> <span>padding: 15px; </span><span>} </span> <span><span>.lunch</span> { </span> <span>background-color: yellow; </span> <span>color: #333; </span> <span>border: 1px solid #bbb; </span> <span>box-shadow: 1px 1px 0 #ddd; </span> <span>margin: 0 0 10px; </span> <span>padding: 15px; </span><span>} </span> <span><span>.dinner</span> { </span> <span>background-color: orange; </span> <span>color: #333; </span> <span>border: 1px solid #bbb; </span> <span>box-shadow: 1px 1px 0 #ddd; </span> <span>margin: 0 0 10px; </span> <span>padding: 15px; </span><span>}</span>上面的HTML代碼可能變得非常複雜。一些Web開發人員喜歡這種方式,但是我更喜歡Sass樣式中的繼承:
現在,我們的HTML看起來像:
<span><span>.meal-box</span> { </span> <span>color: #333; </span> <span>border: 1px solid #bbb; </span> <span>box-shadow: 1px 1px 0 #ddd; </span> <span>margin: 0 0 10px; </span> <span>padding: 15px; </span><span>} </span> <span><span>.breakfast</span> { </span> <span><span>@extend .meal-box;</span> </span><span>} </span> <span><span>.lunch</span> { </span> <span><span>@extend .meal-box;</span> </span> <span>background-color: yellow; </span><span>} </span> <span><span>.dinner</span> { </span> <span><span>@extend .meal-box;</span> </span> <span>background-color: orange; </span><span>}</span>這次我們只需要一個類。班級定義的所有樣式也適用於class .strawberry-candy,現在我們的html代碼變得更加干淨。
>請參閱codepen上的@extend(@sitepoint)的pen將多個類移出html。
<span><span>.candy</span> { </span> <span>background-color: black; </span> <span>border: 1px solid red; </span> <span>box-shadow: 1px 1px 0 #ddd; </span> <span>padding: 15px; </span><span>} </span> <span><span>.strawberry-candy</span> { </span> <span>background-color: #ff6666; </span> <span>color: white; </span><span>}</span>>
<span><span><span><div> class<span>="candy strawberry-candy"</span>> This is the strawberry candy! <span><span><span></span></span></span> </div></span>></span></span>案例3:擴展複雜的選擇器
類選擇器並不是唯一可以擴展的東西。我們還可以將復雜的選擇器擴展到一個元素中,例如:懸停,.parentClass.ChildClass等。例如:
這是:
>然後我們可以在HTML中使用的
>:<span><span><span><div> class<span>="candy strawberry-candy sugar-free-candy free-candy"</span>> This is just an example <span><span><span></span></span></span> </div></span>></span></span>>
>請參閱codepen上的@extend(@sitepoint)的@extend的複雜選擇器。
<span><span>.candy</span> { </span> <span>background-color: black; </span> <span>border: 1px solid red; </span> <span>box-shadow: 1px 1px 0 #ddd; </span> <span>padding: 15px; </span><span>} </span> <span><span>.strawberry-candy</span> { </span> <span><span>@extend .candy;</span> </span> <span>background-color: #ff6666; </span> <span>color: white; </span><span>}</span>
@extend
的優勢<span><span><span><div> class<span>="strawberry-candy"</span>> This is the very sweet candy! <span><span><span></span></span></span> </div></span>></span></span>>瀏覽上面的示例,我們可以通過@Extend看到繼承的幾個優勢。這些包括:
清潔器HTML類
正如您在第二個案例研究中可以看到的那樣,在一個元素中使用如此多的類,如果您遇到問題,則很難確定根本原因。 HTML標籤的結構也看起來不太好且乾淨。>
從我的角度來看,在製作好產品時,我們不僅要考慮最終用戶的觀點,而且還要考慮我們開發策略的質量。因此,@Extend幫助我們在每個HTML元素中以更乾淨的方式構造我們的課程。
的重複 在Web開發中,我們在CSS樣式中始終有一些重複。因此,重複使用書面CSS源代碼可能是非常必要的。 @Extend可以幫助我們在適當且更清潔的情況下重複使用CSS。
節省時間和精力有兩個上述優勢,開發人員可以在開發過程中節省時間和精力。
>開發人員可以將CSS重複使用各種元素,減少找到CSS問題根本原因並使CSS結構良好而乾淨的工作所需的精力。
> 但是,使用@Extend並非沒有危險。僅當仔細使用@Extend時,上述優勢僅適用 - 可以過度使用 @extend,從而導致相反的效果。
@extend的危險
>我已經在自己的項目中應用@Extend,使用@Extend時需要謹慎。你必須小心。@Extend可以大大增加您的CSS文件大小,並在不小心使用時會影響CSS的性能。在這樣的情況下,我感到痛苦,花了很多時間重構我的Sass使用@Extend。這是我最初錯誤地使用@Extend的一個示例:
>
>示例:被編譯為:
在此示例中,.base-css是一個基於它的許多繼承類的類。如果您查看示例,您可以看到繼承的類無關。我的按鈕和.btn為我的頁腳提供了.btn。如果我有100個從.BASE-CSS繼承的類,則具有.base-CSS特性的選擇器將增加。這顯著,不必要地使我們的CSS最終結果復雜化。此外,這使得檢查每個選擇器的屬性更加困難。
>
>重新分解我的sass後,我意識到只有在繼承類直接與我們繼承的對像有關時,我們才應該使用@Extend。它應該是對像或樣式的變體,而不是許多無關元素的籠統規則。為了像我上面的示例一樣繼承,我們應該依靠CSS現有的功能將我們的樣式級聯到子元素中。<span><span>@extend .class-name;</span></span>
被編譯為:
<span><span>.foo</span> { </span> <span>color: black; </span> <span>border: 1px solid black; </span><span>} </span> <span><span>.bar</span> { </span> <span><span>@extend .foo;</span> </span> <span>background-color: red; </span><span>}</span>
<span><span>@extend .class-name;</span></span>
>我們可以看到上面的示例更為正確和合理。我們通過僅將@Extend應用於應該彼此繼承的類,從而降低了範圍,這是由於一種類型的對象的變體。例如,以上樣式都與不同類型的按鈕有關。
>結論
SASS是一個有價值的擴展,可以改善我們的CSS,以使其更清潔,結構良好,有條理且易於開發和維護。如果您以前沒有嘗試過Sass,我強烈建議您使用它。當您對Sass的基礎知識更加滿意時,我們建議閱讀Hugo Giraudel的Sitepoinp文章,介紹沒人告訴您Sass的@Extend。我們在SitePoint的Sass參考中也有整個SASS參考指南,並提供大量示例供您探索。
>謝謝史蒂夫(Steve)和以西結(Ezekiel)在該帖子的第一個版本中提出錯誤的評論中,此後已更新。 >通過SASS 中的擴展的繼承的常見問題(常見問題解答)
>在sass中使用@Extend的主要優點是什麼?它使類能夠繼承另一個類的樣式,從而減少了編寫重複代碼的需求。這不僅使代碼更具可讀性,而且還可以減少文件大小,從而可以改善網頁的負載時間。 > @extend與sass的@mixin有何不同? @Extend和@mixin在SASS中允許可重複使用代碼,它們以不同的方式工作。 @Extend允許選擇器繼承另一個選擇器的樣式,而@mixin包含一系列樣式,可以在整個樣式表中重複使用。關鍵區別在於,@extEnd會生成更少的CSS輸出,因為IT將選擇器與相同樣式組合在一起,而@mixin可以導致更多的CSS輸出,因為每次包含它時都會復製樣式。 @Extend在SASS中使用複雜的選擇器? 是的,您可以在sass中使用@Extend使用@Extend。但是,重要的是要注意,@Extend只能與同一文件中存在的選擇器一起使用。它不會與在其他文件或由@mixin或函數生成的選擇中定義的選擇器一起使用。>
為什麼在SASS中使用@Extend在媒體查詢中使用@Extend時,我會遇到錯誤?在SASS中,您不能在媒體查詢中使用@Extend來擴展媒體查詢之外定義的類。這是因為@Extend通過將選擇器與相同樣式組合在一起,並且不能在不同的媒體查詢塊上進行此操作。要解決此問題,您可以定義要在同一媒體查詢塊中擴展的類>我可以在sass中的嵌套規則中使用@extend?但是,重要的是要注意,擴展的選擇器將被插入樣式表的頂級,而不是嵌套規則範圍內。這是因為SASS遵循CSS規則,所有選擇器都必須位於文檔的最高級別。
>>我如何避免“僅在規則中使用擴展指令” SASS中的錯誤? 🎜>當您嘗試在SASS中使用@Extend之外使用@Extend時,會發生此錯誤。為避免此錯誤,請確保您在規則集中使用@Extend。例如,您不應該寫“ @extend .class;”,而應寫入.new-class {@extend .class; }。但是,重要的是要注意,@Extend只會擴展偽級的樣式,而不是偽級本身。這意味著,如果您使用“ @extend:hover;”,它不會為選擇器添加懸停效果,而是會擴展:懸停偽class的樣式。
為什麼我的@extend為什麼是我的@extend不在sass?
中工作,您的@Extend無法在SASS中工作的原因有很多。一個常見的原因是,您要擴展的選擇器不存在於同一文件中。另一個原因可能是您試圖在媒體查詢或嵌套規則中擴展選擇器,而Sass不允許進行選擇。確保檢查這些要點,如果您的@Extend不起作用。
>我可以在sass中使用@Extend嗎?您可以通過用逗號分開課程來做到這一點。例如,“ .new-class {@extend .class1,.class2; }”將擴展.class1和.class2的樣式。 SASS的擴展課。您可以通過在@Extend指令之後定義新樣式來做到這一點。新樣式將覆蓋使用@Extend的選擇器的擴展類樣式。
以上是通過@Extend在SASS中的繼承的好處的詳細內容。更多資訊請關注PHP中文網其他相關文章!

這是我們在形式可訪問性上進行的小型系列中的第三篇文章。如果您錯過了第二篇文章,請查看“以:focus-visible的管理用戶焦點”。在

CSS盒子陰影和輪廓屬性獲得了主題。讓我們查看一些在真實主題中起作用的示例,以及我們必須將這些樣式應用於WordPress塊和元素的選項。

Svelte Transition API提供了一種使組件輸入或離開文檔(包括自定義Svelte Transitions)時動畫組件的方法。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

Atom編輯器mac版下載
最受歡迎的的開源編輯器

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具