Hướng dẫn sass/scss - sass / scss

SASS: Là gì, tại sao và như thế nào?

SASS là một bộ tiền xử lý CSS, giúp bạn sử dụng các tính năng không tồn tại trong CSS như các biến, lồng nhau, mixins, function, các tính năng tiện lợi khác. Điều này giúp cho code dễ đọc, ngắn gọn, dễ kế thừa và maintain hơn so với cách viết CSS truyền thống. Khi bạn bắt đầu chạy, nó sẽ lấy tệp Sass của bạn, chuyển đổi và lưu nó dưới dạng tệp CSS bình thường mà bạn có thể sử dụng trong trang web của mình.

Khởi tạo dự án

Đầu tiên, cần tạo 1 package.json giúp quản lý các package version cũng như khởi chạy dự án thông qua npm

npm init -y

Bạn có thể tham khảo cây thư mục dưới đây của mình

.
├─ node_modules/
├─ public/
│  ├─ styles/
│  ├─ index.html
├─ src/
│  ├─ scss/
package.json

Tại sao phải chia ra 2 thư mục src/

.
├─ node_modules/
├─ public/
│  ├─ styles/
│  ├─ index.html
├─ src/
│  ├─ scss/
package.json
0? Bởi vì source code từ src/ sẽ được biên dịch và tự động đặt vào thư mục
.
├─ node_modules/
├─ public/
│  ├─ styles/
│  ├─ index.html
├─ src/
│  ├─ scss/
package.json
0. Khi giữ sự tách biệt các thư mục này, bạn có thể chắc chắn rằng mọi thứ bạn cần để đưa web của mình lên môi trường Product đều nằm trong thư mục
.
├─ node_modules/
├─ public/
│  ├─ styles/
│  ├─ index.html
├─ src/
│  ├─ scss/
package.json
0 và mọi thứ để triển khai phát triển dự án của bạn đều nằm trong thư mục src/.

Cài đặt SASS

Đầu tiên, chúng ta sẽ cài đặt sass , thư viện giúp để biên dịch

.
├─ node_modules/
├─ public/
│  ├─ styles/
│  ├─ index.html
├─ src/
│  ├─ scss/
package.json
5 hoặc
.
├─ node_modules/
├─ public/
│  ├─ styles/
│  ├─ index.html
├─ src/
│  ├─ scss/
package.json
6 các tệp thành
.
├─ node_modules/
├─ public/
│  ├─ styles/
│  ├─ index.html
├─ src/
│  ├─ scss/
package.json
7.

npm install -D sass

Trong file package.json, chúng ta sẽ thêm 1 dòng khởi chạy giúp biên dịch SASS.

"scripts": {
  ...
  "start": "sass src/scss:public"
  ...
}

Dòng khởi chạy có dạng

.
├─ node_modules/
├─ public/
│  ├─ styles/
│  ├─ index.html
├─ src/
│  ├─ scss/
package.json
9, chúng ta sẽ khai báo cho sass cần biên dịch bất kỳ file
.
├─ node_modules/
├─ public/
│  ├─ styles/
│  ├─ index.html
├─ src/
│  ├─ scss/
package.json
6 nào mà nó tìm thấy (ngoại trừ những tệp bắt đầu bằng dấu gạch dưới) từ thư mục
npm install -D sass
1 và xuất tới
.
├─ node_modules/
├─ public/
│  ├─ styles/
│  ├─ index.html
├─ src/
│  ├─ scss/
package.json
0.

Viết code

Sau khi đã cài đặt SASS, chúng ta có thể bắt đầu làm việc trên dự án của mình. Chúng ta sẽ bắt đầu bằng cách tạo một file

.
├─ node_modules/
├─ public/
│  ├─ styles/
│  ├─ index.html
├─ src/
│  ├─ scss/
package.json
6 trong thư mục
npm install -D sass
1. Tạo một file
npm install -D sass
5 trong
npm install -D sass
1 và import nó vào
npm install -D sass
7.

// main.scss
@import '_base';

h2 {
    color: tomato;
    font-family: system-ui, -apple-system, Roboto, sans-serif;
}

npm install -D sass
5 là một file chứa tất cả các style cơ bản cho dự án. Đó là một nơi tốt để đặt các style global như màu sắc, phông chữ, kích thước và các style khác được sử dụng trong toàn bộ dự án.

Có 1 số style cơ bản thường dùng như:

// _base.scss
*, *:before, *:after {
  box-sizing: border-box;
}

h2, h2, h3, h4, h5, h6 {
  margin: 0;
}

html, body, ul, ol, li, figure, blockquote, dl, dd {
  margin: 0;
  padding: 0;
}

Thêm SASS vào HTML

Trình duyệt không thể hiểu SASS. Vì vậy, chúng ta cần thêm file đã biên dịch của SASS (CSS) vào HTML. Chúng ta có thể thêm bằng cách thêm thẻ

npm install -D sass
9 vào trong
"scripts": {
  ...
  "start": "sass src/scss:public"
  ...
}
0.

DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Documenttitle>
  <link rel="stylesheet" href="styles/main.css">
head>
<body>
  <h2>Hello Worldh2>
body>
html>    

Bây giờ chúng ta có thể chạy

"scripts": {
  ...
  "start": "sass src/scss:public"
  ...
}
1 tại terminal để chuyển đổi từ
.
├─ node_modules/
├─ public/
│  ├─ styles/
│  ├─ index.html
├─ src/
│  ├─ scss/
package.json
6 sang
.
├─ node_modules/
├─ public/
│  ├─ styles/
│  ├─ index.html
├─ src/
│  ├─ scss/
package.json
7.

Môi trường Development và Production

Có 1 vài sự khác biệt khi build ở môi trường development và production. Nếu ở môi trường Dev, bạn cần giữ code nguyên vẹn, cùng với

"scripts": {
  ...
  "start": "sass src/scss:public"
  ...
}
4 giúp debug và dễ dàng tìm kiếm khi phát sinh lỗi, lỗi ở đâu. Nếu ở môi trường Prod, bạn cần nén code, loại bỏ
"scripts": {
  ...
  "start": "sass src/scss:public"
  ...
}
4, những khoảng trống và comment không cần thiết để tăng hiệu suất.

Khi nãy chúng ta đã tạo 1 lệnh giúp build code về CSS, bây giờ hãy tách riêng nó ra 2 phiên bản cho phù hợp với đặc điểm của mỗi môi trường.

"scripts": {
    ...
    "sass:dev": "sass --watch --embed-source-map src/scss:public/styles",
    "sass:prod": "sass --no-source-map --style compressed src/scss:public/styles"
    ...
}

Dev Script:

"scripts": {
  ...
  "start": "sass src/scss:public"
  ...
}
6 giúp SASS lắng nghe trong thư mục
npm install -D sass
1 và biên dịch lại nếu phát hiện có sự thay đổi trong file.
"scripts": {
  ...
  "start": "sass src/scss:public"
  ...
}
8 để tạo ra
"scripts": {
  ...
  "start": "sass src/scss:public"
  ...
}
4 dành cho file CSS đã được biên dịch.
:
"scripts": {
  ...
  "start": "sass src/scss:public"
  ...
}
6 giúp SASS lắng nghe trong thư mục
npm install -D sass
1 và biên dịch lại nếu phát hiện có sự thay đổi trong file.
"scripts": {
  ...
  "start": "sass src/scss:public"
  ...
}
8 để tạo ra
"scripts": {
  ...
  "start": "sass src/scss:public"
  ...
}
4 dành cho file CSS đã được biên dịch.

Prod Script: Sử dụng

// main.scss
@import '_base';

h2 {
    color: tomato;
    font-family: system-ui, -apple-system, Roboto, sans-serif;
}
0 để không khởi tạo
"scripts": {
  ...
  "start": "sass src/scss:public"
  ...
}
4. Còn
// main.scss
@import '_base';

h2 {
    color: tomato;
    font-family: system-ui, -apple-system, Roboto, sans-serif;
}
2 giúp nén và loại bỏ bất kỳ khoảng trắng không cần thiết nào khỏi file CSS đã biên dịch. Cả hai tùy chọn này sẽ giảm kích thước file và cải thiện hiệu suất khi tải trang.
: Sử dụng
// main.scss
@import '_base';

h2 {
    color: tomato;
    font-family: system-ui, -apple-system, Roboto, sans-serif;
}
0 để không khởi tạo
"scripts": {
  ...
  "start": "sass src/scss:public"
  ...
}
4. Còn
// main.scss
@import '_base';

h2 {
    color: tomato;
    font-family: system-ui, -apple-system, Roboto, sans-serif;
}
2 giúp nén và loại bỏ bất kỳ khoảng trắng không cần thiết nào khỏi file CSS đã biên dịch. Cả hai tùy chọn này sẽ giảm kích thước file và cải thiện hiệu suất khi tải trang.

Kết luận

  • SCSS là một công cụ giúp bạn viết CSS rõ ràng, dễ dàng và ít tốn kém hơn trong một cấu trúc chương trình.
  • Trình duyệt không thể hiểu SASS. Vì vậy, chúng ta cần chuyển SCSS sang CSS.
  • Trong môi trường Development, việc sử dụng
    "scripts": {
      ...
      "start": "sass src/scss:public"
      ...
    }
    
    4 cho trình duyệt sẽ tái tạo lại code ban đầu và hiển thị bản gốc đã được tái tạo lại trong trình gỡ lỗi.
  • Trong môi trường Production, hãy xóa
    "scripts": {
      ...
      "start": "sass src/scss:public"
      ...
    }
    
    4 và giảm kích thước tệp để tải trang nhanh hơn, giúp đạt được hiệu suất tốt hơn.