Giới thiệu và sử dụng CSS Variables

Khi nói tới biến(Variables) trong CSS chắc hẳn nhiều người sẽ nghĩ tới SASS/SCSS. Nhưng không, ở đây mình đang nói tới biến trong CSS (#CSS variables), CSS đã hỗ trợ điều này. Không cần bộ tiền xử lý và không cần biên dịch nữa 🥳

Giới thiệu và sử dụng CSS Variables
Giới thiệu và sử dụng CSS Variables

Phạm vi toàn cầu sẽ cho phép bạn truy cập biến ở mọi nơi. Phạm vi địa phương sẽ chỉ nằm trong CSS selector cụ thể của bạn 👍

:root {
  /* 1. Defining in Global Scope */
  --color: red;
  /* 2. Available in all selector*/
  color: var(--color); /* red */
}
.local {
  /* 1. Defining in Local Scope */
  --color: blue;
  /* 2. Scoped to the .local class only */
  color: var(--color); /* blue */
}

Trùng lặp mã CSS

Trước đây, tôi nhớ mình đã phải tạo rất nhiều CSS trùng lặp…

.subtitle {
color: #999;
}
.subtext {
color: #999;
}

Điều này làm cho tôi rất khó chịu khi phải viết nhiều CSS trùng lặp như vậy!

SASS là một giải pháp

Và sau đó tôi phát hiện ra Sass. Và cuối cùng tôi có thể sử dụng các biến!

$secondary-color: #999;.subtitle {
color: $secondary-color;
}
.subtext {
color: $secondary-color;
}

Tất cả đều tuyệt vời. Nhưng sau đó, bạn phải đối phó với việc cài đặt Sass vào dự án của mình, bạn cần phải config với bộ xử lý và biên dịch của nó trước khi nó cỏ thể hoạt động.

Và đối với một dự án nhỏ, sử dụng SASS có vẻ không cần thiết lắm 😅

CSS là người hùng của tôi 💪

Quay lại với biến trong CSS. Bây giờ tôi có thể đặt một biến nguyên bản. Không có bộ xử lý trước, không cần cài đặt thêm, chỉ cần CSS đơn giản.

:root {
--secondary-color: #999;
}
.subtitle {
color: var(--secondary-color);
}
.subtext {
color: var(--secondary-color);
}

Cú pháp biến CSS (CSS Variable Syntax)

1. Khai báo một biến CSS

Bạn đặt trước tên biến của mình bằng 2 dấu gạch ngang --

--variable-name: some-value;

2. Sử dụng biến CSS

Và để sử dụng nó. Bạn sử dụng chuyển tên biến của mình vào var()

css-property: var(--variable-name);

Phạm vi trong Biến CSS

Bạn có thể khai báo biến CSS của mình trong phạm vi toàn cầu, nghĩa là nó có thể có sẵn trong toàn bộ ứng dụng của bạn. Hoặc bạn có thể chỉ đặt biến CSS trong phạm vi cục bộ, nơi nó chỉ khả dụng trong bộ chọn cụ thể.

Phạm vi toàn cầu

Để khai báo nó trong phạm vi toàn cục, trước tiên bạn đặt định nghĩa của mình bên trong :root{}

:root {
--primary-color: #000;
}
h1 {
color: var(--primary-color);
}

Phạm vi địa phương

Để khai báo nó trong phạm vi cục bộ, bạn chỉ cần xác định biến bên trong khối phần tử của mình. Và biến đó chỉ có sẵn trong bộ chọn đó. Nếu bạn đã cố gắng sử dụng ở đâu đó, nó sẽ không có tác dụng.

h2 {
  --h2-color: #999;
  color: var(--h2-color);
}
h3 {
  /* No Effect */
  color: var(--h2-color);
}

Ghi đè giá trị biến CSS

Điều tuyệt vời là bạn có thể ghi đè giá trị global, do đó có thể đặt một cái gì đó duy nhất cho một ngữ cảnh cụ thể.

:root {
--default-color: pink;
}
.content {
/* Override the global css variable */
--default-color: green;
}
p {
color: var(--default-color);
}
<p>Default "Pink" color</p>
<div class="content">
<p>Overridden "Green" color</p>
</div>

Đặt giá trị dự phòng (Fallback Value)

Điều gì xảy ra khi bạn sử dụng một biến chưa bao giờ được chỉ định 🤔

p {
color: var(--color);
}

Câu trả lời là KHÔNG CÓ GÌ XẢY RA. Ứng dụng của bạn không bị lỗi, chỉ là nó không nhận CSS Variable --color đó thôi .

Tôi đoán điều đó thật tuyệt. Nhưng nếu điều đó có vẻ hơi rủi ro, bạn có thể đặt Giá trị dự phòng.

p {
  color: var(--color, pink);
}
<p>Pink color</p>

Và nếu bạn xác định nó, màu đã xác định sẽ hiển thị.

p {
  --color: black;
  color: var(--color, pink);
}
<p>Black color</p>

Sử dụng biến CSS trong JavaScript

Điều tốt nhất khi sử dụng biến CSS thay vì biến Sass là bạn có thể truy cập nó bằng JavaScript! Và bạn biết đấy khi JS tham gia bữa tiệc, mọi thứ sẽ trở nên điên cuồng.

Hãy xem qua cách sử dụng khái niệm cơ bản và xem cách chúng tôi có thể truy xuất và đặt các biến CSS của mình.

Lấy từ kiểu nội tuyến (inline style CSS)

Nếu bạn đặt biến CSS của mình thông qua kiểu nội tuyến.

<p style="--color: red"></p>

Bạn sẽ truy xuất giá trị của mình bằng getPropertyValue()

// Get our <p> element
const element = document.querySelector('p');

// Retrieve our CSS variable "--color"
element.style.getPropertyValue('--color'); // 'red'

Lấy từ style tag hoặc CSS file (inline style CSS)

Nếu bạn đặt biến CSS của mình trong thẻ style hoặc tệp CSS bên ngoài.

<style>
p {
--color: red;
}
</style>

Bạn cần sử dụng cái này trước tiên getComputedStyle()

// Get our <p> element
const element = document.querySelector('p');

// Retrieve our CSS variable "--color"
getComputedStyle(element).getPropertyValue('--color'); // 'red'

Bạn cũng có thể sử dụng cách này để truy xuất kiểu inline style của bạn.

<p style="--color: red"></p>

// Get our <p> element
const element = document.querySelector('p');

// Retrieve our CSS variable "--color"
getComputedStyle(element).getPropertyValue('--color'); // 'red'

Đặt một biến CSS với JS

// Get our <p> element
const element = document.querySelector('p');

// Set our "--color" variable to be "blue"
element.style.setProperty('--color', 'blue');

Ví dụ đơn giản

Hãy tập hợp mọi thứ lại với nhau và xem một ví dụ đơn giản. Ở đây tôi muốn đổi màu văn bản khi được nhấp vào.

<p class="demo"style="--color:red; color: var(--color)">This is demo. Let click me!</p>

// Get our <p> element
const element = document.querySelector('p.demo');

// On click, change text from "red" to "blue"
element.addEventListener('click', function() {
element.style.setProperty('--color', 'blue');
});

This is demo. Let click me!

Browser Support

Ngoài Internet Explorer thì tất cả các trình duyệt khác đều hỗ trợ CSS Variables.

Browser Support: CSS Variables

Trên đây là bài viết giới thiệu và sử dụng CSS Variables. Cảm ơn vì đã đọc ❤

Oh My Zsh: Nâng cao trải nghiệm terminal với giao diện đẹp và các plugin tăng hiệu suất! Git cherry-pick là gì? Cách sử dụng và ví dụ Git Rebase: Gộp nhiều commit thành một để tối ưu hóa lịch sử commit 11 tính năng JavaScript mới tuyệt vời trong ES13 (ES2022) CSS diệu kỳ: Các thuộc tính CSS mà bạn có thể chưa biết Auto deploy projects với GitHub Actions – sử dụng ssh-action WordPress Gutenberg Block Server Side Render Add, Upload image trong Gutenberg Block Development Tạo Block Controls – Block Toolbar và Settings Sidebar trong WordPress Gutenberg Làm quen với các components thường dùng khi tạo Gutenberg Block

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.