2012-10-18 34 views
0

我剛開始第一次使用SCSS。我注意到,由此產生的CSS比我手寫的CSS要少一些。例如,我使用的混入樣式重複,像這樣:SCSS結構與多個CSS類

@mixin button { 
    border-radius: 4px 20px 20px 4px; 
    -moz-border-radius: 4px 20px 20px 4px; 
} 
.enquire { 
    .live-chat { 
     @include button; 
     background: #21a649; 
    } 
    .enquire-now { 
     @include button; 
     background: #33b1ff; 
    } 
} 

然後,所有我需要的按鈕是單級,「查詢 - 現在」,所有的風格都包括在一個類CSS。

如果我手寫這一點,但是,我會用2類,像這樣:

.button { 
    border-radius: 4px 20px 20px 4px; 
    -moz-border-radius: 4px 20px 20px 4px; 
} 
.enquire .live-chat { 
    background: #21a649; 
} 
.enquire .enquire-now { 
    background: #33b1ff; 
} 

然後在元素上,使用「按鈕查詢,現在」

因此,通過使用mixin,我將HTML中使用的類最小化,並使其編寫愉快,但是使我的實際CSS文件更長!這似乎有些反作用......我錯過了什麼?

mixins有什麼意義,如果採用舊式的方式,實際上會生成一個較小的CSS文件?

+0

在除了下面給出的答案,我只想說,當你想傳遞參數/選項時,mixin是最有用的。如果你不這樣做,那麼@extend可能是減少重複的最佳選擇。 –

回答

4

使用@extend指令有更易於維護的代碼,並防止款式重複:

%button { 
    border-radius: 4px 20px 20px 4px; 
    -moz-border-radius: 4px 20px 20px 4px; 
} 
.enquire { 
    .live-chat { 
     @extend %button; 
     background: #21a649; 
    } 
    .enquire-now { 
     @extend %button; 
     background: #33b1ff; 
    } 
} 

哪個編譯成這樣:

.enquire .live-chat, .enquire .enquire-now { 
border-radius: 4px 20px 20px 4px; 
-moz-border-radius: 4px 20px 20px 4px; 
} 
.enquire .live-chat { 
background: #21a649; 
} 
.enquire .enquire-now { 
background: #33b1ff; 
} 
+0

啊,完美,謝謝!我看到@extend在另一個課程上使用,但沒有看到%部分。 – zenkaty

+0

@extend非常棒,只是經常檢查一下,以免意外膨脹。 –

1

它是一個權衡。你可以用eaiser編寫更易維護的CSS,因爲它更冗長。而且正如我最近發現的那樣,在IE中有這樣一件令人討厭的事情,那就是你不能在一個CSS文件中包含多於一定數量的選擇器,然後它對CSS文件的數量也有限制。因此,對於大型網站來說,我們的選擇器計數可能會比文件的大小更重要。特別是因爲您可以通過縮小並然後提供壓縮(gzipped)版本來緩解文件大小問題。

+0

好的,謝謝。只是不確定我是否有正確的概念。我會繼續這樣,我們會看看它是如何發展:)謝謝! – zenkaty

+0

如果使用'@ extend',則不必更加冗長,特別是使用'@ extend'選擇器(%)時更是如此。看到我的答案。 – bookcasey