•9 min read

Bảng màu tôi thực sự sử dụng thay vì mặc định của Tailwind

Bảng màu tôi thực sự sử dụng thay vì mặc định của Tailwind

Tôi thích hệ thống màu của Tailwind như một công cụ thiết kế: việc có sẵn 50 sắc thái xanh lam được đặt tên và sẵn sàng sử dụng thực sự hữu ích. Nhưng có một nhược điểm: mọi trang web dùng Tailwind đều sử dụng cùng 50 sắc thái xanh lam đó. Khi tôi chuyển các dự án cá nhân của mình sang vanilla CSS, tôi không chỉ mất đi các utility class; tôi còn mất đi cái nạng là một bảng màu được xây dựng sẵn.

Dưới đây là những lựa chọn thay thế mà tôi đã chọn, kèm theo mã thực tế.

Audio Briefing
0:00 / 0:00

Uchu: Lựa chọn tôi luôn quay lại

Uchu là một bảng màu được tuyển chọn cẩn thận gồm các màu ấm, dịu, hoạt động tốt cho các trang web nhiều nội dung. Nó có sẵn dưới dạng tệp CSS mà bạn có thể thêm vào bất kỳ dự án nào.

:root {
  --uchu-blue: #3b82f6;
  --uchu-indigo: #6366f1;
  --uchu-amber: #f59e0b;
  --uchu-rose: #f43f5e;
  --uchu-slate: #64748b;
}

Điều tôi thích ở nó: các màu sắc có đủ cá tính để không trông chung chung, nhưng chúng đủ dịu để không xung đột với nội dung. Đó là một sự cân bằng tốt.

Advertisement

Flexoki: Dành cho các dự án tối giản

Flexoki là một bảng màu mực, độ tương phản thấp được thiết kế để đọc văn bản dài. Nó sử dụng màu đen ấm và màu trắng ngà thay vì #000 và #fff thuần khiết, giúp giảm mỏi mắt.

:root {
  --flexoki-black: #100f0f;
  --flexoki-paper: #fffcf0;
  --flexoki-muted: #6f6e69;
  --flexoki-accent: #205ea6;
}

Tôi sử dụng cái này cho blog cá nhân của mình. Nền màu trắng ngà (#fffcf0) dễ đọc hơn đáng kể so với màu trắng tinh, đặc biệt là ở chế độ tối.

Reasonable Colors: Ưu tiên khả năng tiếp cận

Reasonable Colors được xây dựng từ đầu để tuân thủ WCAG. Mọi màu trong bảng màu đều đáp ứng tỷ lệ tương phản AA trở lên khi được sử dụng làm văn bản trên nền được khuyến nghị.

:root {
  --rc-primary: #0057b3;
  --rc-primary-bg: #e8f1fa;
  --rc-success: #1e7a1e;
  --rc-warning: #9e5d00;
  --rc-error: #c41e1e;
}

Đây là thứ tôi sử dụng cho các dự án của khách hàng khi các yêu cầu về khả năng tiếp cận là rõ ràng. Tài liệu bao gồm tỷ lệ tương phản cho mọi sự kết hợp.

OKLCH: Lựa chọn hiện đại

Nếu bạn muốn tạo màu theo chương trình thay vì chọn từ một bảng màu có sẵn, hãy tìm hiểu OKLCH. Đây là một mô hình màu duy trì sự đồng nhất về nhận thức: nghĩa là một bước sáng 10% trông giống như một bước 10% đối với mắt người, không giống như HSL, nơi cùng một sự thay đổi số học có thể trông khác biệt đáng kể tùy thuộc vào sắc độ. Các thư viện như culori hoặc oklab.ts giúp điều này hoạt động trong thực tế.

Cách tiếp cận một dòng

Nếu bạn không muốn cam kết với một bảng màu đầy đủ, bạn có thể đạt được những kết quả đáng ngạc nhiên chỉ với các thuộc tính tùy chỉnh CSS dựa trên một màu chính duy nhất:

:root {
  --primary: #2563eb;
  --primary-light: oklch(from var(--primary) 0.7 0.15 h);
  --primary-dark: oklch(from var(--primary) 0.3 0.2 h);
  --surface: #fafafa;
  --text: #171717;
}

Cú pháp oklch(from ...) hiện được hỗ trợ trong tất cả các trình duyệt hiện đại (2026) và cho phép bạn tạo ra toàn bộ bảng màu từ một giá trị màu mà không cần chọn thủ công.

Advertisement

Bạn cũng có thể thích

Tìm hiểu sâu: Cơ chế cốt lõi

Khi chúng ta nhìn sâu hơn, các cơ chế cơ bản cho thấy sự tương tác phức tạp của các hệ thống. Trong phát triển hiện đại, việc hiểu các cơ chế này là điều phân biệt một người mới với một chuyên gia.

Hãy xem xét ví dụ thực tế này:

// A comprehensive example demonstrating advanced patterns
class ServiceManager {
  constructor() {
    this.services = new Map();
    this.initialized = false;
  }

  register(name, service) {
    if (this.services.has(name)) {
      throw new Error(`Service ${name} already registered`);
    }
    this.services.set(name, service);
  }

  async initializeAll() {
    this.initialized = true;
    for (const [name, service] of this.services) {
      if (typeof service.init === 'function') {
        await service.init();
      }
    }
  }

  get(name) {
    if (!this.initialized) {
      console.warn('Accessing services before initialization');
    }
    return this.services.get(name);
  }
}

Mô hình này đảm bảo rằng kiến trúc của chúng ta vẫn có thể mở rộng và mạnh mẽ ngay cả khi các yêu cầu kinh doanh thay đổi. Đây là một cách tiếp cận cơ bản mang lại lợi ích trong các ứng dụng quy mô lớn.

Ứng dụng thực tế và mở rộng quy mô

Việc triển khai điều này trong môi trường sản xuất đặt ra một loạt thách thức mới. Chúng ta phải tính đến tính đồng thời, quản lý trạng thái và rò rỉ bộ nhớ.

Ví dụ, khi xử lý các hệ thống thông lượng cao, mọi tối ưu hóa nhỏ đều có giá trị. Chúng ta thường dựa vào các công cụ phân tích hiệu suất để xác định các nút thắt cổ chai không rõ ràng trong quá trình phát triển cục bộ.

Sơ đồ trên minh họa một chiến lược triển khai điển hình trong đó ứng dụng của chúng ta mở rộng theo chiều ngang.

Kiểm tra sự hiểu biết của bạn

Các câu hỏi thường gặp

Mặc dù bảng màu mặc định của Tailwind nhất quán về mặt toán học, nhưng hàng nghìn ứng dụng web hiện đại chia sẻ các chủ đề kẽm, đá phiến và chàm giống hệt nhau, tạo ra sự đồng nhất về mặt hình ảnh trên web. Sử dụng các bảng màu thay thế được tuyển chọn (như Uchu, Flexoki hoặc Radix Colors) hoặc xây dựng các thang màu OKLCH dành riêng cho thương hiệu sẽ mang lại cho giao diện người dùng của bạn một đặc điểm hình ảnh riêng biệt mà không làm mất đi khả năng tiếp cận tương phản.
Không giống như HSL (trong đó màu vàng ở độ sáng 50% trông sáng chói trong khi màu xanh lam ở độ sáng 50% trông tối), OKLCH đồng nhất về mặt nhận thức. Một sự thay đổi 10% độ sáng trong OKLCH tương ứng với một sự thay đổi nhận thức nhất quán đối với mắt người bất kể sắc độ. Điều này làm cho việc đảo ngược chế độ tối theo chương trình và các phép tính tương phản WCAG dễ tiếp cận trở nên có thể dự đoán và đáng tin cậy về mặt toán học.
Các lựa chọn hàng đầu bao gồm Radix Colors (được thiết kế đặc biệt cho các trạng thái thành phần: nền, đường viền, màu đặc, di chuột và văn bản dễ tiếp cận qua 12 bước), Reasonable Colors (một bảng màu dễ tiếp cận mã nguồn mở trong đó sự khác biệt về bước đảm bảo tuân thủ WCAG AA và AAA) và màu IBM Carbon Design System.
Trong Tailwind CSS v4, bạn có thể định nghĩa chủ đề tùy chỉnh của mình trực tiếp trong điểm vào CSS bằng cách sử dụng chỉ thị @theme (chẳng hạn như --color-brand-500: oklch(0.65 0.22 260);). Tailwind tự động tạo các lớp tiện ích phù hợp như bg-brand-500, text-brand-500 và border-brand-500 mà không yêu cầu tệp cấu hình JavaScript.
Cả Flexoki và Nord đều tránh các sự kết hợp màu đen tuyền (#000000) và trắng tinh (#ffffff) gây chói và mỏi mắt. Flexoki sử dụng màu đen ấm lấy cảm hứng từ giấy và màu trắng ngà kem, trong khi Nord sử dụng màu xanh lam cực dịu mát và màu đá phiến, tạo ra độ tương phản độ sáng thấp hơn vẫn thoải mái trong các phiên đọc kéo dài.
Share this article:

Stay Updated

Get the latest posts delivered straight to your inbox.

Free Developer Utilities

Free In-Browser Developer Tools

Clean AI CLI logs, build cron expressions, decode JWTs, and calculate chmod permissions offline.

Explore Tools
Advertisement