成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

縮減SCSS 50%樣式代碼的14條實戰經驗

開發 前端
經過實際項目的摸索,總結了以下14條實踐經驗進行分享,希望能幫助大家擴寬思維,更好地將Sass運用到實際項目中。在項目中,我們使用支持傳統的類CSS語法—— Scss,所以以下項目經驗總結分享以Scss為例。

 前言

Sass是CSS3語言的擴展,它能幫你更省事地寫出更好的樣式表,使你擺脫重復勞動,使工作更有創造性。因為你能更快地擁抱變化,你也將敢于在設計上創新。你寫出的樣式表能夠自如地應對修改顏色或修改HTML標簽,并編譯出標準的CSS代碼用于各種生產環境。Sass語法比較簡單,難點在于如何將Sass運用到實際項目中,解決CSS存在的痛點,從而提高我們效率。經過實際項目的摸索,總結了以下14條實踐經驗進行分享,希望能幫助大家擴寬思維,更好地將Sass運用到實際項目中。在項目中,我們使用支持傳統的類CSS語法—— Scss,所以以下項目經驗總結分享以Scss為例。

1、變量 $ 使用

我們可以通過變量來復用屬性值,比如顏色、邊框大小、圖片路徑等,這樣可以做到更改一處,從而進行全局更改,從而實現“換膚”的功能。

實例1:我們的組件庫,利用變量配置,進行統一更改組件的顏色、字體大小等(換膚): 

  1. $color-primary: #3ecacb;  
  2. $color-success: #4fc48d;  
  3. $color-warning: #f3d93f;  
  4. $color-danger: #f6588e;  
  5. $color-info: #27c6fa; 

實例2:圖片的配置及全局引入

Scss中圖片的使用,可能存在以下2個問題:

(1)如果樣式文件和使用該樣式文件的vue文件不在同一目錄會出現圖片找不到

(2)如果將圖片路徑配置變量寫在vue文件的style中,但是該寫法導致圖片和樣式分離

我們可以采用將圖片路徑寫成配置文件,然后進行全局引入,這樣可以統一更改圖片路徑(并且該方法只會在使用相應圖片時進行加載,不會導致額外性能問題): 

  1. $common-path: './primary/assets/img/';  
  2. $icon-see: $common-path+'icon-see.png';  
  3. $icon-play: $common-path+'icon-play.png';  
  4. $icon-comment: $common-path+'icon-comment.png';  
  5. $icon-checkbox: $common-path+'icon-checkbox.png'; 

2、@import 導入Scss文件

(1)Css中的@import規則,它允許在一個css文件中導入其他css文件。然而,后果是只有執行到@import時,瀏覽器才會去下載其他css文件,這導致頁面加載起來特別慢。

(2)Scss中的@import規則,不同的是,scss的@import規則在生成css文件時就把相關文件導入進來。這意味著所有相關的樣式被歸納到了同一個css文件中,而無需發起額外的下載請求。

實例1:組件庫中統一將組件的樣式文件import進index.sccs中,然后如果項目中有使用組件庫的地方只需要在項目的入口處,引入index.scss文件,如下所示在index.scss文件中引入各組件的樣式文件: 

  1. @import "./base.scss";  
  2. @import "./webupload.scss";  
  3. @import "./message-hint.scss"; 

3、局部文件命名的使用

scss局部文件的文件名以下劃線開頭。這樣,scss就不會在編譯時單獨編譯這個文件輸出css,而只把這個文件用作導入。在使用scss時,混合器mixins是最適合的使用場景,因為混合器不需要單獨編譯輸出css文件。

實例1:將混合器的名稱寫成局部文件命名的方式,如下圖所示

img

4、Scss的嵌套功能和父選擇器標識符

我們可以使用嵌套功能和父選擇器標識符 & 來縮減重復的代碼,特別如果你CSS類采用BEM命名規范,樣式類命名存在冗長的問題。使用此功能,能解決BEM命名冗長的問題,且樣式可讀性更高。

實例1:嵌套功能和父選擇器標識符 & 解決BEM冗長問題: 

  1. .tea-assignhw {   
  2.  &__top {    
  3.   margin: 0;    
  4. }   
  5.  &__content {   
  6.    padding-left: 45px;   
  7.  }    
  8. &__gradeselect {  
  9.    width: 158px;    
  10.  } 

**實例2:**嵌套中使用子選擇器、兄弟選擇器和偽類選擇器

(1)子選擇器 

  1. &__hint {  
  2.   margin: 20px;   
  3.    font-size: 14px;   
  4.   > p:first-child {   
  5.      font-weight: bold;    
  6.  }  

(2)兄弟選擇器 

  1. &__input {   
  2.  width: 220px;   
  3.  & + span {     
  4.    margin-left: 10px;    
  5.  }  

(3)偽類選擇器 

  1. &__browse {  
  2.   background: url($btn-search) no-repeat;   
  3. &:hover {     
  4.   background: url($btn-search) -80px 0 no-repeat;   
  5. }    
  6. &:visited {   
  7.   background: url($btn-search) -160px 0 no-repeat;   
  8.  }  

5、@mixin 混合器和 @extend 指令的使用

變量使你能夠復用屬性值,但如果想要復用一大段規則呢?傳統的做法是,如果在樣式表

中發現重復,就會把公共的規則抽離出來放到新的CSS類中。

在Scss中可以使用混合器@mixin和@extend繼承指令來解決以上提到的復用一大段規則的場景。但兩者的使用場景又有啥區別呢?

(1)@mixin主要的優勢就是它能夠接受參數。如果想傳遞參數,你會很自然地選擇@mixin而不是@extend,因為@extend不能夠接受參數

(2)因為混合器規則都混入到其他類中,所以在輸出的樣式表中不能完全避免重復。選擇器繼承的意思就是讓一個選擇器能夠復用另一個選擇器的所有樣式,但又不重復輸出這些樣式屬性;即使用@extend產生 DRY CSS風格的代碼(Don't repeat yourself)

綜上所述,如果你需要傳參數,只能使用@mixin混合器,否則用@extend繼承來實現更優。

實例1:@mixin混合器的使用 

  1. @mixin paneactive($image, $level, $vertical) {   
  2.   background: url($image) no-repeat $level $vertical;    
  3.   height: 100px;    
  4.   width: 30px;   
  5.   position: relative;    
  6.   top: 50%;  
  7.  
  8. &--left-active {    
  9.   @include paneactive($btn-flip, 0, 0);  
  10.  
  11. &--right-active {   
  12.   @include paneactive($btn-flip, 0, -105px);  

實例2:@extend繼承的使用 

  1. .common-mod {    
  2.   height: 250px;   
  3.   width: 50%;    
  4.   background-color: #fff; 
  5.   text-align: center;  
  6.  
  7. &-mod {   
  8.   @extend .common-mod;    
  9.   float: right; 
  10.   
  11. &-mod2 {   
  12.   @extend .common-mod;  

6、@mixin 混合器默認參數值的使用

在@include混合器時不必傳入所有的參數,我們可以給參數指定一個默認值,如果所需要傳的參數是 默認值,則@include時可以省略該參數;如果所需要傳的參數不是默認值,則@include時則傳入新的參數。

實例1:@mixin混合器默認參數值的使用 

  1. @mixin pane($dir: left) {    
  2.   width: 35px;   
  3.   display: block;    
  4.   float: $dir;    
  5.   background-color: #f1f1f1;  
  6.  
  7. &__paneleft {   
  8.   @include pane;  
  9.  
  10. &__paneright {  
  11.   @include pane(right);  

7、#{} 插值的使用

通過 #{} 插值語句可以在選擇器或屬性名中使用變量。當有兩個頁面的樣式類似時,我們會將類似的樣式抽取成頁面混合器,但兩個不同的頁面樣式的命名名稱根據BEM命名規范不能一樣,這時我們可使用插值進行動態命名。

實例1:頁面級混合器中的類名利用#{}插值進行動態設置 

  1. @mixin home-content($class) {   
  2.  .#{$class} {     
  3.    position: relative;  
  4.     background-color: #fff;   
  5.     overflow-x: hidden;    
  6.     overflow-y: hidden;    
  7.   &--left {      
  8.     margin-left: 160px;  
  9.   }     
  10.   &--noleft {   
  11.      margin-left: 0;    
  12.  }   
  13.  }  

8、運算的使用

SassScript 支持數字的加減乘除、取整等運算 (+, -, *, /, %)

實例1:input組件根據輸入框的高度設置左右內邊距,如下所示:.

  1. ps-input {   
  2.    display: block;    
  3.    &__inner {     
  4.     -webkit-appearance: none;    
  5.      padding-left: #{$--input-height + 10  
  6.    };      
  7.      padding-right: #{$--input-height + 10  
  8.    };     
  9.   }  

9、相關scss自帶函數的應用

scss自帶一些函數,例如hsl、mix函數等。

**實例1:button組件的點擊后顏色是將幾種顏色根據一定的比例混合在一起,生成另一種顏色。**如下所示: 

  1. &:focus {   
  2.   color: mix($--color-white, $--color-primary, $--button-hover-tint-percent);    
  3.   border-color: transparent;    
  4.   background-color: transparent;}  
  5. &:active {    
  6.   color: mix($--color-black, $--color-primary, $--button-active-shade-percent);   
  7.   border-color: transparent;  background-color: transparent;  

10、相關scss自帶函數的應用

@for指令可以在限制的范圍內重復輸出樣式,每次按變量的值對輸出結果進行變動。

實例1:例如項目中需要設置hwicon類底下第2到8個div子節點需設置樣式,如下所示: 

  1. @for $i from 2 through 8 {    
  2. .com-hwicon {      
  3.  > div:nth-child(#{$i}) {  
  4.     position: relative;  
  5.     float: right;    
  6.    }    
  7.  }  

11、each遍歷、map數據類型、@mixin/@include混合器、#{}插值 結合使用

可通過結合each遍歷、map數據類型、@mixin/@include混合器、#{}插值,從而生成不同的選擇器類,并且每個選擇器類中的背景圖片不同,如下所示: 

  1. $img-list: (    
  2.  (accessimg, $papers-access),   
  3.   (folderimg, $papers-folder),  
  4.   (bmpimg, $papers-bmp),    
  5.   (xlsimg, $papers-excel),    
  6.   (xlsximg, $papers-excel),    
  7.   (gifimg, $papers-gif),   
  8.   (jpgimg, $papers-jpg),    
  9.   (unknownimg, $papers-unknown) 
  10.  ); 
  11.  @each $label, $value in $img-list { 
  12.   .com-hwicon__#{$label} {  
  13.     @include commonImg($value);   
  14.  }  

12、樣式代碼檢查校驗 —— stylelint 插件

CSS不能算是嚴格意義的編程語言,但是在前端體系中卻不能小覷。CSS 是以描述為主的樣式表,如果描述得混亂、沒有規則,對于其他開發者一定是一個定時炸彈,特別是有強迫癥的人群。CSS 看似簡單,想要寫出漂亮的 CSS 還是相當困難。所以校驗 CSS 規則的行動迫在眉睫。stylelint是一個強大的現代 CSS 檢測器,可以讓開發者在樣式表中遵循一致的約定和避免錯誤。

**(1)需要安裝gulp、stylelint、gulp-postscss 、 postcss-reporter、stylelint-config-standard,**安裝命令為: 

  1. npm install gulp stylelint gulp-postscss  postcss-reporter   
  2. stylelint-config-standard--save-dev 

(2)安裝完成后會在項目根目錄下創建gulpfile.js文件,文件gulpfile.js配置為: 

  1. var reporter = require('postcss-reporter');  
  2. var stylelint = require('stylelint');  
  3. var stylelintConfig = {    
  4.   'extends': 'stylelint-config-standard',   
  5.   'rules': {      
  6.   'at-rule-no-unknown': [  
  7.      true, {        
  8.      'ignoreAtRules': [    
  9.      'extend',       
  10.       'include',  
  11.       'mixin',       
  12.       'for'       
  13.       ]     
  14.      }  
  15.    ]  
  16.   }  
  17. };  
  18. gulp.task('scss-lint', function() {
  19.     var processors = [     
  20.     stylelint(stylelintConfig),     
  21.     reporter({       
  22.       clearMessages: true,      
  23.       throwError: true      
  24.    })    
  25.    ];    
  26.  return gulp.src(    
  27.    ['src/style/*.scss']// 需要工具檢查的scss文件   
  28.   ).pipe(postcss(processors));});  
  29.  gulp.task('default', ['scss-lint']); 

(3) stylelint-config-standard 檢驗規則

stylelint-config-standard為stylelint官方推薦的標準校驗規則,具體校驗規則有哪些內容,可參照官網。

(4)運行命令進行樣式檢查

13、樣式自動修復插件 —— stylefmt 插件

stylefmt 是一個基于 stylelint 的代碼修正工具,它可以基于stylelint的代碼規范約定配置,對可修正的地方作格式化輸出。

(1)gulp.js配置文件如下: 

  1. var stylefmt = require('gulp-stylefmt'); // css格式自動調整工具  
  2. gulp.task('stylefmt', function() {  
  3.   return gulp.src(     
  4.   ['src/style/student/index.scss' // 需要工具檢查的scss文件     
  5.   ]).pipe(stylefmt(stylelintConfig))  
  6.     .pipe(gulp.dest('src/style/dest/student'));});  
  7.  gulp.task('fix', ['stylefmt']); 

(2)運行命令進行樣式修復,如下圖所示

img

14、將scss語法編譯成css語法——gulp-sass 插件

初寫scss代碼時,由于對語法不熟悉等,寫出來的scss代碼所得到的頁面效果,并不是我們想要的。這時,我們可以使用gulp-sass插件來監聽scss代碼,實時生成css代碼,從而可以通過查看css代碼,來判斷所寫的scss代碼是否正確。

(1)gulp.js配置文件如下: 

  1. var gulpsass = require('gulp-sass');  
  2. gulp.task('gulpsass', function() {   
  3.   return gulp.src('src/style/components/hwIcon.scss')   
  4.   .pipe(gulpsass().on('error', gulpsass.logError))     
  5.   .pipe(gulp.dest('src/style/dest'));});  
  6.   gulp.task('watch', function() {    
  7.   gulp.watch('src/style/components/hwIcon.scss', ['gulpsass']);  
  8. });復制代碼復制代碼 

(2)運行命令從而監聽scss文件,動態編譯scss代碼生成css代碼文件,如下圖所示

img 

 

責任編輯:龐桂玉 來源: 前端大全
相關推薦

2017-11-02 15:07:56

代碼重寫代碼開發

2025-05-30 08:09:28

2011-07-07 10:49:41

JavaScript

2023-10-23 13:03:04

2013-01-25 10:37:51

敏捷開發

2017-01-05 16:29:00

2015-11-10 09:50:51

IT實施計劃IT

2010-07-06 16:22:14

2015-11-10 09:40:55

IT實施計劃IT

2009-10-20 09:17:27

2021-05-19 20:20:56

Oracle歸檔修復

2010-02-23 16:17:59

2017-08-21 08:20:03

海云捷迅教育云實戰

2021-11-29 10:43:14

業務轉型員工CIO

2025-06-27 09:00:00

勒索軟件網絡攻擊

2025-07-04 00:00:00

2019-12-03 10:46:07

PHP高并發架構

2009-02-20 10:09:00

網吧掉線路由器

2013-05-27 14:03:10

綜合布線布線經驗

2012-06-12 16:30:28

數據庫遷移
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 免费一区二区三区在线视频 | 女人av | 91一区二区三区在线观看 | 精品国产一区二区三区久久 | 国户精品久久久久久久久久久不卡 | 国产精品一区二区欧美黑人喷潮水 | 国产一级一级 | 国产精品a久久久久 | gogo肉体亚洲高清在线视 | 成人在线观看免费 | 国产免费国产 | 国产精品久久久久久久久久 | 黄色香蕉视频在线观看 | 国产精品福利网站 | 欧美日韩一区在线 | 91在线免费观看网站 | 国产精品国产三级国产a | 免费黄网站在线观看 | 成年人免费网站 | 国产一区久久 | 日韩精品一区二区三区久久 | 精品国产一区二区三区久久久蜜月 | 国产精品免费一区二区 | 欧美性一区二区三区 | 日韩网站免费观看 | 国产精品99久久久久久大便 | 国产福利91精品一区二区三区 | 日韩毛片在线免费观看 | 成人欧美一区二区三区黑人孕妇 | 一区二区三区在线免费 | 精品国产鲁一鲁一区二区张丽 | 91小视频在线 | 中文字幕人成人 | 妞干网福利视频 | 国产精品成人久久久久 | 福利一区在线观看 | 中文字幕在线不卡 | 日日骚视频 | 日韩一区二区三区在线播放 | 亚洲精品二区 | 中文字幕在线视频网站 |