JavaScript >> Javascript 文檔 >  >> Tags >> CSS

15 分鐘學會 Sass

如果您編寫大量的 CSS,預處理器可以大大降低您的壓力水平並為您節省大量寶貴的時間。使用 Sass、Less、Stylus 或 PostCSS 等工具可以使大型複雜的樣式表更易於理解和維護。由於變量、函數和 mixin 等特性,代碼變得更有條理,讓開發人員能夠更快地工作並減少錯誤。

正如您在我們關於 Less 的文章中所記得的那樣,我們之前使用過預處理器。這次我們將解釋 Sass 並向您展示它的一些主要功能。

1。開始使用

Sass 文件不能被瀏覽器解釋,因此它們需要在準備好訪問 Web 之前編譯為標準 CSS。這就是為什麼您需要某種工具來幫助您將 .scss 文件轉換為 .css。在這裡你有幾個選擇:

  • 最簡單的解決方案是使用瀏覽器工具在現場直接編寫和編譯 Sass - SassMeister。
  • 使用第 3 方桌面應用。提供免費和付費版本​​。您可以前往此處了解更多信息。
  • 如果你和我們一樣是 CLI 人,你可以在你的電腦上安裝 Sass 並手動編譯文件。

如果您決定使用命令行,您可以以原始形式(用 ruby​​ 編寫)安裝 Sass,或者您可以嘗試使用 Node.js 端口(我們的選擇)。還有許多其他的包裝器,但由於我們喜歡 Node.js,我們將繼續使用它。

以下是編譯 .scss 文件的方法 使用節點 CLI:

node-sass input.scss output.css

另外,這裡是時候提到 Sass 提供了兩種不同的語法——Sass 和 SCSS。它們都做同樣的事情,只是用不同的方式編寫。 SCSS 是較新的,通常被認為更好,所以我們將繼續使用它。如果您想詳細了解兩者之間的區別,請查看這篇精彩的文章。

2。變量

Sass 中變量的工作方式與任何編程語言中的變量類似,包括數據類型和範圍等原則。當定義一個變量時,我們會在其中存儲一個特定的值,這通常是在 CSS 中經常出現的東西,比如調色板顏色、字體堆棧或酷盒子陰影的整個規範。

下面你可以看到一個簡單的例子。在選項卡之間切換以查看 SCSS 代碼及其 CSS 翻譯。

$title-font: normal 24px/1.5 'Open Sans', sans-serif;
$cool-red: #F44336;
$box-shadow-bottom-only: 0 2px 1px 0 rgba(0, 0, 0, 0.2);

h1.title {
  font: $title-font;
  color: $cool-red;
}

div.container {
  color: $cool-red;
  background: #fff;
  width: 100%;
  box-shadow: $box-shadow-bottom-only;
}
h1.title {
  font: normal 24px/1.5 "Open Sans", sans-serif;
  color: #F44336; 
}

div.container {
  color: #F44336;
  background: #fff;
  width: 100%;
  box-shadow: 0 2px 1px 0 rgba(0, 0, 0, 0.2);
}

這一切背後的想法是,我們以後可以更快地重用相同的值,或者如果需要更改,我們可以只在一個地方(變量的定義)提供新值,而不是在我們到處手動應用它'正在使用該屬性。

3。混合

您可以將 mixins 視為編程語言中構造函數類的簡化版本 - 您可以獲取一整組 CSS 聲明,並在任何您想賦予和元素一組特定樣式的地方重複使用它。

Mixins 甚至可以接受帶有設置默認值選項的參數。在下面的例子中,我們定義了一個 square mixin,然後用它來創建不同大小和顏色的正方形。

@mixin square($size, $color) {
  width: $size;
  height: $size;
  background-color: $color;
}

.small-blue-square {
  @include square(20px, rgb(0,0,255));
}

.big-red-square {
  @include square(300px, rgb(255,0,0));
}
.small-blue-square {
  width: 20px;
  height: 20px;
  background-color: blue; 
}

.big-red-square {
  width: 300px;
  height: 300px;
  background-color: red;
}

使用 mixins 的另一種有效方法是,當一個屬性需要前綴才能在所有瀏覽器中工作時。

@mixin transform-tilt() {
  $tilt: rotate(15deg);

  -webkit-transform: $tilt; /* Ch <36, Saf 5.1+, iOS, An =<4.4.4 */
      -ms-transform: $tilt; /* IE 9 */
          transform: $tilt; /* IE 10, Fx 16+, Op 12.1+ */
}

.frame:hover { 
  @include transform-tilt; 
}
.frame:hover {
  -webkit-transform: rotate(15deg);  /* Ch <36, Saf 5.1+, iOS, An =<4.4.4 */
  -ms-transform: rotate(15deg);  /* IE 9 */
  transform: rotate(15deg);  /* IE 10, Fx 16+, Op 12.1+ */ 
}

4。擴展

我們將看到的下一個特性是 code>@extend,它允許您將一個選擇器的 CSS 屬性繼承到另一個選擇器。這與 mixins 系統的工作方式類似,但當我們想要在頁面上的元素之間創建邏輯連接時,這是首選。

當我們需要類似樣式的元素時,應該使用擴展,這些元素在某些細節上仍然存在差異。例如,讓我們製作兩個對話框按鈕 - 一個用於同意,一個用於取消對話框。

.dialog-button {
  box-sizing: border-box;
  color: #ffffff;
  box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.12);
  padding: 12px 40px;
  cursor: pointer;
}

.confirm {
  @extend .dialog-button;
  background-color: #87bae1;
  float: left;
}

.cancel {
  @extend .dialog-button;
  background-color: #e4749e;
  float: right;
}
.dialog-button, .confirm, .cancel {
  box-sizing: border-box;
  color: #ffffff;
  box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.12);
  padding: 12px 40px;
  cursor: pointer; 
}

.confirm {
  background-color: #87bae1;
  float: left; 
}

.cancel {
  background-color: #e4749e;
  float: right; 
}

如果您查看代碼的 CSS 版本,您會看到 Sass 組合了選擇器,而不是一遍又一遍地重複相同的聲明,從而節省了我們寶貴的內存。

5。嵌套

HTML 遵循嚴格的嵌套結構,而在 CSS 中通常是完全混亂的。使用 Sass 嵌套,您可以以更接近 HTML 的方式組織樣式表,從而減少 CSS 衝突的可能性。

舉個簡單的例子,讓我們為包含多個鏈接的列表設置樣式:

ul {
  list-style: none;

  li {
    padding: 15px;
    display: inline-block;

    a {
      text-decoration: none;
      font-size: 16px;
      color: #444;
    }

  }

}
ul {
  list-style: none; 
}

ul li {
  padding: 15px;
  display: inline-block; 
}

ul li a {
  text-decoration: none;
  font-size: 16px;
  color: #444; 
}

非常整潔和防衝突。

6.操作

使用 Sass,您可以直接在樣式表中進行基本的數學運算,就像應用適當的算術符號一樣簡單。

$width: 800px;

.container { 
  width: $width;
}

.column-half {
  width: $width / 2;
}

.column-fifth {
  width: $width / 5;
}
.container {
  width: 800px; 
}

.column-half {
  width: 400px; 
}

.column-fifth {
  width: 160px; 
}

儘管 vanilla CSS 現在也以 calc() 的形式提供此功能,但 Sass 替代方案編寫起來更快,具有模 % 操作,並且可以應用於更廣泛的數據類型(例如顏色和字符串)。

7。函數

Sass 提供了一長串內置函數。它們服務於各種用途,包括字符串操作、與顏色相關的操作,以及一些方便的數學方法,例如 random() 和 round()。

為了展示一個更簡單的 Sass 函數,我們將創建一個使用 darken($color, $amount) 的快速片段 製作懸停效果。

$awesome-blue: #2196F3;

a {
  padding: 10px 15px;
  background-color: $awesome-blue;
}

a:hover {
  background-color: darken($awesome-blue,10%);
}
a {
  padding: 10px 15px;
  background-color: #2196F3; 
}

a:hover {
  background-color: #0c7cd5; 
}

除了龐大的可用功能列表外,您還可以定義自己的選項。 Sass 也支持流控制,所以如果你願意,你可以創建相當複雜的行為。

結論

上面的一些特性將來會出現在標準 CSS 中,但它們還沒有完全出現。同時,預處理器是改善 CSS 編寫體驗的好方法,而 Sass 是一個不錯的選擇。

我們在這裡只介紹了表面,但 Sass 的內容遠不止這些。如果您想更熟悉它所提供的一切,請點擊以下鏈接:

  • Sass 文檔
  • Sass 函數的完整列表
  • Sass Way 教程
  • CSS 預處理器對比圖

Tutorial JavaScript 教程
  1. 是否可以以更簡單的方式編寫此代碼?

  2. 在 JavaScript 中拋出新的警告?

  3. 在 10 分鐘內使用標準庫 + Code.xyz 構建 Reddit 版主機器人

  4. 使用jQuery查看元素是否存在

  5. 審核後:將 Create-React-App 遷移到 Vite

  6. React Native 文檔的新入門!

  7. 我正在尋找 Django 和 react 程序員來交流知識。

  1. Vue.js 全球峰會 22 - 高級賽道活動總結 #1

  2. 構建數獨拼圖生成器

  3. 15 個精選的 jQuery 片段

  4. Mac 版 Trickster:快速訪問您的最新文件 – 僅需 4.97 美元

  5. Javascript 添加前導零至今

  6. Bill Division (HackerRank Javascript 解決方案)

  7. JavaScript 和操作 DOM

  1. 如何在 Next.js 中使用 Stripe.js 和 React.js 構建信用卡表單

  2. 我應該在 React 中使用事件委託嗎?

  3. 為生產優化 Docker 鏡像的速成課程

  4. React Redux:使用 JWT 和 Axios 的令牌認證示例