SASS P4 – Import – Partial – Media – Extend
- Tram Ho
1. Import & Partial
In fact, when we code scss, we often split into files that perform different functions such as _colors.scss
hay_variables.scss
then use keyword @import
to call in.
1 2 3 4 | <span class="token property"><span class="token variable">$primary-300</span></span><span class="token punctuation">:</span> #64B5F6<span class="token punctuation">;</span> <span class="token property"><span class="token variable">$primary-400</span></span><span class="token punctuation">:</span> #42A5F5<span class="token punctuation">;</span> <span class="token property"><span class="token variable">$primary-600</span></span><span class="token punctuation">:</span> #1E88E5<span class="token punctuation">;</span> |
1 2 3 4 | <span class="token property"><span class="token variable">$font-size-base</span></span> <span class="token punctuation">:</span> 14px<span class="token punctuation">;</span> <span class="token property"><span class="token variable">$font-size-large</span></span><span class="token punctuation">:</span> <span class="token function">ceil</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token variable">$font-size-base</span> <span class="token operator">*</span> 1.25<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// ~18px</span> <span class="token property"><span class="token variable">$font-size-small</span></span><span class="token punctuation">:</span> <span class="token function">ceil</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token variable">$font-size-base</span> <span class="token operator">*</span> 0.85<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// ~12px</span> |
File style.scss
để import 2 file ở trên ta viết code như sau
1 2 3 4 5 6 7 8 | <span class="token keyword">@import</span> <span class="token string">"variables"</span><span class="token punctuation">;</span> <span class="token keyword">@import</span> <span class="token string">"colors"</span><span class="token punctuation">;</span> <span class="token selector">.title </span><span class="token punctuation">{</span> <span class="token property">font-size</span><span class="token punctuation">:</span> <span class="token variable">$font-size-small</span><span class="token punctuation">;</span> <span class="token property">color</span><span class="token punctuation">:</span> <span class="token variable">$primary-300</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> |
Kết quả
1 2 3 4 5 | <span class="token selector">.title</span> <span class="token punctuation">{</span> <span class="token property">font-size</span><span class="token punctuation">:</span> 12px<span class="token punctuation">;</span> <span class="token property">color</span><span class="token punctuation">:</span> #64B5F6<span class="token punctuation">;</span> <span class="token punctuation">}</span> |
Lưu ý
- 3 file ở trên nằm cùng cấp ngang hàng với nhau
- Khi import việc ghi cả đuôi file scss là không cần thiết
- Ta thấy 2 file
_colors.scss
và_variables.scss
có gạch dưới ở phía trước, đó là cách dùng của Partial, điều này có nghĩa SASS sẽ không biên dịch các file đó ra file css
2. Media
Cách viết @media
tương tự như viết của CSS, thường dùng khi responsive website
1 2 3 4 5 6 | <span class="token atrule"><span class="token rule">@media</span> <span class="token punctuation">(</span><span class="token property">min-width</span><span class="token punctuation">:</span> 1200px<span class="token punctuation">)</span></span> <span class="token punctuation">{</span> <span class="token selector">.col-lg-6</span> <span class="token punctuation">{</span> <span class="token property">width</span><span class="token punctuation">:</span> 50%<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> |
3. Extend
Kế thừa các thuộc tính của một selector khác. Sử dụng từ khóa @extend
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <span class="token selector">.btn </span><span class="token punctuation">{</span> <span class="token property">display</span><span class="token punctuation">:</span> inline-block<span class="token punctuation">;</span> <span class="token property">margin-bottom</span><span class="token punctuation">:</span> 0<span class="token punctuation">;</span> <span class="token property">font-weight</span><span class="token punctuation">:</span> normal<span class="token punctuation">;</span> <span class="token property">text-align</span><span class="token punctuation">:</span> center<span class="token punctuation">;</span> <span class="token property">vertical-align</span><span class="token punctuation">:</span> middle<span class="token punctuation">;</span> <span class="token property">touch-action</span><span class="token punctuation">:</span> manipulation<span class="token punctuation">;</span> <span class="token property">cursor</span><span class="token punctuation">:</span> pointer<span class="token punctuation">;</span> <span class="token property">background-image</span><span class="token punctuation">:</span> none<span class="token punctuation">;</span> <span class="token property">border</span><span class="token punctuation">:</span> 1px solid transparent<span class="token punctuation">;</span> <span class="token property">white-space</span><span class="token punctuation">:</span> nowrap<span class="token punctuation">;</span> <span class="token property">padding</span><span class="token punctuation">:</span> 7px 12px<span class="token punctuation">;</span> <span class="token property">font-size</span><span class="token punctuation">:</span> 13px<span class="token punctuation">;</span> <span class="token property">line-height</span><span class="token punctuation">:</span> 1.5384616<span class="token punctuation">;</span> <span class="token property">border-radius</span><span class="token punctuation">:</span> 3px<span class="token punctuation">;</span> <span class="token property">-webkit-user-select</span><span class="token punctuation">:</span> none<span class="token punctuation">;</span> <span class="token property">-moz-user-select</span><span class="token punctuation">:</span> none<span class="token punctuation">;</span> <span class="token property">-ms-user-select</span><span class="token punctuation">:</span> none<span class="token punctuation">;</span> <span class="token property">user-select</span><span class="token punctuation">:</span> none<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token selector">.btn-primary </span><span class="token punctuation">{</span> <span class="token keyword">@extend</span> .btn<span class="token punctuation">;</span> <span class="token property">color</span><span class="token punctuation">:</span> #fff<span class="token punctuation">;</span> <span class="token property">background-color</span><span class="token punctuation">:</span> #2196F3<span class="token punctuation">;</span> <span class="token property">border-color</span><span class="token punctuation">:</span> #2196F3<span class="token punctuation">;</span> <span class="token punctuation">}</span> |
Kết quả
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <span class="token selector">.btn, .btn-primary</span> <span class="token punctuation">{</span> <span class="token property">display</span><span class="token punctuation">:</span> inline-block<span class="token punctuation">;</span> <span class="token property">margin-bottom</span><span class="token punctuation">:</span> 0<span class="token punctuation">;</span> <span class="token property">font-weight</span><span class="token punctuation">:</span> normal<span class="token punctuation">;</span> <span class="token property">text-align</span><span class="token punctuation">:</span> center<span class="token punctuation">;</span> <span class="token property">vertical-align</span><span class="token punctuation">:</span> middle<span class="token punctuation">;</span> <span class="token property">touch-action</span><span class="token punctuation">:</span> manipulation<span class="token punctuation">;</span> <span class="token property">cursor</span><span class="token punctuation">:</span> pointer<span class="token punctuation">;</span> <span class="token property">background-image</span><span class="token punctuation">:</span> none<span class="token punctuation">;</span> <span class="token property">border</span><span class="token punctuation">:</span> 1px solid transparent<span class="token punctuation">;</span> <span class="token property">white-space</span><span class="token punctuation">:</span> nowrap<span class="token punctuation">;</span> <span class="token property">padding</span><span class="token punctuation">:</span> 7px 12px<span class="token punctuation">;</span> <span class="token property">font-size</span><span class="token punctuation">:</span> 13px<span class="token punctuation">;</span> <span class="token property">line-height</span><span class="token punctuation">:</span> 1.5384616<span class="token punctuation">;</span> <span class="token property">border-radius</span><span class="token punctuation">:</span> 3px<span class="token punctuation">;</span> <span class="token property">-webkit-user-select</span><span class="token punctuation">:</span> none<span class="token punctuation">;</span> <span class="token property">-moz-user-select</span><span class="token punctuation">:</span> none<span class="token punctuation">;</span> <span class="token property">-ms-user-select</span><span class="token punctuation">:</span> none<span class="token punctuation">;</span> <span class="token property">user-select</span><span class="token punctuation">:</span> none<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token selector">.btn-primary</span> <span class="token punctuation">{</span> <span class="token property">color</span><span class="token punctuation">:</span> #fff<span class="token punctuation">;</span> <span class="token property">background-color</span><span class="token punctuation">:</span> #2196F3<span class="token punctuation">;</span> <span class="token property">border-color</span><span class="token punctuation">:</span> #2196F3<span class="token punctuation">;</span> <span class="token punctuation">}</span> |
Vùng chọn %extend
sẽ chỉ kế thừa các thuộc tính mà không compile.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <span class="token selector"><span class="token placeholder">%btn</span> </span><span class="token punctuation">{</span> <span class="token property">display</span><span class="token punctuation">:</span> inline-block<span class="token punctuation">;</span> <span class="token property">margin-bottom</span><span class="token punctuation">:</span> 0<span class="token punctuation">;</span> <span class="token property">font-weight</span><span class="token punctuation">:</span> normal<span class="token punctuation">;</span> <span class="token property">text-align</span><span class="token punctuation">:</span> center<span class="token punctuation">;</span> <span class="token property">vertical-align</span><span class="token punctuation">:</span> middle<span class="token punctuation">;</span> <span class="token property">touch-action</span><span class="token punctuation">:</span> manipulation<span class="token punctuation">;</span> <span class="token property">cursor</span><span class="token punctuation">:</span> pointer<span class="token punctuation">;</span> <span class="token property">background-image</span><span class="token punctuation">:</span> none<span class="token punctuation">;</span> <span class="token property">border</span><span class="token punctuation">:</span> 1px solid transparent<span class="token punctuation">;</span> <span class="token property">white-space</span><span class="token punctuation">:</span> nowrap<span class="token punctuation">;</span> <span class="token property">padding</span><span class="token punctuation">:</span> 7px 12px<span class="token punctuation">;</span> <span class="token property">font-size</span><span class="token punctuation">:</span> 13px<span class="token punctuation">;</span> <span class="token property">line-height</span><span class="token punctuation">:</span> 1.5384616<span class="token punctuation">;</span> <span class="token property">border-radius</span><span class="token punctuation">:</span> 3px<span class="token punctuation">;</span> <span class="token property">-webkit-user-select</span><span class="token punctuation">:</span> none<span class="token punctuation">;</span> <span class="token property">-moz-user-select</span><span class="token punctuation">:</span> none<span class="token punctuation">;</span> <span class="token property">-ms-user-select</span><span class="token punctuation">:</span> none<span class="token punctuation">;</span> <span class="token property">user-select</span><span class="token punctuation">:</span> none<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token selector">.btn-primary </span><span class="token punctuation">{</span> <span class="token keyword">@extend</span> <span class="token placeholder selector">%btn</span><span class="token punctuation">;</span> <span class="token property">color</span><span class="token punctuation">:</span> #fff<span class="token punctuation">;</span> <span class="token property">background-color</span><span class="token punctuation">:</span> #2196F3<span class="token punctuation">;</span> <span class="token property">border-color</span><span class="token punctuation">:</span> #2196F3<span class="token punctuation">;</span> <span class="token punctuation">}</span> |
Kết quả
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <span class="token selector">.btn-primary</span> <span class="token punctuation">{</span> <span class="token property">display</span><span class="token punctuation">:</span> inline-block<span class="token punctuation">;</span> <span class="token property">margin-bottom</span><span class="token punctuation">:</span> 0<span class="token punctuation">;</span> <span class="token property">font-weight</span><span class="token punctuation">:</span> normal<span class="token punctuation">;</span> <span class="token property">text-align</span><span class="token punctuation">:</span> center<span class="token punctuation">;</span> <span class="token property">vertical-align</span><span class="token punctuation">:</span> middle<span class="token punctuation">;</span> <span class="token property">touch-action</span><span class="token punctuation">:</span> manipulation<span class="token punctuation">;</span> <span class="token property">cursor</span><span class="token punctuation">:</span> pointer<span class="token punctuation">;</span> <span class="token property">background-image</span><span class="token punctuation">:</span> none<span class="token punctuation">;</span> <span class="token property">border</span><span class="token punctuation">:</span> 1px solid transparent<span class="token punctuation">;</span> <span class="token property">white-space</span><span class="token punctuation">:</span> nowrap<span class="token punctuation">;</span> <span class="token property">padding</span><span class="token punctuation">:</span> 7px 12px<span class="token punctuation">;</span> <span class="token property">font-size</span><span class="token punctuation">:</span> 13px<span class="token punctuation">;</span> <span class="token property">line-height</span><span class="token punctuation">:</span> 1.5384616<span class="token punctuation">;</span> <span class="token property">border-radius</span><span class="token punctuation">:</span> 3px<span class="token punctuation">;</span> <span class="token property">-webkit-user-select</span><span class="token punctuation">:</span> none<span class="token punctuation">;</span> <span class="token property">-moz-user-select</span><span class="token punctuation">:</span> none<span class="token punctuation">;</span> <span class="token property">-ms-user-select</span><span class="token punctuation">:</span> none<span class="token punctuation">;</span> <span class="token property">user-select</span><span class="token punctuation">:</span> none<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token selector">.btn-primary</span> <span class="token punctuation">{</span> <span class="token property">color</span><span class="token punctuation">:</span> #fff<span class="token punctuation">;</span> <span class="token property">background-color</span><span class="token punctuation">:</span> #2196F3<span class="token punctuation">;</span> <span class="token property">border-color</span><span class="token punctuation">:</span> #2196F3<span class="token punctuation">;</span> <span class="token punctuation">}</span> |