CSS-當(dāng)前主流的三種預(yù)編譯器比較

CSS預(yù)處理器用一種專(zhuān)門(mén)的編程語(yǔ)言,進(jìn)行Web頁(yè)面樣式設(shè)計(jì)塔橡,然后再編譯成正常的CSS文件匆笤,以供項(xiàng)目使用;
讓你的CSS更加簡(jiǎn)潔谱邪、適應(yīng)性更強(qiáng)、可讀性更佳庶诡,更易于代碼的維護(hù)等諸多好處惦银。

當(dāng)前主流的三種預(yù)編譯器

  • less
  • sass
  • stylus
比較一:基本語(yǔ)法的區(qū)別

首先 Sass 和 Less 都使用的是標(biāo)準(zhǔn)的 CSS 語(yǔ)法,因此如果可以很方便的將已有的 CSS 代碼轉(zhuǎn)為預(yù)處理器代碼末誓,默認(rèn) Sass 使用 .sass 擴(kuò)展名扯俱,而 Less 使用 .less 擴(kuò)展名。

/* style.scss or style.less */
h1 {
  color: #666666;

但是喇澡,不過(guò) Sass 同時(shí)也支持老的語(yǔ)法迅栅,就是不包含花括號(hào)和分號(hào)的方式:

/* style.sass */
h1
   color: #666666;

而 Stylus 支持的語(yǔ)法要更多樣性一點(diǎn),它默認(rèn)使用 .styl 的文件擴(kuò)展名晴玖,它可以既沒(méi)有花括號(hào)也沒(méi)用冒號(hào)读存。下面是 Stylus 支持的語(yǔ)法:

/* style.styl */
h1 {
   color: #666666;
}
 
/* omit brackets */
h1
   color: #666666;
 
/* omit colons and semi-colons */
h1
  color: #666666

可以在同一個(gè)樣式單中使用不同的變量,例如下面的寫(xiě)法也不會(huì)報(bào)錯(cuò):

h1 {
  color #0982c1
}
h2
  font-size: 1.2em

比較二:變量

Sass聲明變量必須是『$』開(kāi)頭呕屎,后面緊跟變量名和變量值让簿,而且變量名和變量值需要使用冒號(hào):分隔開(kāi)。
Less 聲明變量用『@』開(kāi)頭秀睛,其余等同 Sass尔当。
Stylus 中聲明變量沒(méi)有任何限定,結(jié)尾的分號(hào)可有可無(wú)蹂安,但變量名和變量值之間必須要有『等號(hào)』

Sass
Sass讓人們受益的一個(gè)重要特性就是它為css引入了變量椭迎。你可以把反復(fù)使用的css屬性值 定義成變量锐帜,然后通過(guò)變量名來(lái)引用它們,而無(wú)需重復(fù)書(shū)寫(xiě)這一屬性值畜号。

$maincolor : #666666;
$siteWidth : 1024px;
$borderStyle : dotted;
body {
  color: $maincolor;
  border: 1px $borderStyle $mainColor;
  max-width: $siteWidth;
}

Less
在less文件中缴阎,當(dāng)一個(gè)值需要反復(fù)使用時(shí),可以通過(guò)@符號(hào)定義變量弄兜。已經(jīng)被賦值的變量以及其他的常量(如像素药蜻、顏色等)都可以參與運(yùn)算。

@maincolor : #666666;
@siteWidth : 1024px;
@borderStyle : dotted;
body {
  color: @maincolor;
  border: 1px @borderStyle @mainColor;
  max-width: @siteWidth;
}

sass和less用法極其類(lèi)似替饿,saas用$,less用@.

Stylus
stylus對(duì)變量是沒(méi)有任何設(shè)定的语泽,可以是以$開(kāi)頭,或者任何的字符视卢,而且與變量之間可以用冒號(hào)踱卵,空格隔開(kāi),
但是在stylus中不能用@開(kāi)頭据过,例如:

maincolor = #092873
siteWidth = 1024px
borderStyle = dotted
body 
  color maincolor
  border 1px borderStyle mainColor
  max-width siteWidth

以上三種寫(xiě)法等同于:

body {
  color: #092873;
  border: 1px dotted #092873;
  max-width: 1024px;
}

比較三:嵌套

如下代碼惋砂,大家肯定經(jīng)常用到或者很常見(jiàn)

div {
  margin: 10px;
}
div nav {
  height: 25px;
}
div nav a {
  color: #ffffff;
}
div nav a:hover {
  text-decoration: underline;
}

如果用 CSS 預(yù)處理器,就可以少寫(xiě)很多單詞绳锅,而且父子節(jié)點(diǎn)關(guān)系一目了然西饵,并且sass,Less鳞芙,stylus都支持下面這樣的寫(xiě)法眷柔,且都是相同的:

nav { 
    ul { 
       margin: 0; 
       padding: 0; 
    } 
    li { 
       display: inline-block; 
    } 
    a { 
       display: block; 
       padding: 6px 12px; 
       text-decoration: none; 
    } 
}

比較四:運(yùn)算符

在 CSS 預(yù)處理器中還是可以進(jìn)行樣式的計(jì)算如下:

body {
  margin: (14px/2);
  top: 50px + 100px;
  right: 80 * 10%;
}

比較五:運(yùn)算符

CSS 預(yù)處理器一般都會(huì)內(nèi)置一些顏色處理函數(shù)用來(lái)對(duì)顏色值進(jìn)行處理,例如加亮原朝、變暗驯嘱、顏色梯度等
1.sass的顏色處理函數(shù):

lighten($color, 10%); 
darken($color, 10%);  
saturate($color, 10%);   
desaturate($color, 10%);
grayscale($color);  
complement($color); 
invert($color); 
mix($color1, $color2, 50%); 

實(shí)例如下:

$color: #0982C1;
h1 {
  background: $color;
  border: 3px solid darken($color, 50%);
}

2.less的顏色處理函數(shù):
用@,其余同sass

@color: #0982C1;
h1 {
  background: @color;
  border: 3px solid darken(@color, 50%);
}

3.Stylus顏色處理函數(shù):

lighten(color, 10%); 
darken(color, 10%);  
saturate(color, 10%);  
desaturate(color, 10%); 

實(shí)例如下:

color = #0982C1 
h1
  background color
  border 3px solid darken(color, 50%)

比較六:繼承

1.sass:
sass可通過(guò)@extend來(lái)實(shí)現(xiàn)代碼組合聲明,使代碼更加優(yōu)越簡(jiǎn)潔喳坠。

.message {
  border: 1px solid #ccc;
  padding: 10px;
  color: #333;
}
.success {
  @extend .message;
  border-color: green;
}
.error {
  @extend .message;
  border-color: red;
}
.warning {
  @extend .message;
  border-color: yellow;
}

2.Less css:

.message {
  border: 1px solid #ccc;
  padding: 10px;
  color: #333;
}
.success {
  .message;
  border-color: green;
}
.error {
  .message;
  border-color: red;
}
.warning {
  .message;
  border-color: yellow;
}

以上兩種寫(xiě)法等同于:

.message, .success, .error, .warning {
  border: 1px solid #cccccc;
  padding: 10px;
  color: #333;
}
.success {
  border-color: green;
}
.error {
  border-color: red;
}
.warning {
  border-color: yellow;
}

比較七:Mixins(混入)

Mixins 有點(diǎn)像是函數(shù)或者是宏鞠评,當(dāng)某段 CSS 經(jīng)常需要在多個(gè)元素中使用時(shí),可以為這些共用的 CSS 定義一個(gè) Mixin壕鹉,然后只需要在需要引用這些 CSS 地方調(diào)用該 Mixin 即可剃幌。
可以理解成,定義了一個(gè)公用的方法晾浴,傳入不同的參數(shù)去調(diào)用這個(gè)方法锥忿。
1.sass

// logo 高度
@value logoHeight: 160px;

// logo的樣式 logo($x:2px),也可以有默認(rèn)參數(shù)
@mixin logo($x, $y, $width, $height, $logoHeight) {
  display: inline-flex;
  height: $logoHeight;
  width: 100%;
  justify-content: center;
  align-items: flex-end;
  background: url('../assets/basic/logo.png') no-repeat;
  background-position: $x $y;
  background-size: $width $height;
  color: #fff;
  font-size: 22px;
  font-weight: 600;
  transition: background 0.2s, width 0.2s, height 0.2s;
}

// 在引用的地方@include logo()
.logo {
   @include logo(19px, 22px, 120px, 120px, logoHeight);
}

2.less

.error(@borderWidth: 2px) {
  border: @borderWidth solid #F00;
  color: #F00;
}
.generic-error {
  padding: 20px;
  margin: 4px;
  .error(); //這里調(diào)用默認(rèn) border: 2px solid #F00;
}
.login-error {
  left: 12px;
  position: absolute;
  top: 20px;
  .error(5px); //這里調(diào)用 border:5px solid #F00;
}

3.Stylus
與less的區(qū)別是,引用的時(shí)候怠肋,可以不用加 (點(diǎn) .)

error(borderWidth= 2px) {
  border: borderWidth solid #F00;
  color: #F00;
}
.generic-error {
  padding: 20px;
  margin: 4px;
  error(); 
}
.login-error {
  left: 12px;
  position: absolute;
  top: 20px;
  error(5px); 
}

比較八:3D文本

要生成具有 3D 效果的文本可以使用 text-shadows 敬鬓,唯一的問(wèn)題就是當(dāng)要修改顏色的時(shí)候就非常的麻煩,而通過(guò) mixin 和顏色函數(shù)可以很輕松的實(shí)現(xiàn):

用法跟mixin的用法一致
1.sass

@mixin text3d($color) {
  color: $color;
  text-shadow: 1px 1px 0px darken($color, 5%),
               2px 2px 0px darken($color, 10%),
               3px 3px 0px darken($color, 15%),
               4px 4px 0px darken($color, 20%),
               4px 4px 2px #000;
}
 
h1 {
  font-size: 32pt;
  @ include text3d(#0982c1);
}

2.less css

.text3d(@color) {
  color: @color;
  text-shadow: 1px 1px 0px darken(@color, 5%),
               2px 2px 0px darken(@color, 10%),
               3px 3px 0px darken(@color, 15%),
               4px 4px 0px darken(@color, 20%),
               4px 4px 2px #000;
}
 
span {
  font-size: 32pt;
  .text3d(#0982c1);
}

3.stylus

text3d(color)
  color: color
  text-shadow: 1px 1px 0px darken(color, 5%), 
               2px 2px 0px darken(color, 10%), 
               3px 3px 0px darken(color, 15%), 
               4px 4px 0px darken(color, 20%), 
               4px 4px 2px #000
span
  font-size: 32pt
  text3d(#0982c1)

其生成的css最終的效果如下:


span {
  font-size: 32pt;
  color: #0982c1;
  text-shadow: 1px 1px 0px #097bb7,
               2px 2px 0px #0875ae,
               3px 3px 0px #086fa4,
               4px 4px 0px #07689a,
               4px 4px 2px #000;
}

比較九:3D文本

在sass中,還支持條件語(yǔ)句:
@if可一個(gè)條件單獨(dú)使用钉答,也可以和@else結(jié)合多條件使用

$lte7: true;
$type: monster;
.ib{
    display:inline-block;
    @if $lte7 {
        *display:inline;
        *zoom:1;
    }
}
p {
  @if $type == ocean {
    color: blue;
  } @else if $type == matador {
    color: red;
  } @else if $type == monster {
    color: green;
  } @else {
    color: black;
  }
}

其最終的css代碼如下:

.ib{
    display:inline-block;
    *display:inline;
    *zoom:1;
}
p {
  color: green; 
}

其他:sass還支持for础芍,each等其他用法,自己上官網(wǎng)see数尿,see吧仑性。

鏈接??:
sass:https://www.sass.hk/
lesscss:http://lesscss.cn/
stylus:http://stylus-lang.com/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市右蹦,隨后出現(xiàn)的幾起案子诊杆,更是在濱河造成了極大的恐慌,老刑警劉巖何陆,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件晨汹,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡贷盲,警方通過(guò)查閱死者的電腦和手機(jī)淘这,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)巩剖,“玉大人铝穷,你說(shuō)我怎么就攤上這事〖涯В” “怎么了曙聂?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)鞠鲜。 經(jīng)常有香客問(wèn)我筹陵,道長(zhǎng),這世上最難降的妖魔是什么镊尺? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮并思,結(jié)果婚禮上庐氮,老公的妹妹穿的比我還像新娘。我一直安慰自己宋彼,他們只是感情好弄砍,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著输涕,像睡著了一般音婶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上莱坎,一...
    開(kāi)封第一講書(shū)人閱讀 51,125評(píng)論 1 297
  • 那天衣式,我揣著相機(jī)與錄音,去河邊找鬼。 笑死碴卧,一個(gè)胖子當(dāng)著我的面吹牛弱卡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播住册,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼婶博,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了荧飞?” 一聲冷哼從身側(cè)響起凡人,我...
    開(kāi)封第一講書(shū)人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎叹阔,沒(méi)想到半個(gè)月后挠轴,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡条获,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年忠荞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片帅掘。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡委煤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出修档,到底是詐尸還是另有隱情碧绞,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布吱窝,位于F島的核電站讥邻,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏院峡。R本人自食惡果不足惜兴使,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望照激。 院中可真熱鬧发魄,春花似錦、人聲如沸俩垃。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)口柳。三九已至苹粟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間跃闹,已是汗流浹背嵌削。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工毛好, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人掷贾。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓睛榄,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親想帅。 傳聞我的和親對(duì)象是個(gè)殘疾皇子场靴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353