Tìm hiểu về SASS/LESS


SASS là một CSS Prepocessor (như LESS) giúp bạn viết CSS nhanh hơn và có cấu trúc rõ ràng hơn. Với SASS, bạn có thể viết CSS theo thứ tự rõ ràng, quản lý các biến đã được định nghĩa sẵn, có thể tự động nén tập tin CSS lại để bạn tiết kiệm dung lượng.

Nếu bạn viết một lượng rất lớn về CSS, một bộ xử lý có thể làm giảm mức độ căng thẳng của bạn và giúp bạn tiết kiệm rất nhiều thời gian quý báu. Sử dụng các công cụ như Sass , less , Stylus hoặc PostCS . Làm stylesheets lớn , phức tạp dễ hiểu hơn và dễ dàng hơn để duy trì. Nhờ tính năng giống như các biến, function và mixins các mã sẽ trở nên có tổ chức hơn, cho phép các nhà phát triển web làm việc nhanh hơn và phạm sai lầm ít hơn.

Ban đầu, Sass là một phần của một preprocessor khác gọi là Haml (dành cho HTML), được thiết kế và viết bởi các lập trình viên Ruby. Bởi vậy, Sass stylesheets sử dụng cú pháp giống như Ruby với việc không có các dấu ngoặc nhọn {}, dấu chấm phẩy ; và thụt đầu dòng nghiêm ngặt.

  • CSS Prepocessor mạnh nhất hiện nay.
  • Giản lược cách viết các thẻ CSS.
  • Có thể kế thừa và tái sử dụng (không phải copy/paste).
  • Vì mang tính kế thừa, nên sửa một chỗ, có thể cập nhật ở những chỗ khác mà không sợ thiếu sót.
  • Tạo được biến, mixin... và viết theo cấu trúc cây thư mục rất trực quan và dễ quản lý.

API docs

Cài đặt, thiết lập môi trường

Yêu cầu: NodeJS

npm install -g sass node-sass

Tạo một file main.sass như sau:

#menu
*li
**background: red
**color: #FFF
*a
**color: yellow
**padding: 20px

Sau đó mở command lên chạy lệnh

sass main.sass:main.css

Kết quả

#menu li {
**background: red;
**color: #FFF;
}

#menu a {
**color: yellow;
**padding: 20px;
}

SASS khá là nhạy cảm với indent là tab hay space, tab thì tab hết còn space thì là space hết (space có thể 2-space hoặc 4-space).

Bạn có thể compile bằng CMD như cách ở trên tuy nhiên trên thực tế khi làm project thì chúng ta sẽ sử dụng Node để render hoặc dùng Gulp/Webpack/Grunt ... để compile (tuỳ theo nhu cầu thực tế). Phần này sẽ được nói chi tiết hơn trong bài viết khác.

Cú phápCode (*.sass)Compile (*.css)
@extend
.floatLeft
*float: left
*width: 50%

.columnLeft
*@extend .floatLeft
*backgroud: #ffffff
.floatLeft, .columnLeft {
*float: left;
*width: 50%;
}

.columnLeft {
*backgroud: #ffffff;
}
Placer Hoder
%message
*border: solid 1px
*text-align: center
*font-size: 16px
*padding: 20px 10px

.error
*@extend %message
*background: red
.success
*@extend %message
*background: green
.error, .success {
*border: solid 1px;
*text-align: center;
*font-size: 16px;
*padding: 20px 10px;
}

.error {
*background: red;
}

.success {
*background: green;
}
Variable
$color-yellow : yellow
.error
*color: $color-yellow;
.error {
*color: yellow;
}
Mixin
=menu($id, $backgroud:white)
*ul#{$id}
**li
***height: 30px
***line-height: 30px
***a
****background: $background
****text-decoration: none

+menu(menu1, red)
+menu(menu2, blue)
ul#menu1 li {
*height: 30px;
*line-height: 30px;
}

ul#menu1 li a {
*background: red;
*text-decoration: none;
}

ul#menu2 li {
*height: 30px;
*line-height: 30px;
}

ul#menu2 li a {
*background: blue;
*text-decoration: none;
}
@For
@for $i from 1 through 4
*#item-#{$i}
**background: red
#item-1 {
*background: red;
}

#item-2 {
*background: red;
}

#item-3 {
*background: red;
}

#item-4 {
*background: red;
}
Function
@function width_wrapper($value : 20)
*@return ($value + 20px);

.wrapper
*width: width_wrapper(80px)
.wrapper {
width: 100px;
}

Lựa chọn function, mixin hay place holder?

Việc lựa chọn Funtion, Mixin hay Place Hoder sẽ phụ thuộc vào mục đích của bạn. Nhưng trước tiên mình cần nắm vững khái niệm của chúng.

Function dùng để xử lý một nhiệm vụ và nó sẽ trả về một kết quả duy nhất nên việc trả về một đoạn CSS dài ngoằn là điều không thể, vì vậy thông thường ta dùng function trong những trường hợp xủ lý một nhiệm vụ nào đó và mục đích cuối cùng là lấy một kết quả.

Mixin như ta đã học thì nó giống như một procedure dùng để gom nhóm một đoạn code CSS lại.

Place Holder có chức năng giống Mixin, tuy nhiên có sự khác biệt là bạn không thể khai báo tham số trong Place Holder.

Dựa vào những yếu tố trên bạn sẽ quyết định nên sử dụng phần nào vào project của bạn.

Các hàm xử lý chuỗi trong SASS

Tên hàmMô tả
unquote($string)Xóa các cặp quote ra khỏi chuỗi$string.
quote($string)Thêm cặp quote bao quanh chuỗi$string
str-length($string)Trả về tổng số ký tự của chuỗi$string
str-insert($string,$insert,$index)Thêm chuỗi $insert vào chuỗi $string tại vị trí$index
str-index($string, $substring)Kiểm tra vị trí xuất hiện chuỗi $subtring trong chuỗi$string
str-slice($string,$start-at,[$end-at])Cắt chuỗi bắt đầu từ$start-at và kết thúc tại$end-at, trường hợp không truyền$end-at thì nó lấy đến cuối chuỗi.
to-upper-case($string)Chuyển chuỗi $string sang chữ in hoa
to-lower-case($string)Chuyển chuỗi$string sang chữ in thường

Các hàm xử lý Number trong SASS

Tên hàmMô tả
percentage($number)Biến đổi số$number thành tỉ lệ phần trăm (%)
round($number)Làm tròn số$number
ceil($number)Làm tròn số$number ở cận trên
floor($number)Làm tròn số$number ở cận dưới
abs($number)Tính giá trị tuyệt đối cho$number
min($numbers…)Tìm số$number nhỏ nhất trong dãy truyền vào
max($numbers…)Tìm số$number lớn nhất trong dãy truyền vào
random([$limit])Random ngẫu nhiên một con số không quá$limit.
TOP