當前位置:編程學習大全網 - 編程語言 - 我為什麽不再用Compass寫CSS

我為什麽不再用Compass寫CSS

Compass 是壹個糟糕的項目。目前最大的Sass框架,它目前由Chris Eppstein自己維護,兩個Sass核心設計者之壹,目前它仍然十分流行。

註* SASS: Syntactically Awesome Style Sheets,CSS擴展語言可編程樣式表); 相關文章 LESS vs SASS?選擇哪種CSS樣式編程語言?

然而,大約壹年前,我就完全拋棄Compass了。我將把從我們的項目中刪掉。從我自己的網站中刪掉。從我身邊的項目中刪掉。到底發生了什麽?我是怎麽從"Compass是最好的"轉變到“我不需要它了”的呢?

起初我認為Compass是壹個比Sass更好的東西,直到認識到它其實並沒有帶來多大實惠。至少是還不值得將其引入到項目中,特別是Ruby Sass本身已經很慢了...

這裏我絕不是說Compass沒用。我也不是勸妳不要用。我只是想告訴妳不使用Compass時另外壹種做事方式。

我們先看看Compass有什麽功能:

瀏覽器前輟(-webkit, -moz等),基於CanIUse數據庫 (v1.0.0+);

數學計算函數助手,像cos, sin, pi等等;

顏色助手 像 shade, tint等等;

圖片助手像 image-width 和 image-height;

圖像切片自動合並編繹 。 註* 小圖合大圖減小連接請求

還有很多其它的附件

Autoprefixer沒什麽改進

在Compass 1.0.0之前,瀏覽器前輟是在Compass裏手動管理的。這意味著每產生或傳遞壹個新的前綴,都要拉壹次新的請求來刪除混入的前綴。不是很理想......這就是為什麽Chris在V1.0.0裏使用了壹種更聰明的方法,直接從CanIUse 提取數據。

同時,非常受歡迎的Autoprefixer

庫也能做這樣的事。在這壹點上,無論是Compass

還是Autoprefixer都能100%使用最新的瀏覽器前輟,但還有壹個重要的區別:在Compass中,妳仍然必須在屬性和值上加壹些前輟,而

Autoprefixer作為您部署過程的壹部分,隨後再處理樣式表。

為了輸出下面的CSS:

.unicorn { -webkit-transform: translateX(42em); -ms-transform: translateX(42em); transform: translateX(42em);}

使用Compass得這樣寫:

.unicorn { @include transform(translateX(42em));}

使用Autoprefixer插件:

.unicorn { transform: translateX(42em);}

後者不僅更簡單更短,而且不再需要transform的前綴屬性,這壹切都很好。

妳不會經常用到數學運算

我喜歡Sass為我們在樣式表中提供的數學運算的能力。當我們使用CSS的預處理時,我們可以在CSS中混入變量,對於以數字為基礎的CSS,但忽略數學的支持CSS來講,這是壹個巨大的進步。

重要的是,Compass提供了壹些先進的數學函數,如 cos, sin, tan, sqrt, pow, pi; 也許還有 acos,

asin, atan, log 運算和 e 常量。 在某些情況下,我不得不承認,此功能可能是有用的。例如,在以前的文章中,我使用的 cos 和

sin 打造完美的混合陰影。 前陣子, 我記得需要開方 sqrt 來正確地對齊和旋轉偽元素。因此,它們有應用情形。

然而,他們的應用場景是如此罕見,我不得不重新考慮Compass在項目中保留數學函數的充分理由,實現上這些函數都可以在但Sass被polyfilled實現。舉例來說,這裏是壹個純粹的Sass版的 pow 功能:

/// Power function/// @param {Number} $x/// @param {Number} $n/// @return {Number}/// @source /adambom/Sass-Math/blob/master/math.scss Sass-Math@function pow($x, $n) { $result: 1; @if $n >= 0 { @for $i from 1 through $n { $result: $result * $x; } } @else { @for $i from $n to 0 { $result: $result / $x; } } @return $result;}

如果妳趙的需要Sass中的高級數學函數,我建議妳參考壹下 Sassy-Math。

您可以自己實現顏色函數

說實施,我對Compass 的顏色函數 不是非常的熟悉,因為我從來沒有使用過其中任何壹個功能。不過Compass提供了如此多的內置函數來處理顏色,我從來沒有感覺有多少的需要。

下面有個例子。在CSS中實現漸變。為了讓使用 mix 稍微容易點,我寫了兩個很短的函數,他們在Compass中是被實現了的。

/// Slightly lighten a color/// @access public/// @param {Color} $color - color to tint/// @param {Number} $percentage - percentage of `$color` in returned color/// @return {Color}@function tint($color, $percentage) { @return mix($color, white, $percentage);} /// Slightly darken a color/// @access public/// @param {Color} $color - color to shade/// @param {Number} $percentage - percentage of `$color` in returned color/// @return {Color}@function shade($color, $percentage) { @return mix($color, black, $percentage);}

無論如何,我不認為Compass有必要專門提供這些。

妳可以不依賴圖片工具

讓我們來看壹看有用的東西。Compass它是用Ruby編寫的,提供的圖片助手可以自動計算出類例image-width和image-height這樣的屬性。這是很實用的,特別當妳需要替換圖片時,妳無需擔心尺寸發生變化。

.logo { $logo-path: '/assets/images/logo.png'; width: image-width($logo-path); height: image-height($logo-path); // ...}

不幸的是,我們沒有辦法寫polyfill兼容函數來自己實現。Sass無法訪問文件系統,因此無法任何弄清楚的圖像尺寸。

話雖這麽說,我個人傾向於使用SVG並在項目中並盡量地少使用圖片。由於SVG是可縮放的矢量圖形,我不需要關心它的尺寸。我已經使用好長壹段時間了。

SVG Sprite有壹大波自動合並的工具

好了,現在我們談論Sprite Build,它壹直是Compass的主要亮點,從文件夾中將小圖標自動合並,並創建CSS Sprites只需要壹兩分鐘,也許更少。

@import "compass/utilities/sprites";

@import "my-icons/*.png";

@include all-my-icons-sprites;

在我們的樣式表中自動創建CSS Sprite還有很多其他的選擇。按照同樣的思路,只用Compass的Sprite工具,我會覺得很奇怪,不管它有多好。沒有必要將二者緊密聯系在壹起,即使它可能帶來壹些好處。

註* 參見 CSS Sprite小圖片自動合並工具(NodeJS,Python,Java,Ruby)

關於LibSass的壹句話

Compass與LibSass 是不兼容的。因為它仍然在很大程度上依賴於Ruby,妳不大可在壹個“LibSass環境”使用Compass。在當今世界,LibSass越來越被認同,我認為與語言無關是壹個主要的目標。顯然,Chris也認同這壹點,它正在將它移植到LibSass中。

註* LibSass:讓Sass擴展樣式表語言脫離Ruby框架的依賴,而變成壹個可以被方便引用的庫。

  • 上一篇:平板插畫好學嗎?插畫好學嗎,難不難學,插畫行業前景如何
  • 下一篇:我對我的妻子感到非常難過和失望。
  • copyright 2024編程學習大全網