@Extend是SASS的功能,允許類彼此共享一組屬性。 SASS中@Extend class的選擇器將在其延伸的類旁邊包含其選擇器,從而導致逗號分隔的列表。
>用法
在上面的示例中,我定義了.foo和.bar,它們具有以下功能:
使用@extend
正如我們在上面的示例中所看到的。 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中使用多個類名來處理這種情況。
>我們的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</span> class<span>="candy strawberry-candy"</span>></span> </span> This is the strawberry candy! <span><span><span></div</span>></span></span>案例3:擴展複雜的選擇器
類選擇器並不是唯一可以擴展的東西。我們還可以將復雜的選擇器擴展到一個元素中,例如:懸停,.parentClass.ChildClass等。例如:
然後我們可以在HTML中使用的
>:<span><span><span><div</span> class<span>="candy strawberry-candy sugar-free-candy free-candy"</span>></span> </span> This is just an example <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</span> class<span>="strawberry-candy"</span>></span> </span> This is the very sweet candy! <span><span><span></div</span>></span></span>>瀏覽上面的示例,我們可以通過@Extend看到繼承的幾個優勢。這些包括:
>
從我的角度來看,在製作好產品時,我們不僅要考慮最終用戶的觀點,而且還要考慮我們開發策略的質量。因此,@Extend幫助我們在每個HTML元素中以更乾淨的方式構造我們的課程。
的重複 在Web開發中,我們在CSS樣式中始終有一些重複。因此,重複使用書面CSS源代碼可能是非常必要的。 @Extend可以幫助我們在適當且更清潔的情況下重複使用CSS。
節省時間和精力>開發人員可以將CSS重複使用各種元素,減少找到CSS問題根本原因並使CSS結構良好而乾淨的工作所需的精力。
的危險
>我已經在自己的項目中應用@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中的錯誤? 🎜>當您嘗試在SASS中使用@Extend之外使用@Extend時,會發生此錯誤。為避免此錯誤,請確保您在規則集中使用@Extend。例如,您不應該寫“ @extend .class;”,而應寫入.new-class {@extend .class; }。但是,重要的是要注意,@Extend只會擴展偽級的樣式,而不是偽級本身。這意味著,如果您使用“ @extend:hover;”,它不會為選擇器添加懸停效果,而是會擴展:懸停偽class的樣式。
中工作,您的@Extend無法在SASS中工作的原因有很多。一個常見的原因是,您要擴展的選擇器不存在於同一文件中。另一個原因可能是您試圖在媒體查詢或嵌套規則中擴展選擇器,而Sass不允許進行選擇。確保檢查這些要點,如果您的@Extend不起作用。
以上是通過@Extend在SASS中的繼承的好處的詳細內容。更多資訊請關注PHP中文網其他相關文章!