2015-10-05 62 views
-2

我原來的代碼已被大量修改和基於簡化與它的當前版本是一個建議的解決方案:媒體查詢是否可以嵌套在SCSS mixin中構建出使用列表的類似類?

// List of properties for each class 
@mixin property($list) { 
    padding-top: nth($list, 1); 
    padding-bottom: nth($list, 2); 
    font-size: nth($list, 3); 
    line-height: nth($list, 4); 
    } 

// Function to build each class 
@mixin build($element, $device, $type) { 
    $i: 10; 
    @each $list in $type { 
     .#{$element}-#{$device}-#{$i} { 
      @include property($list); 
      } 
      $i: $i + 5; 
     } 
    } 

// Type list values 
$paragraph: (
    (5px, 5px, 15px, 20px), // 10 
    (7px, 8px, 20px, 30px), // 15 
    (8px, 7px, 30px, 35px) // 20 
); 

// Extra small devices 
@include build('p', 'xs', $paragraph); 

// Small devices 
@media (min-width: 768px) { 
    @include build('p', 'sm', $paragraph); 
    } 

// Medium devices 
@media (min-width: 992px) { 
    @include build('p', 'md', $paragraph); 
    } 

// Large devices 
@media (min-width: 1200px) { 
    @include build('p', 'lg', $paragraph); 
    } 

// Extra large devices 
@media (min-width: 1460px) { 
    @include build('p', 'xl', $paragraph); 
    } 

與所有的媒體查詢斷點和設備大小前綴(xssmmd等),如上所示,有必要將這些媒體查詢嵌套到@mixin build中,或者這是優雅且簡潔的,因爲此想法的代碼可以得到嗎?

更大的想法是,我想利用所有這一切與另一組值不同的列表。另一套類應該建立:@include build('h', $heading);

+0

您的代碼似乎可以正常工作,但您尚未發現需要解決的實際問題。對於基於「優雅」或「更好」等模糊描述的通用代碼改進/重構,這不是合適的位置。請參閱:http://meta.stackoverflow.com/questions/295665/are-dry-questions-on-topic – cimmanon

回答

1

我做了重構以前的答案和解決方案應該看起來像這樣。我也改變了一下你的@mixin dimension。粘貼這個和它玩一下。另外我建議通過Sass文檔。很多想法都來自它;)

@mixin dimension($list) { 
    padding-top: nth($list, 1); 
    padding-bottom: nth($list, 2); 
    font-size: nth($list, 3); 
    line-height: nth($list, 4); 
} 

$valueSet: (
    (5px, 5px, 15px, 20px), 
    (7px, 8px, 20px, 30px), 
    (8px, 7px, 25px, 35px) 
); 

@mixin build($string, $list){ 
    $i: 10; 
    @each $a in $list { 
     .p-#{$string}-#{$i} { 
      @include dimension($a); 
     } 
     $i: $i + 5; 
    } 
} 

@include build('xs', $valueSet); 

@media (min-width: 768px) { 
    @include build('sm', $valueSet); 
} 

@media (min-width: 992px) { 
    @include build('md', $valueSet); 
} 

這應該爲你打造它。我會指出這是更少的代碼,但需要注意清楚下次訪問CSS時發生了什麼。

+0

感謝您的迴應!是的,在我和Sass玩了整整兩天的時間之後,我還沒有遇到類似於你的建議的事情,我也不知道可以嵌套mixins。真的很酷。現在我將如何利用您對媒體查詢斷點的建議?另外,爲了讓編譯器知道將變量的值插入到類名中,是否需要'#{}'?有沒有辦法用一個mixin函數來構建所有的類? – spunge

+0

我沒有編輯我的答案給你。一探究竟。我認爲這應該是你正在尋找的。你也需要'#{}'來讓Ruby理解你的想法。玩的開心。 – sperovic

+0

再次感謝您的回覆以及對您的建議解決方案的重構!它幫助我瞭解了SCSS,並幫助我儘可能地提出了自己的想法。說了這些,我已經修改了我的問題,以反映您的重構解決方案,其中一些變量和函數的名稱已更改。我的問題也被擱置了,所以我試圖縮小它的範圍。 – spunge

相關問題