Hello everyone, I am back and continue with part 18 of the series about some CSS tricks that Frontend itself may not even know.
Let’s get started!
1. Reduce the size of the code with CSS variables
I have previously mentioned the powerful features of CSS custom properties (aka CSS variables).
- Discover the benefits of CSS Variables .
- Some CSS tricks that Frontend itself may not know (Part 8) .
Today I discovered another good tip when using CSS variables that is to reduce many lines of code repetition, by changing the value of the variable.
The way it works is extremely beneficial for devs, whereas CSS preprocessors like SASS or LESS do not.
I will demonstrate its flexibility through an example of Grid System, more specifically Grid of Bootstrap everyone!
Here’s the way we often write (or often think):
(I’m just focusing on the main attributes.)
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 28 29 30 31 32 33 34 35 36 37 38 | <span class="token selector">.row </span> <span class="token punctuation">{</span> ... <span class="token property">margin-left</span> <span class="token punctuation">:</span> -15px <span class="token punctuation">;</span> <span class="token property">margin-right</span> <span class="token punctuation">:</span> -15px <span class="token punctuation">;</span> <span class="token selector">.col </span> <span class="token punctuation">{</span> ... <span class="token property">padding-left</span> <span class="token punctuation">:</span> 15px <span class="token punctuation">;</span> <span class="token property">padding-right</span> <span class="token punctuation">:</span> 15px <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token comment">// Tạo 1 modifier "small-gutters": khoảng cách nhỏ hơn giữa các cột</span> <span class="token selector">.small-gutters </span> <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">margin-right</span> <span class="token punctuation">:</span> -9px <span class="token punctuation">;</span> <span class="token selector">.col </span> <span class="token punctuation">{</span> ... <span class="token property">padding-left</span> <span class="token punctuation">:</span> 9px <span class="token punctuation">;</span> <span class="token property">padding-right</span> <span class="token punctuation">:</span> 9px <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token comment">// Tạo 1 modifier "no-gutters": không có khoảng cách giữa các cột</span> <span class="token selector">.no-gutters </span> <span class="token punctuation">{</span> ... <span class="token property">margin-left</span> <span class="token punctuation">:</span> 0 <span class="token punctuation">;</span> <span class="token property">margin-right</span> <span class="token punctuation">:</span> 0 <span class="token punctuation">;</span> <span class="token selector">.col </span> <span class="token punctuation">{</span> ... <span class="token property">padding-left</span> <span class="token punctuation">:</span> 0 <span class="token punctuation">;</span> <span class="token property">padding-right</span> <span class="token punctuation">:</span> 0 <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> |
You see clearly, if you add some type of modifier for the grid types, the CSS code repeats quite a lot.
And this is how CSS variables overcome this drawback:
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 28 29 | <span class="token selector">:root </span> <span class="token punctuation">{</span> <span class="token property">--grid-gap</span> <span class="token punctuation">:</span> 15px <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token selector">.row </span> <span class="token punctuation">{</span> ... <span class="token property">margin-left</span> <span class="token punctuation">:</span> <span class="token function">calc</span> <span class="token punctuation">(</span> <span class="token function">var</span> <span class="token punctuation">(</span> --grid-gap <span class="token punctuation">)</span> <span class="token operator">*</span> -1 <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token property">margin-right</span> <span class="token punctuation">:</span> <span class="token function">calc</span> <span class="token punctuation">(</span> <span class="token function">var</span> <span class="token punctuation">(</span> --grid-gap <span class="token punctuation">)</span> <span class="token operator">*</span> -1 <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// Vì giá trị của biến là số âm, nên phải gọi ra theo cú pháp này</span> <span class="token selector">.col </span> <span class="token punctuation">{</span> ... <span class="token property">padding-left</span> <span class="token punctuation">:</span> <span class="token function">var</span> <span class="token punctuation">(</span> --grid-gap <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token property">padding-right</span> <span class="token punctuation">:</span> <span class="token function">var</span> <span class="token punctuation">(</span> --grid-gap <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token comment">// Tạo 1 modifier "small-gutters": khoảng cách nhỏ hơn giữa các cột</span> <span class="token selector">.small-gutters </span> <span class="token punctuation">{</span> ... <span class="token property">--grid-gap</span> <span class="token punctuation">:</span> 8px <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">// Tạo 1 modifier "no-gutters": không có khoảng cách giữa các cột</span> <span class="token selector">.no-gutters </span> <span class="token punctuation">{</span> ... <span class="token property">--grid-gap</span> <span class="token punctuation">:</span> 0 <span class="token punctuation">;</span> <span class="token punctuation">}</span> |
Awesome yet you! The CSS code has been greatly reduced.