Scss中的指令@import、@media、@extend 繼承、@mixin、@include


Sass 支持所有的 CSS3 @-Rules,以及 Sass 特有的 “指令”(directives)

1.@import

@import 的功能,允許其導入 SCSS 或 Sass 文件。被導入的文件將合並編譯到同一個 CSS 文件中,另外,被導入的文件中所包含的變量或者混合指令 (mixin) 都可以在導入的文件中使用。

通常,@import 尋找 Sass 文件並將其導入,但在以下情況下,@import 僅作為普通的 CSS 語句,不會導入任何 Sass 文件。

  • 文件拓展名是 .css
  • 文件名以 http:// 開頭;
  • 文件名是 url()
  • @import 包含 media queries。

如果不在上述情況內,文件的拓展名是 .scss 或 .sass,則導入成功。沒有指定拓展名,Sass 將會試着尋找文件名相同,拓展名為 .scss 或 .sass 的文件並將其導入。

@import "foo.scss";

@import "foo";

都會導入文件 foo.scss

2. @media

.sidebar {
  width: 300px;
  @media screen and (orientation: landscape) {
    width: 500px;
  }
}

編譯為

.sidebar {
  width: 300px; 
}
@media screen and (orientation: landscape) {
  .sidebar {
    width: 500px; 
  } 
}

@media 的 queries 允許互相嵌套使用,編譯時,Sass 自動添加 and

@media screen {
  .sidebar {
    @media (orientation: landscape) {
      width: 500px;
    }
  }
}

編譯為

@media screen and (orientation: landscape) {
  .sidebar {
    width: 500px; 
   } 
}

@media 甚至可以比如變量,函數,以及運算符,代替條件的名稱或者值:

$media: screen;
$feature: -webkit-min-device-pixel-ratio;
$value: 1.5;

@media #{$media} and ($feature: $value) {
  .sidebar {
    width: 500px;
  }
}

編譯為

@media screen and (-webkit-min-device-pixel-ratio: 1.5) {
  .sidebar {
    width: 500px; 
  } 
}

 3. @extend 繼承

 Sass 將一個選擇器下的所有樣式繼承給另一個選擇器

這個非常好用,通常會有兩個類選擇器的樣式基本相同,第二個只是比第一個選擇器多點樣式,原來的方案要么寫兩遍,要么在一個html標簽上寫兩個選擇器。

使用 @extend 可以避免上述情況

.error {
  border: 1px #f00;
  background-color: #fdd;
}
.seriousError {
  @extend .error;
  border-width: 3px;
}

編譯后

.error, .seriousError { border: 1px #f00; background-color: #fdd; }

.seriousError { border-width: 3px; }

Class 選擇器並不是唯一可以被延伸 (extend) 的,Sass 允許延伸任何定義給單個元素的選擇器,比如 .special.coola:hover 或者 a.user[href^="http://"]

 

同 class 元素一樣,a:hover 的樣式將繼承給 .hoverlink

.hoverlink {
  @extend a:hover;
}
a:hover {
  text-decoration: underline;
}

編譯為

a:hover, .hoverlink {
  text-decoration: underline; 
}

4.定義混合指令 @mixin

混合指令(Mixin)用於定義可重復使用的樣式,避免了使用無語意的 class,比如 .float-left。混合指令可以包含所有的 CSS 規則,絕大部分 Sass 規則,甚至通過參數功能引入變量,輸出多樣化的樣式。

混合指令的用法是在 @mixin 后添加名稱與樣式,比如名為 large-text 的混合通過下面的代碼定義:

@mixin large-text {
  font: {
    family: Arial;
    size: 20px;
    weight: bold;
  }
  color: #ff0000;
}

混合也需要包含選擇器和屬性,甚至可以用 & 引用父選擇器:

@mixin clearfix {
  display: inline-block;
  &:after {
    content: ".";
    display: block;
    height: 0;
    clear: both;
    visibility: hidden;
  }
  * html & { height: 1px }
}

5. 引用混合樣式 @include

使用 @include 指令引用混合樣式,格式是在其后添加混合名稱,以及需要的參數(可選):

.page-title {
  @include large-text;
  padding: 4px;
  margin-top: 10px;
}

編譯為

.page-title {
  font-family: Arial;
  font-size: 20px;
  font-weight: bold;
  color: #ff0000;
  padding: 4px;
  margin-top: 10px; 
}

也可以在最外層引用混合樣式,不會直接定義屬性,也不可以使用父選擇器。

@mixin silly-links {
  a {
    color: blue;
    background-color: red;
  }
}
@include silly-links;

編譯為

a {
  color: blue;
  background-color: red; 
}

混合樣式中也可以包含其他混合樣式,比如

@mixin compound {
  @include highlighted-background;
  @include header-text;
}
@mixin highlighted-background { background-color: #fc0; }
@mixin header-text { font-size: 20px; }

混合樣式中應該只定義后代選擇器,這樣可以安全的導入到文件的任何位置

參數用於給混合指令中的樣式設定變量,並且賦值使用。在定義混合指令的時候,按照變量的格式,通過逗號分隔,將參數寫進圓括號里。引用指令時,按照參數的順序,再將所賦的值對應寫進括號:

@mixin sexy-border($color, $width) {
  border: {
    color: $color;
    width: $width;
    style: dashed;
  }
}
p { @include sexy-border(blue, 1in); }

編譯為

p {
  border-color: blue;
  border-width: 1in;
  border-style: dashed; 
}

混合指令也可以使用給變量賦值的方法給參數設定默認值,然后,當這個指令被引用的時候,如果沒有給參數賦值,則自動使用默認值:

@mixin sexy-border($color, $width: 1px) {
  border: {
    color: $color;
    width: $width;
    style: dashed;
  }
}
p { @include sexy-border(blue); }
h1 { @include sexy-border(blue, 2px); }

編譯為

p {
  border-color: blue;
  border-width: 1px;
  border-style: dashed; 
}

h1 {
  border-color: blue;
  border-width: 2px;
  border-style: dashed; 
}

混合指令也可以使用關鍵詞參數,上面的例子也可以寫成:

p { @include sexy-border($color: blue); }
h1 { @include sexy-border($color: blue, $width: 2in); }

雖然不夠簡明,但是閱讀起來會更方便。關鍵詞參數給函數提供了更靈活的接口,以及容易調用的參數。關鍵詞參數可以打亂順序使用,如果使用默認值也可以省缺,另外,參數名被視為變量名,下划線、短橫線可以互換使用。

 

參數變量 

有時,不能確定混合指令需要使用多少個參數,比如一個關於 box-shadow 的混合指令不能確定有多少個 'shadow' 會被用到。這時,可以使用參數變量  聲明(寫在參數的最后方)告訴 Sass 將這些參數視為值列表處理:

@mixin box-shadow($shadows...) {
  -moz-box-shadow: $shadows;
  -webkit-box-shadow: $shadows;
  box-shadow: $shadows;
}
.shadows {
  @include box-shadow(0px 4px 5px #666, 2px 6px 10px #999);
}

編譯為

.shadowed {
  -moz-box-shadow: 0px 4px 5px #666, 2px 6px 10px #999;
  -webkit-box-shadow: 0px 4px 5px #666, 2px 6px 10px #999;
  box-shadow: 0px 4px 5px #666, 2px 6px 10px #999;
}

參數變量也可以用在引用混合指令的時候 (@include),與平時用法一樣,將一串值列表中的值逐條作為參數引用:

@mixin colors($text, $background, $border) {
  color: $text;
  background-color: $background;
  border-color: $border;
}
$values: #ff0000, #00ff00, #0000ff;
.primary {
  @include colors($values...);
}

編譯為

.primary {
  color: #ff0000;
  background-color: #00ff00;
  border-color: #0000ff;
}

 

基本也就這些常用,如果發現錯誤解決不了,我的建議就是以前你怎么寫的css你就怎么寫肯定沒錯。當然有空去探個真相才是王道。 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM