Sass SCSS variables scoping, selector nesting rules, and clean code practices.
Variables & Nesting
Variables
Khai báo biến bằng $. Dùng cho giá trị lặp lại: màu, font, spacing, breakpoint.
Phạm vi biến
Biến khai báo ngoài cùng là global. Biến trong block { } là local. !global ép gán ra global, !default chỉ gán nếu biến chưa có giá trị (dùng cho config có thể override).
SCSS variable vs CSS custom property
Có thể kết hợp: gán CSS custom property từ biến SCSS.
Dấu #{} là interpolation, chèn giá trị SCSS vào nơi cần chuỗi/CSS.
Nesting
Lồng selector con bên trong cha, khớp cấu trúc DOM. Compile ra selector phân cấp.
Compile ra:
Không lồng quá sâu (tối đa 3 cấp). Lồng sâu tạo selector dài, specificity cao, khó override.
Parent selector &
& tham chiếu selector cha. Dùng cho pseudo-class, state, và đặc biệt là BEM.
Compile ra:
&--primary ghép thành .btn--primary, hợp với quy ước BEM (Block, Element, Modifier) thường dùng trong AEM component.
Nesting properties
Thuộc tính cùng tiền tố (font-, margin-) có thể lồng. Ít dùng.
Tips cho AEM
Đặt biến design system (màu, breakpoint, spacing) trong một partial dùng chung (styles/_variables.scss), import vào mọi component SCSS để đồng nhất. Selector gốc của component nên khớp sling:resourceType hoặc class BEM theo tên component để tránh xung đột style giữa các component.