如果你深入地使用过 Sass,那么一定会接触过 mixin。一个独立的 mixin 往往聚合了大量的控制指令来实现复杂的功能。
在本文中我们就将这些控制指令和表达式做一些讲解和实践。也许你在开发中不见得会用到它们,但是熟悉一下这些指令,可能会有意想不到的收获!
if()
if() 是 Sass 的一个内建函数,与之相似的 @if 则是一个内建指令。if() 用来做条件判断并返回特定值,示例如下:
@mixin test($condition) { $color: if($condition, blue, red); color:$color}.firstClass { @include test(true);}.secondClass { @include test(false);}
编译结果:
.firstClass { color: blue;}.secondClass { color: red;}
在上例中,if() 函数内的三个参数分别代表:测试条件,测试成功返回值,测试失败返回值(除了 false 和 null 之外的所有测试条件都被视为测试成功)。如果使用数字作为上述示例的条件,同样会返回测试成功的值:
.firstClass { @include test(1);}
@if
@if 后跟一个表达式,如果表达式的结果为 true,则返回特定的样式,示例如下:
@mixin txt($weight) { color: white; @if $weight == bold { font-weight: bold;}}.txt1 { @include txt(none);}.txt2 { @include txt(bold);}
编译结果:
.txt1 { color: white;}.txt2 { color: white; font-weight: bold;}
此外,我们可以使用 @if ... @else if ... @else 结构来处理多个条件,示例如下:
@mixin txt($weight) { color: white; @if $weight == bold { font-weight: bold;} @else if $weight == light { font-weight: 100;} @else if $weight == heavy { font-weight: 900;} @else { font-weight: normal;}}.txt1 { @include txt(bold);}.txt2 { @include txt(light);}.txt3 { @include txt(heavy);}.txt4 { @include txt(none);}.txt5 { @include txt(normal)}
编译结果:
.txt1 { color: white; font-weight: bold;}.txt2 { color: white; font-weight: 100;}.txt3 { color: white; font-weight: 900;}.txt4 { color: white; font-weight: normal;}.txt5 { color: white; font-weight: normal;}
这里的.txt4 和 .txt5 是用来向各位演示 @if 的解析机制。在 .txt1 中,如果不传入 bold,那么就不会生成 font-weight 相关的样式。
@for
@for 指令常用于循环输出。@for 有两种使用方式:from start through end 和 from start to end,两者的区别在于,前者遍历的范围是 [start, end], 而后者的遍历范围是 [start, end-1]。在 @for 循环中使用一个固定变量来替代遍历到的元素。如果你想实现从大到小的遍历,只需让 start 大于 end 即可。下面是 @for 的一个简单示例:
@for $i from 1 through 4 { .col-#{$i} { width: 100/4 * $i + %;}}
使用上面的这个例子,我们可以创建一套简单的栅格系统,编译结果如下:
.col-1 { width: 25%;}.col-2 { width: 50%;}.col-3 { width: 75%;}.col-4 { width: 100%;}
从上面的示例中,我们综合了 Sass 的循环、变量、计算等多重功能。
@each
@each 指令同样可以用于循环输出,和 @for 的差别在于,@each 通过遍历 list 或者 map 实现循环输出:
@each $usr in bob, john, bill, mike { .#{$usr}-avatar { background-image: url('/img/#{$usr}.png'); }}
@each 后面的 $usr 变量用于保存每次遍历到的元素,然后使用差值语法(#{var})来拼接正确的图片路径,编译结果如下:
.bob-avatar { background-image: url("/img/bob.png");}.john-avatar { background-image: url("/img/john.png");}.bill-avatar { background-image: url("/img/bill.png");}.mike-avatar { background-image: url("/img/mike.png");}
如果遍历的对象是一个 map,那么我们就可以使用两个变量来存储元素的 key 和 value,示例如下:
$ppl: ( usr1:bob, usr2:john, usr3:bill, usr4:mike );@each $key, $usr in $ppl { .#{$usr}-avatar { background-image: url('/img/#{$usr}.png'); }}
此外,针对多个列表的遍历,我们也可以使用多个参数来保存相应的元素:
$alt: alert, yellow, red;$sub: submit, white, green;$bck: back, blue, transparent;@each $type, $txt, $back in $alt,$sub,$bck { .#{$type}-button { color: $txt; background-color: $back; }}
编译结果如下:
.alert-button { color: yellow; background-color: red;}.submit-button { color: white; background-color: green;}.back-button { color: blue; background-color: transparent;}
@while
@while 指令也可以用于循环输出,它后面跟一个表达式,如果表达式结果为 false,则停止循环体。下面使用 @while 来重写上述的 @for 示例:
$x:1;@while $x < 13 { .col-#{$x} { width: 100/12 * $x;} $x: $x + 1;};
在上面的示例中,我们用一个表达式来控制 @while 指令的执行,表达式中有一个变量 $x,该变量一方面用于插值计算,另一方面在循环体内执行累加,最终当 $x
总结
Sass 的诸多特性让前端开发变得无比轻松,虽然 Sass 中的指令很强大,但是如果不是构建一个大象框架,往往并不能感觉到其中的美妙。随着对 Sass 的了解越来越深入,总有一天你会用到这些指令的 ^_^。
译者:南北英文原文:Sass Basics: Control Directives and Expressions译文地址:http://www.w3cplus.com/preprocessor/sass-basics-control-directives-expressions.html

本文討論了html&lt; datalist&gt;元素,通過提供自動完整建議,改善用戶體驗並減少錯誤來增強表格。Character計數:159

本文討論了HTML&lt; Progress&gt;元素,其目的,樣式和與&lt; meter&gt;元素。主要重點是使用&lt; progress&gt;為了完成任務和LT;儀表&gt;對於stati

本文討論了HTML&lt; meter&gt;元素,用於在一個範圍內顯示標量或分數值及其在Web開發中的常見應用。它區分了&lt; meter&gt;從&lt; progress&gt;和前

本文討論了視口元標籤,這對於移動設備上的響應式Web設計至關重要。它解釋瞭如何正確使用確保最佳的內容縮放和用戶交互,而濫用可能會導致設計和可訪問性問題。

本文討論了&lt; iframe&gt;將外部內容嵌入網頁,其常見用途,安全風險以及諸如對象標籤和API等替代方案的目的。

本文討論了使用HTML5表單驗證屬性,例如必需的,圖案,最小,最大和長度限制,以直接在瀏覽器中驗證用戶輸入。

本文解釋了HTML5&lt; time&gt;語義日期/時間表示的元素。 它強調了DateTime屬性對機器可讀性(ISO 8601格式)的重要性,並在人類可讀文本旁邊,增強Accessibilit


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

Dreamweaver Mac版
視覺化網頁開發工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),