SASS P3 – Variable – Data Type – Operation – Interpolation
- Tram Ho
1. Variables
Giống với các ngôn ngữ lập trình ta khai báo biến để lưu trữ một giá trị được sử dụng nhiều lần. Để khai báo một biến ta sử dụng kí tự $
đằng trước tên biến
1 2 3 4 | <span class="token property"><span class="token variable">$text-success</span></span><span class="token punctuation">:</span> #3c763d<span class="token punctuation">;</span> <span class="token selector">h1.big-title </span><span class="token punctuation">{</span> <span class="token property">color</span><span class="token punctuation">:</span> <span class="token variable">$text-success</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> |
Kết quả
1 2 | <span class="token selector">h1.big-title</span> <span class="token punctuation">{</span> <span class="token property">color</span><span class="token punctuation">:</span> #3c763d<span class="token punctuation">;</span> <span class="token punctuation">}</span> |
2. Global Variables
Ở ví dụ trên nếu ta khai báo biến $text-success
ở bên ngoài không nằm trong bất kì bộ chọn nào thì ở chỗ nào ta cũng có thể gọi được đến biến đó. Nhưng nếu bạn khai báo biến ở bên trong 1 bộ chọn thì phạm vi của biến sẽ chỉ nằm trong bộ chọn đấy.
1 2 3 4 5 6 7 8 9 10 | <span class="token selector">h2 </span><span class="token punctuation">{</span> <span class="token property"><span class="token variable">$text-success</span></span><span class="token punctuation">:</span> #3c763d<span class="token punctuation">;</span> <span class="token selector">span </span><span class="token punctuation">{</span> <span class="token property">color</span><span class="token punctuation">:</span> <span class="token variable">$text-success</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token selector">h3 </span><span class="token punctuation">{</span> <span class="token property">color</span><span class="token punctuation">:</span> <span class="token variable">$text-success</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> |
Ở ví dụ trên bạn có thể hiểu được là biến $text-success
được khai báo bên trong bộ chọn selector của h2 nên thẻ span nằm trong h2 có thế sử dụng được nhưng h3 thì không.
Để h3 sử dụng được biến trên thì ta thêm !global
như dưới đây là ok
1 2 3 4 5 6 7 8 9 10 | <span class="token selector">h2 </span><span class="token punctuation">{</span> <span class="token property"><span class="token variable">$text-success</span></span><span class="token punctuation">:</span> #3c763d !global<span class="token punctuation">;</span> <span class="token selector">span </span><span class="token punctuation">{</span> <span class="token property">color</span><span class="token punctuation">:</span> <span class="token variable">$text-success</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token selector">h3 </span><span class="token punctuation">{</span> <span class="token property">color</span><span class="token punctuation">:</span> <span class="token variable">$text-success</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> |
3. Data Types
Sass hỗ trợ 8 kiểu dữ liệu khác nhau:
- numbers: 1.2, 13, 10px
- strings of text, có hoặc không có dấu nháy: “foo”, ‘foo’, foo
- colors: blue, green, #04a3f9, rgba(255, 0, 0, 0.5)
- booleans: true, false
- nulls: null
- lists of values, ngăn cách nhau bởi dấu cách hoặc dấu phẩy: 1.5em 1em 0 2em, Helvetica, Arial, sans-serif
- maps from one value to another: (key1: value1, key2: value2)
- function references
4. Operations
Sass hỗ trợ các kiểu toán tử so sánh, tính toán cộng, trừ, nhân, chia, lấy dư. Ngoài ra còn dùng được khi nối chuỗi.
4.1. Number Operations
Các kiểu hỗ trợ tính toán so sánh áp dụng với Data Types là Number. Xem ví dụ dưới đây để hiểu cách làm việc của Sass (lưu ý đặc biệt giữa kí hiệu slash /
và phép chia /
)
1 2 3 4 5 6 7 8 9 10 | <span class="token selector">p </span><span class="token punctuation">{</span> <span class="token property">font</span><span class="token punctuation">:</span> 10px/8px<span class="token punctuation">;</span> <span class="token comment">// Plain CSS, no division</span> <span class="token property"><span class="token variable">$width</span></span><span class="token punctuation">:</span> 1000px<span class="token punctuation">;</span> <span class="token property">width</span><span class="token punctuation">:</span> <span class="token variable">$width</span>/2<span class="token punctuation">;</span> <span class="token comment">// Uses a variable, does division</span> <span class="token property">height</span><span class="token punctuation">:</span> <span class="token punctuation">(</span>500px/2<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// Uses parentheses, does division</span> <span class="token property">line-height</span><span class="token punctuation">:</span> <span class="token function">round</span><span class="token punctuation">(</span>1.5<span class="token punctuation">)</span>/2<span class="token punctuation">;</span> <span class="token comment">// Uses a function, does division</span> <span class="token property">margin-left</span><span class="token punctuation">:</span> 5px <span class="token operator">+</span> 8px/2px<span class="token punctuation">;</span> <span class="token comment">// Uses +, does division</span> <span class="token property">font</span><span class="token punctuation">:</span> <span class="token punctuation">(</span>italic bold 10px/8px<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// In a list, parentheses don't count</span> <span class="token punctuation">}</span> |
Kết quả
1 2 3 4 5 6 7 8 9 | <span class="token selector">p</span> <span class="token punctuation">{</span> <span class="token property">font</span><span class="token punctuation">:</span> 10px/8px<span class="token punctuation">;</span> <span class="token property">width</span><span class="token punctuation">:</span> 500px<span class="token punctuation">;</span> <span class="token property">height</span><span class="token punctuation">:</span> 250px<span class="token punctuation">;</span> <span class="token property">line-height</span><span class="token punctuation">:</span> 1<span class="token punctuation">;</span> <span class="token property">margin-left</span><span class="token punctuation">:</span> 9px<span class="token punctuation">;</span> <span class="token property">font</span><span class="token punctuation">:</span> italic bold 10px/8px<span class="token punctuation">;</span> <span class="token punctuation">}</span> |
4-2. Color Operations
Sass hỗ trợ việc tính toán các giá trị màu sắc lần lượt dựa trên 3 màu chính red, green, blue
1 2 3 4 5 6 7 8 9 10 | <span class="token selector">.ex1 </span><span class="token punctuation">{</span> <span class="token property">color</span><span class="token punctuation">:</span> #010203 <span class="token operator">+</span> #040506<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token selector">.ex2 </span><span class="token punctuation">{</span> <span class="token property">color</span><span class="token punctuation">:</span> #010203 <span class="token operator">*</span> 2<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token selector">.ex3 </span><span class="token punctuation">{</span> <span class="token property">color</span><span class="token punctuation">:</span> <span class="token function">rgba</span><span class="token punctuation">(</span>255<span class="token punctuation">,</span> 0<span class="token punctuation">,</span> 0<span class="token punctuation">,</span> 0.75<span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token function">rgba</span><span class="token punctuation">(</span>0<span class="token punctuation">,</span> 255<span class="token punctuation">,</span> 0<span class="token punctuation">,</span> 0.75<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> |
- Với ex1: 01 + 04 = 05, 02 + 05 = 07, 03 + 06 = 09
- Với ex2: 01 * 2 = 02, 02 * 2 = 04, 03 * 2 = 06
- Với ex3: cộng giá trị tương ứng với mỗi phần tử
1 2 3 4 5 6 7 8 9 10 | <span class="token selector">.ex1</span> <span class="token punctuation">{</span> <span class="token property">color</span><span class="token punctuation">:</span> #050709<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token selector">.ex2</span> <span class="token punctuation">{</span> <span class="token property">color</span><span class="token punctuation">:</span> #020406<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token selector">.ex3</span> <span class="token punctuation">{</span> <span class="token property">color</span><span class="token punctuation">:</span> <span class="token function">rgba</span><span class="token punctuation">(</span>255<span class="token punctuation">,</span> 255<span class="token punctuation">,</span> 0<span class="token punctuation">,</span> 0.75<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> |
4-3. String Operations
Nối chuỗi lại với nhau sử dụng dấu +
, lưu ý chỉ áp dụng với Data Types là String
1 2 3 4 5 6 | <span class="token selector">p:before </span><span class="token punctuation">{</span> <span class="token property">content</span><span class="token punctuation">:</span> <span class="token string">"Foo "</span> <span class="token operator">+</span> Bar<span class="token punctuation">;</span> <span class="token property">font-family</span><span class="token punctuation">:</span> sans- <span class="token operator">+</span> <span class="token string">"serif"</span><span class="token punctuation">;</span> <span class="token property">margin</span><span class="token punctuation">:</span> 3px <span class="token operator">+</span> 4px auto<span class="token punctuation">;</span> <span class="token punctuation">}</span> |
Kết quả
1 2 3 4 5 6 | <span class="token selector">p:before</span> <span class="token punctuation">{</span> <span class="token property">content</span><span class="token punctuation">:</span> <span class="token string">"Foo Bar"</span><span class="token punctuation">;</span> <span class="token property">font-family</span><span class="token punctuation">:</span> <span class="token string">"san-serif"</span><span class="token punctuation">;</span> <span class="token property">margin</span><span class="token punctuation">:</span> 7px auto<span class="token punctuation">;</span> <span class="token punctuation">}</span> |
4-4. Interpolation
Sử dụng để lấy giá trị của một biến gán vào bộ chọn selector hoặc tên của thuộc tính sử dụng kí tự #{ }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <span class="token property"><span class="token variable">$name</span></span><span class="token punctuation">:</span> foo<span class="token punctuation">;</span> <span class="token property"><span class="token variable">$attr</span></span><span class="token punctuation">:</span> border<span class="token punctuation">;</span> <span class="token property"><span class="token variable">$font-size</span></span><span class="token punctuation">:</span> 12px<span class="token punctuation">;</span> <span class="token property"><span class="token variable">$line-height</span></span><span class="token punctuation">:</span> 30px<span class="token punctuation">;</span> <span class="token comment">//wrong</span> <span class="token selector">p.<span class="token variable">$name</span> </span><span class="token punctuation">{</span> <span class="token property"><span class="token variable">$attr-color</span></span><span class="token punctuation">:</span> blue<span class="token punctuation">;</span> <span class="token property">font</span><span class="token punctuation">:</span> <span class="token variable">$font-size</span>/<span class="token variable">$line-height</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">//correct</span> <span class="token selector">p.<span class="token variable">#{$name}</span> </span><span class="token punctuation">{</span> <span class="token property"><span class="token variable">#{$attr}</span>-color</span><span class="token punctuation">:</span> blue<span class="token punctuation">;</span> <span class="token property">font</span><span class="token punctuation">:</span> <span class="token variable">#{$font-size}</span>/<span class="token variable">#{$line-height}</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> |
Kết quả
1 2 3 4 5 | <span class="token selector">p.foo</span> <span class="token punctuation">{</span> <span class="token property">border-color</span><span class="token punctuation">:</span> blue<span class="token punctuation">;</span> <span class="token property">font</span><span class="token punctuation">:</span> 12px/30px<span class="token punctuation">;</span> <span class="token punctuation">}</span> |