Hướng dẫn cú pháp scss

Cú pháp viết SCSS

  • Cú pháp viết SCSS được thiết kế lại từ SASS, hoàn toàn dựa theo cấu trúc của CSS, nhưng được cải tiến linh hoạt hơn.
  • Xem một vài ví dụ mẫu sau đây sẽ giúp bạn hình dung phần nào về cấu trúc SCSS.
SCSSCSS

tag-cha {
    thuộc-tính: giá-trị;
    thuộc-tính: giá-trị;
    tag-con-1 {
        thuộc-tính: giá-trị;
        thuộc-tính: giá-trị;
    }
    tag-con-2 {
        thuộc-tính: giá-trị;
        thuộc-tính: giá-trị;
    }
}

tag-cha {
    thuộc-tính: giá-trị;
    thuộc-tính: giá-trị;
}
tag-cha tag-con-1 {
    thuộc-tính: giá-trị;
    thuộc-tính: giá-trị;
}
tag-cha tag-con-2 {
    thuộc-tính: giá-trị;
    thuộc-tính: giá-trị;
}

tag {
    họ-thuộc-tính: {
        tên-thuộc-tính: giá-trị;
        tên-thuộc-tính: giá-trị;
    }
}

tag {
    họ-tên-thuộc-tính: giá-trị;
    họ-tên-thuộc-tính: giá-trị;
}

  • Xem một vài ví dụ mẫu sau đây sẽ giúp bạn hình dung thêm phần nào về cấu trúc SCSS.

Ví dụ về SCSS syntax

SCSSCSS

.main {
  margin: 0 auto;
  width: 600px;
  .section {
    padding: 20px;
  }
  .info {
    background-color: #ccc;
  }
}

.main {
  margin: 0 auto;
  width: 600px;
}
.main .section {
  padding: 20px; 
}
.main .info {
  background-color: #ccc; 
}

body {
  font:{
    family: Arial, sans-serif;
    size: 16px;
  }
}

body {
  font-family: Arial, sans-serif;
  font-size: 16px; 
}

  • Giờ thì bạn đã hình dung được cách viết SCSS như thế nào rồi he, khi nào thực tế thì bạn sẽ nắm nó rõ hơn, giờ thì học tiếp các nội dung "linh tinh" liên quan thôi ^^.

Hướng dẫn học SCSS, nội dung bài học đơn giản, khoa học giúp bạn cài đặt, tự động thực thi file CSS chỉ với thao tác save, giúp bạn làm quen với các nội dung của SCSS một cách nhanh chóng và dễ hiểu nhất.

  • SCSS là gì? - giúp bạn hiểu được SCSS có thể làm gì.
  • Biên dịch SCSS sang CSS - hướng dẫn cài đặt từ con số 0.
  • SCSS auto compile - hướng dẫn cài đặt tự động biên dịch SCSS sang CSS.
  • Cú pháp viết SCSS - hướng dẫn cách viết cấu trúc.
  • SCSS - biến (variable) - khai báo và xử lý biến.
  • SCSS - toán tử (oparator) - tính toán.
  • SCSS - Nesting - cách viết phân cấp.
  • SCSS - @extend - kế thừa thuộc tính.
  • SCSS - @mixin & @include - khai báo và kế thừa kết hợp đối số.
  • SCSS - Placeholders - khá giống @mixin, tuy nhiên sẽ gom các thành phần có cùng Placeholders lại với nhau.
  • SCSS - @function - hướng dẫn tạo và gọi hàm.
  • SCSS - câu lệnh @if @else - hướng dẫn cách viết câu lệnh if.
  • SCSS - vòng lặp @for - hướng dẫn cách viết vòng lặp for.
  • SCSS - vòng lặp @while - hướng dẫn cách viết vòng lặp while.
  • SCSS - vòng lặp @each - hướng dẫn cách viết vòng lặp each.
  • SCSS - @import - kết hợp các file SCSS.

Bắt đầu học SCSS thôi

Khi viết code Sass với cú pháp SCSS hãy bắt đấu viết những gì mong muốn như từng viết CSS, trong quá trình đó ta sẽ tìm hiểu những tính năng mở rộng áp dụng vào các khối code SCSS

Các biến trong SCSS

Cú pháp khai báo biến:

$tenbien: giatri;

Biến khai báo bắt đầu bằng ký hiệu dollar ($) và nối tiếp là các ký tự tên biến, kết thúc tên biến là ký hiệu :, sau dấu : là giá trị nào đó gán vào biết và kết thúc bởi ;. Ví dụ sau khai báo biến $red, giá trị biến đó giữ là mã màu #dd0000

$red: #dd0000;

Sử dụng biến

Khi nào muốn sử dụng giá trị của biến, trong code SCSS chỉ việc gọi lại tên biến, tại vị trí gọi đó tên biến sẽ thay thế bởi giá trị của biến. Ví dụ:

$red: #dd0000;

.box {
  color: $red;              //Gán thuộc tính bằng giá trị từ biến $red
  border: 1px solid $red;   //Gán thuộc tính bằng giá trị từ biến $red
}

Kết quả CSS sinh ra

.box {
  color: #dd0000;
  border: 1px solid #dd0000; }

Khi sử dụng biến để viết SCSS, chúng ta có thể nhanh chóng thay đổi thuộc tính của rất nhiều phần tử CSS có sử dụng đến giá trị biến

Nguyên lý lồng nhau trong SCSS (Nesting)

Như đã biết trong CSS có thể thiết lập đến các phần tử con bằng cách viết Selector phù hợp, trong SCSS có thể viết theo cách đúng như vậy, ngoài ra có thể đặt phần tử con bên trong khối {} phần tử cha, nó cũng sinh ra CSS theo mối quan hệ cha con phù hợp, việc đó chính là sự lồng nhau (Nesting

Ví dụ CSS định dạng phần tử ul có lớp .nav, sau đó định dạng các phần tử con li chứa bên trong nó. Bạn thấy ký hiệu ul.nav li cho biết li thiết lập là phần tử con của ul.nav, nếu vậy trong SCSS chỉ việc đặt li bên trong ul.nav để có kết quả tương tự, viết như phần bên phải

// CSS
ul.nav {
  list-style: none;
}

ul.nav li {
  padding: 10px;
}

// SCSS
ul.nav {
  list-style: none; 
  li {
    padding: 10px;
  }
}

Phần tử con cấp 1 của phần tử cha, ký hiệu &

Ký hiệu & có nghĩa là phần tử cha. Để khai báo phần tử con cấp 1 sử dụng ký hiệu và & ở phía trước, ví dụ:

// SCSS
ul {
    padding: 20px;
    &.title {
        color: red;
    }
}

// CSS
ul {
  padding: 20px; }
  ul.title {
    color: red; }


// SCSS
ul {
    padding: 20px;
    &.title {
        color: red;
        &.titlesmall {
            font-size: 60%;
        }
    }
}

// CSS
ul {
  padding: 20px;}

ul.title {
    color: red; }

ul.title.titlesmall {
      font-size: 60%; }

Ký hiệu & áp dụng tương tự cho pseudo selectors

Như đã biết các pseudo selectors là định nghĩa một phần của phần tử, trong CSS đã biết có các pseudo selectors cho class như: a:link, a:visited, div:hover, a:active, div:first-child ... (Xem chi tiết tại pseudo selector)

Trong SASS SCSS thì để khai báo các pseudo selector này dùng đến ký hiệu &:selector_class, ví dụ sau gạch chân đường link khi hover chuột, khi active

// SCSS
a {
  text-decoration: none;
  &:hover, &:active {
    text-decoration: underline;
  }
}

// CSS
a {
  text-decoration: none; }

a:hover, a:active {
    text-decoration: underline; }

Một cách áp dụng lựa chọn phần tử cha & nữa như sau: bổ xung thêm tính chất cho loại phần tử cha lồng vào trong phần tử con

// SCSS
.article h2 {
    background-color: #FFAFA5;
    .home & {
        background-color: #BBFCA2;
    }
    .about {
        background-color: #A0ADF1;
    }
}

// CSS
.article h2 {
    background-color: #FFAFA5; }

.home .article h2 {
    background-color: #BBFCA2; }

.article h2 .about {
    background-color: #A0ADF1; }

Một cách tiện lợi nữa đó là ký hiệu phần tử cha & được dùng như là một thành phần tên của phần tử con. Ví dụ sau ký hiệu &-small tự động sinh ra phần tử .footer-small

// SCSS
.footer {
  background: #b87474;
  &-middle {
    background: #ca2020;
  }
  &-small {
    background: #3d3838;
  }
}

// CSS
.footer {
  background: #b87474; }

.footer-middle {
    background: #b87474; }

.footer-small {
    background: #b87474; }

Lồng nhau về thuộc tính CSS

Nguyên lý lồng nhau ở trên cũng áp dụng cho nhiều thuộc tính có cùng tiền tố, trong CSS có rất nhiều thuộc tính mà tiền tố giống nhau ví dụ vài tiền tố như:

  • Tiền tố font: với các thuộc tính như font-size, font-family
  • Tiền tố background: với các thuộc tính như background-color, background-image ...
  • Tiền tố list-style: với các thuộc tính như list-style-image, list-style-style ...
  • Tiền tố margin: với các thuộc tính như margin-left, margin-bottom ...
  • Tiền tố padding: với các thuộc tính như padding-right, padding-top ...
  • Tiền tố border: với các thuộc tính như border-left, border-width, border-color ...

Với các thuộc tính này có thể viết trong SCSS/SASS bằng cách chỉ ra tiền tố tiento: (nhớ dấu : sau tiền tố rồi đến {}), và các hậu tố bên trong {}, ví dụ:

// SCSS
.box {
  border: {
    color: black;
    width: 2px;
    radius:5px;
  }
}

// CSS
.box {
  border-color: black;
  border-width: 2px;
  border-radius: 5px; }



Sử dụng lại mã SCSS với @extend

Trong SCSS có một phần tử lớp là .phantu1 thì có thể áp tất cả các thuộc tính của phần tử đó vào phần tử khác bằng cú pháp @extend .phantu1;

// SCSS
.box {
  border: 1px solid red;
  background: silver;
}

.quote {
  @extend .box;
  color: yellow;
}

// CSS
.box, .quote {
  border: 1px solid red;
  background: silver; }

.quote {
  color: yellow; }



Giữ chỗ placeholder và sử dụng lại với @extend

Ở ví dụ trên có sử dụng lại thuộc tính khai báo trong phần tử lớp .box, lưu ý rằng khai báo như vậy thì trong mã CSS có sinh ra lớp .box, trong nhiều trường hợp chỉ muốn khai báo các thuộc tính và sử dụng lại với @extend chứ không cần có sinh ra một lớp gốc thì sử dụng kỹ thuật giữ chỗ placeholder bằng cách khai báo sử dụng ký hiệu %, xem ví dụ sau:

// SCSS
%box {
  border: 1px solid red;
  background: silver;
}

.quote {
  @extend %box;
  color: yellow;
}

// CSS
.quote {
  border: 1px solid red;
  background: silver; }

.quote {
  color: yellow; }



CSS không có sinh ra một phần tử lớp .box nữa