整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          CSS預處理語言Sass入門

          CSS預處理語言Sass入門

          . 引言

          CSS3之前的CSS都大都是枚舉屬性樣式,而編程語言強大的變量、函數、循環、分支等功能基本都不能在CSS中使用,讓CSS的編程黯淡無光,Sass就是一種增強CSS編程的擴展語言(CSS4也可以期待),有了像Sass這種預處理語言后,CSS的編程不再局限在枚舉屬性了,可以有更廣闊的舞臺。

          2. Sass的原理

          Sass本質就是在CSS的語法的基礎上增加了自定義的變量、循環、分支、函數、mixin、繼承、運算等功能,讓CSS編程變得異常強大。

          當然瀏覽器是不認識Sass語法。開發人員寫完了Sass的語法文件后需要通過工具轉成原始的CSS代碼。

          //sass 代碼
          //-------------------------------
          $fontSize: 12px;
          body{ 
           font-size:$fontSize;
          }
          // 通過工具將上面的sass代碼可以轉成下面的CSS代碼↓↓↓
          //css 代碼
          //-------------------------------
          body{ 
           font-size:12px;
          }

          3. Sass的編譯環境

          Sass代碼的編譯轉換工具可以用sass命令行工具、gulp、開發工具插件、webpack等。

          我推薦大家學習階段直接用開發工具的插件自動生成即可。如果你是在項目階段使用,那肯定有自動化的流程構建工具比如:gulp、webpack都有對應的插件或者loader,直接對應配置即可。

          老馬推薦vscode的自動編譯Sass文件的插件:Live Sass Compiler

          使用方法:

          • 第一步: 用vscode打開scss文件。

          • 第二步:ctrl+shift+pmac ctrl→command輸入sass選擇入下圖選項

          4. Sass的兩種文件后綴

          sass有兩種后綴名文件:一種后綴名為sass,語法要求不使用大括號和分號;另一種就是我們這里使用的scss文件,這種和我們平時寫的CSS文件格式差不多,使用大括號和分號。

          //文件后綴名為sass的語法
          body
           background: #eee
           font-size:12pxp
           background: #0982c1
          //文件后綴名為scss的語法 
          body {
           background: #eee; 
           font-size:12px;
          }
          p{ 
           background: #0982c1;
          }

          老馬推薦使用scss文件后綴及使用括號和分號的編寫方式。

          5. Sass中的變量和注釋

          5.1 定義變量及使用

          Sass的變量必須是$開頭,后面緊跟變量名,而變量值和變量名之間就需要使用冒號(:)分隔開(就像CSS屬性設置一樣)。

          $a-color: blue; // 定義變量。
          .box { 
           color: $a-color; //=> blue 使用變量
          }

          用vscode插件轉換一下試試?

          5.2 局部變量和全局變量。

          變量支持塊級作用域,嵌套規則內定義的變量只能在嵌套規則內使用(局部變量),不在嵌套規則內定義的變量則可在任何地方使用(全局變量)。將局部變量轉換為全局變量可以添加 !global 聲明。

          //sass style
          //-------------------------------
          $a-color: blue; // 全局變量
          .box { 
           $a-color: red; // 局部變量,box內部不使用。
           color: $a-color; //=> red 局部變量
          }
          .child { color: $a-color; //=> blue 全局變量
           $main-width: 16em !global; // 在局部定義全局的變量。
          }
          .main { 
           width: $main-width; // 使用在內部定義的全局變量。
          }
          /*===============生成的CSS代碼===================*/
          .box { 
           color: red;
          }
          .child { 
           color: blue;
          }
          .main { 
           width: 16em;
          }

          從以上代碼中也可以看到Sass支持CSS的注釋/**/之外還支持雙斜線的注釋: //

          5.3 特殊變量

          如果變量作為CSS屬性或在某些特殊情況下等則必須要以 #{$variables}形式使用。

          //sass style
          //-------------------------------
          $side: top;
          .box { 
           border-#{$side}: 1px solid #09c;
          }
          //css style
          //-------------------------------
          .box { 
           border-top: 1px solid #0098cc;
          }

          6. 嵌套(Nesting)

          6.1 嵌套規則 (Nested Rules)

          Sass 允許將一套 CSS 樣式嵌套進另一套樣式中,內層的樣式將它外層的選擇器作為父選擇器。

          //sass style
          //-------------------------------
          #main p { 
           color: #00ff00; 
           width: 97%; 
           .redbox { 
           background-color: #ff0000; 
           color: #000000;
           }
          }
          //css style
          //-------------------------------
          #main p { 
           color: #00ff00; 
           width: 97%;
          }
          #main p .redbox { 
           background-color: #ff0000; 
           color: #000000;
          }

          6.2 父選擇器 & (Referencing Parent Selectors: &)

          在嵌套 CSS 規則時,有時也需要直接使用嵌套外層的父選擇器,可以用 & 代表嵌套規則外層的父選擇器。

          //sass style
          //-------------------------------
          .box { 
           border-#{$side}: 1px solid #09c;
           &::before { 
           content: ''; 
           display: block; 
           position: absolute; 
           left: 100px; 
           top: 5px;
           }
          }
          //css style
          //-------------------------------
          .box { 
           border-top: 1px solid #09c;
          }
          .box::before { 
           content: ''; display: block; position: absolute; left: 100px; top: 5px;
          }

          & 必須作為選擇器的第一個字符,其后可以跟隨后綴生成復合的選擇器。

          //sass style
          //-------------------------------
          #main { 
           color: black;
           &-sidebar { border: 1px solid; }
          }
          //css style
          //-------------------------------
          #main { 
           color: black;
          }
          #main-sidebar { 
           border: 1px solid;
          }

          6.3 @at-root

          @at-root用來跳出當前選擇器嵌套。

          //sass style
          //-------------------------------
          .demo {
           ... 
           animation: motion 3s infinite;
           @at-root {
           @keyframes motion {
           ...
           }
           }
          }
          //css style
          //------------------------------- 
          .demo {
           ... 
           animation: motion 3s infinite;
          }
          @keyframes motion {
           ...
          }

          7. 運算

          Sass支持多種數據類型的變量,比如:

          • 數字,1, 2, 13, 10px

          • 字符串,有引號字符串與無引號字符串,"foo", 'bar', baz

          • 顏色,blue, #04a3f9, rgba(255,0,0,0.5)

          • 布爾型,true, false

          • 空值,null

          所有數據類型均支持相等運算==或 !=,此外,每種數據類型也有其各自支持的運算方式。

          7.1 數值運算

          Sass支持數字的加減乘除、取整等運算 (+, -, *, /, %),如果必要會在不同單位間轉換值。

          //sass style
          //-------------------------------
          .box { 
           height: 17px + 20px; //=> 37px 數字加法運算
           width: (75rem/16); //=> 4.6875rem 除法運算
           color: #303030*2; //=> #606060; 乘法運算(顏色運算)
           padding: 20px - 3; //=> 17pex 數字減法
           font-family: sans- + "serif"; //=> sans-serif 字符串加法
           width: 1em + (2em * 3); // 帶括號的運算
          }
          //css style
          //------------------------------- 
          .box { 
           height: 37px; 
           width: 4.6875rem; 
           color: #606060; 
           padding: 17px; 
           font-family: sans-serif; 
           width: 7em;
          }

          8. Sass語句

          Sass提供了常用的循環、判斷分支語句的相關指令,可以讓我們按照編程語言一樣編寫Sass代碼。

          8.1 if語句

          當 @if 的表達式返回值不是 false 或者 null 時,條件成立,輸出 {} 內的代碼。

          //sass style
          //------------------------------- 
          $w: 960px;
          $type: monster;
          .box {
           @if 2*3 > 5 { // 簡單if判斷語句
           color: red;
           }
           @if $w > 900px { width: $w;
           } @else { // if else 語句
           width: 900px;
           }
           @if $type==ocean { // 多個if和else語句
           color: blue;
           } @else if $type==matador { 
           color: red;
           } @else if $type==monster { 
           color: green;
           } @else { 
           color: black;
           }
          }
          //css style
          //------------------------------- 
          .box { 
           color: red; 
           width: 960px; 
           color: green;
          }

          @if 聲明后面可以跟多個 @else if 聲明,或者一個 @else 聲明。如果 @if 聲明失敗,Sass 將逐條執行 @else if 聲明,如果全部失敗,最后執行 @else 聲明

          8.2 for循環語句

          @for 指令可以在限制的范圍內重復輸出格式。類似for循環。兩種格式:

          • @for $var from <start> through <end> :條件范圍包含 <start> 與 <end> 的值

          • @for $var from <start> to <end>: 圍只包含 <start> 的值不包含 <end> 的值

          //scss style
          //------------for througth循環------------------- 
          @for $i from 1 through 3 { 
           .item-#{$i} { width: 2em * $i; }
          }
          //css style
          //------------------------------- 
          .item-1 { width: 2em; }
          .item-2 { width: 4em; }
          .item-3 { width: 6em; }
          //scss style//------------for to 循環------------------- 
          @for $i from 1 to 3 { 
           .item-#{$i} { width: 2em * $i; }
          }
          //css style
          //------------------------------- 
          .item-1 { width: 2em; }
          .item-2 { width: 4em; }

          8.3 each循環

          @each 指令的格式是 $var in <list>, $var 可以是任何變量名,比如 $length 或者 $name,而 <list> 是一連串的值,也就是值列表。

          //sass style
          //------------------------------- 
          @each $animal in puma, sea-slug, egret, salamander {
           .#{$animal}-icon { 
           background-image: url('/images/#{$animal}.png');
           }
          }
          //css style//-------------------------------
          .puma-icon { 
           background-image: url("/images/puma.png");
          }
          .sea-slug-icon { 
           background-image: url("/images/sea-slug.png");
          }
          .egret-icon { 
           background-image: url("/images/egret.png");
          }
          .salamander-icon { 
           background-image: url("/images/salamander.png");
          }

          復雜對應each

          //sass style
          //------------------------------- 
          @each $header, $size in (h1: 2em, h2: 1.5em, h3: 1.2em) {
           #{$header} { 
           font-size: $size;
           }
          }
          //css style
          //-------------------------------
          h1 { font-size: 2em; }
          h2 { font-size: 1.5em; }
          h3 { font-size: 1.2em; }

          9. 混合指令 (Mixin Directives)

          9.1 不帶參數的簡單Mixin

          混合指令(Mixin)用于定義可重復使用的樣式,可以直接把一整段Sass代碼替換到某個地方去。

          //sass style
          //------------------------------- 
          // 定義mixin reset, 用@mixin開頭,后面跟空格和混合塊的名字。然后是語句塊
          @mixin reset { 
           padding: 0; margin: 0;
          }
          html, body, div , input {
           @include reset(); // 引用 reset 混合塊。用@include指令引用混合塊。
          }
          //css style
          //-------------------------------
          html, body, div, input { 
           padding: 0; 
           margin: 0;
          }

          9.2 帶參數的Mixin

          Mixin還可也添加參數,跟函數一樣使用。

          //sass style
          //------------------------------- 
          @mixin sexy-border($color, $width) { 
           border: $width solid $color;
          }
          p { @include sexy-border(blue, 1px); }
          //css style
          //-------------------------------
          p { 
           border: 1px solid blue;
          }

          10. 函數指令 (Function Directives)

          雖然Mixin功能強大,但是某些場景下還是函數應用更方便,Sass也提供了自定義函數的用法。

          //sass style
          //------------------------------- 
          $grid-width: 40px;
          $gutter-width: 10px;
          // 定義自定義函數 grid-width
          @function grid-width($n) { // 接受一個參數$n
           @return $n * $grid-width + ($n - 1) * $gutter-width; // 返回值。
          }
          #sidebar { width: grid-width(5); } // 在屬性中調用函數
          //css style
          //-------------------------------
          #sidebar { 
           width: 240px;
          }

          11. 繼承(擴展)

          11.1 基本繼承

          sass中,選擇器繼承可以讓選擇器繼承另一個選擇器的所有樣式,并聯合聲明。使用選擇器的繼承,要使用關鍵詞 @extend,后面緊跟需要繼承的選擇器。

          //sass style
          //-------------------------------
          h1{ 
           border: 4px solid #ff9aa9;
          }
          .speaker{
           @extend h1; 
           border-width: 2px;
          }
          //css style
          //-------------------------------
          h1, .speaker{ 
           border: 4px solid #ff9aa9;
          }
          .speaker{ 
           border-width: 2px;
          }

          11.2 占位符%

          可以定義占位選擇器 %。這種選擇器的優勢在于:如果不調用則不會有任何多余的css文件,避免了以前在一些基礎的文件中預定義了很多基礎的樣式,然后實際應用中不管是否使用了 @extend去繼承相應的樣式,都會解析出來所有的樣式。占位選擇器以 %標識定義,通過 @extend調用。

          //sass style
          //------------------------------- 
          %ir { // 定義占位符。沒有選擇器名字的一段代碼而已。
           color: transparent; 
           text-shadow: none; 
           background-color: transparent; 
           border: 0;
          }
          #header{ 
           h1{
           @extend %ir; 
           width:300px;
           }
          }
          .ir{
           @extend %ir;
          }
          //css style
          //-------------------------------
          #header h1, .ir { 
           color: transparent; 
           text-shadow: none; 
           background-color: transparent; 
           border: 0;
          }
          #header h1 { 
          width: 300px;
          }

          12. 導入文件

          Sass的導入( @import)Sass文件規則和CSS的有所不同,編譯時會將 @import的scss文件合并進來只生成一個CSS文件。但是如果你在Sass文件中導入css文件如 @import 'reset.css',那效果跟普通CSS導入樣式文件一樣,導入的css文件不會合并到編譯后的文件中,而是以 @import方式存在。

          所有的Sass導入文件都可以忽略后綴名 .scss。一般來說基礎的文件命名方法以_開頭,如 _mixin.scss。這種文件在導入的時候可以不寫下劃線,可寫成 @import "mixin"。

          例如: a.scss 文件

          //a.scss
          //-------------------------------
          body { 
          background: #eee;
          }

          main.scss 主文件。

          月16日,國際電信聯盟正式發布手機(移動終端)動漫國際標準(標準號T.621),白鷺時代旗下動漫創作平臺DragonBones(龍骨)成為首個支持HTML5動漫國際標準的創作工具。

          據悉,作為中國文化領域首個國際技術標準,文化部在制定標準的過程中,同時聯合中國移動、中國聯通、中國電信、騰訊、愛奇藝等國內知名企業共同為標準的制定提供技術支持。

          白鷺時代做為國內知名的HTML5技術與服務提供商,有幸參與并定義標準中的可交互式漫畫標準格式,并為手機端(移動終端)以HTML5的形態展示可交互動態漫畫提供完整的解決方案,這也意味著白鷺時代不僅在國內HTML5領域處于優勢,更已走在了世界前沿。

          所謂可交互動態漫畫,主要是指在傳統靜態漫畫的基礎上增加動畫、音效和可交互的元素,旨在增強終端用戶閱讀體驗,從看漫畫升級為玩漫畫。借助白鷺時代旗下的龍骨動畫編輯器DragonBones,動漫創意人士可以制作可交互的動態漫畫,并發布成為符合國際標準的漫畫格式。

          同時,白鷺時代為手機動漫標準提供了符合該標準的HTML的動漫播放器,使得所有安裝Egret運行時的移動設備天生具有播放這種動漫格式的能力。

          手機(移動終端)動漫國際標準信息鏈接:

          2013年,經國家標準委備案,文化部發布手機動漫行業標準。目前,該系列標準已在中國手機動漫行業內廣泛應用,依照標準提供產品和服務的動漫企業已經超1000家,覆蓋用戶過億,實現了手機動漫在移動互聯網各平臺間的即時互通,有效降低了手機動漫的生產和傳播運營成本,促進了手機動漫領域創業創新。

          2015年以來,文化部圍繞中國手機(移動終端)動漫標準上升為國際標準,組織專家和企業開展了系列工作,多次派出工作小組參加國際電信聯盟相關會議。經過兩年多堅持不懈的努力,2017年1月27日,由中國主導的手機(移動終端)動漫標準在瑞士日內瓦召開的國際電信聯盟第16研究組全體會議上順利通過審議,標準號T.621。經過全球公示后,于2017年3月16日正式發布。

          2019年6月25日,白鷺引擎發布 5.2.22版本,在5.2.20版本中,2D渲染 – JavaScript和微信小游戲修復、優化多個問題,OPPO小游戲優化對聲音的支持,推薦各位開發者更新體驗。


          2D 渲染 - JavaScript

          [修復]修復htmlSound 音頻初始加載時銷毀錯誤的問題。

          [優化]在Mac上的Safari瀏覽器中,默認使用web audio的方式播放音頻。

          [優化]重命名插件RenamePlugin增加設置回調函數,獲取文件的相關信息。

          微信小游戲 v1.1.17

          [優化]移除無效的報錯信息。

          [優化]優化資源管理模塊中 binary 的加載方式。

          OPPO 小游戲 v0.1.5

          [優化]優化對聲音的支持。


          主站蜘蛛池模板: 日本一区二区三区在线看| 无码人妻啪啪一区二区| 国产另类ts人妖一区二区三区 | 91视频一区二区| 天天综合色一区二区三区| 一区二区三区免费视频播放器| 久久精品午夜一区二区福利| 波多野结衣中文字幕一区二区三区| 国产日韩AV免费无码一区二区| 日韩aⅴ人妻无码一区二区| 国产内射在线激情一区| 日韩有码一区二区| 亚洲欧美日韩一区二区三区| 久久一区不卡中文字幕| 国产AV国片精品一区二区| 在线观看中文字幕一区| 日韩一区二区视频在线观看| 亚洲AV综合色一区二区三区| 成人免费视频一区二区| 欲色aV无码一区二区人妻 | 国产精品一区二区毛卡片| 日韩内射美女人妻一区二区三区| 日韩精品无码一区二区视频| 无码AV动漫精品一区二区免费| 日本一区二区三区在线观看视频 | 国模丽丽啪啪一区二区| 国产一区高清视频| 国产一区二区三区在线| 风间由美在线亚洲一区| 波多野结衣AV一区二区三区中文| 亚洲无圣光一区二区| 亚洲国产一区国产亚洲| AV无码精品一区二区三区宅噜噜| 精品综合一区二区三区| 日韩aⅴ人妻无码一区二区| 国产精品一区二区在线观看| 在线精品日韩一区二区三区| 日美欧韩一区二去三区| 福利一区二区三区视频午夜观看| 日本韩国一区二区三区| 一区二区三区波多野结衣|