搜尋
首頁web前端css教學通過@Extend在SASS中的繼承的好處

通過@Extend在SASS中的繼承的好處

鑰匙要點

  • 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的選擇器將在其延伸的類旁邊包含其選擇器,從而導致逗號分隔的列表。 >

它的語法看起來像:

>用法

通過@Extend在SASS中的繼承的好處使用@extend看起來像:

這是:

>

在上面的示例中,我定義了.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元素中以更乾淨的方式構造我們的課程。 >

降低CSS

的重複 在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中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
揭開屏幕讀取器的神秘面紗:可訪問的表格和最佳實踐揭開屏幕讀取器的神秘面紗:可訪問的表格和最佳實踐Mar 08, 2025 am 09:45 AM

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

將框陰影添加到WordPress塊和元素將框陰影添加到WordPress塊和元素Mar 09, 2025 pm 12:53 PM

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

使用GraphQL緩存使用GraphQL緩存Mar 19, 2025 am 09:36 AM

如果您最近開始使用GraphQL或審查了其優點和缺點,那麼您毫無疑問聽到了諸如“ GraphQl不支持緩存”或

使您的第一個自定義苗條過渡使您的第一個自定義苗條過渡Mar 15, 2025 am 11:08 AM

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

優雅且酷的自定義CSS捲軸:展示櫃優雅且酷的自定義CSS捲軸:展示櫃Mar 10, 2025 am 11:37 AM

在本文中,我們將深入研究滾動條。我知道,這聽起來並不魅力,但請相信我,一個精心設計的頁面是齊頭並進的

展示,不要說展示,不要說Mar 16, 2025 am 11:49 AM

您花多少時間為網站設計內容演示文稿?當您撰寫新的博客文章或創建新頁面時,您是在考慮

使用Redwood.js和Fauna構建以太坊應用使用Redwood.js和Fauna構建以太坊應用Mar 28, 2025 am 09:18 AM

隨著最近比特幣價格超過20k美元的攀升,最近打破了3萬美元,我認為值得深入研究創建以太坊

NPM命令是什麼?NPM命令是什麼?Mar 15, 2025 am 11:36 AM

NPM命令為您運行各種任務,無論是一次性或連續運行的過程,例如啟動服務器或編譯代碼。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SecLists

SecLists

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

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

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

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具