Đăng ngày 2026-08-25 · Tác giả Đội ngũ MarkupGen
Figma to HTML vs React vs Tailwind: Nên chọn cái nào?

MarkupGen xuất cùng một thiết kế Figma sang nhiều định dạng khác nhau, và "HTML," "React," và "Tailwind" là ba cái tên được hỏi nhiều nhất. Nhưng đây không phải là ba câu trả lời cạnh tranh cho cùng một câu hỏi — chúng trả lời hai câu hỏi khác nhau:
- Output nên là loại markup gì? HTML tĩnh, hay component React?
- Nên style bằng gì? Tailwind, hay cách khác (Vanilla CSS, Bootstrap, Bulma, Materialize, Pico, hoặc CSS Modules)?
Tailwind là một cách style, không phải đối thủ của HTML hay React — bạn có thể kết hợp class Tailwind với cả output HTML tĩnh lẫn component React. Bài viết này đi qua từng lựa chọn để bạn chọn dựa trên nhu cầu thật, không phải dựa trên từ nào nghe quen tai hơn.
Figma to HTML/CSS — cho trang tĩnh và các trang không cần tương tác cấp app
Bộ chuyển đổi Figma to HTML/CSS của MarkupGen là lựa chọn mặc định đúng khi thiết kế là một trang hoàn chỉnh, không phải một mảnh của ứng dụng lớn hơn: trang marketing, landing page, trang tài liệu, microsite kiểu email.
Phù hợp tốt khi:
- Landing page và trang chiến dịch (xem MarkupGen cho đội Marketing)
- Website tĩnh hoặc gần như tĩnh — portfolio, trang brochure, trang sản phẩm một trang
- Dự án muốn deploy output trực tiếp, không cần build step hay phụ thuộc framework
- Team không có kỹ sư frontend chuyên trách nhưng vẫn cần markup sẵn sàng production
Giới hạn thật, không phóng đại:
- Output là cấu trúc và style tĩnh — bất cứ thứ gì thực sự tương tác (logic validate form, state phía client, gọi dữ liệu) vẫn phải tự lắp ráp sau đó
- Nếu trang thực chất chỉ là một màn hình trong sản phẩm lớn hơn, việc lắp lại nó vào framework app sau này tốn công hơn là bắt đầu từ output React ngay từ đầu
Xem hướng dẫn chi tiết từng bước tại Cách chuyển thiết kế Figma sang HTML & CSS sạch.
Figma to React — cho UI sản phẩm, ứng dụng SaaS, và codebase có sẵn
Bộ chuyển đổi Figma to React của MarkupGen hợp lý khi thiết kế là một phần của ứng dụng lớn hơn chứ không phải một trang độc lập: màn hình dashboard, panel cài đặt, component card tái sử dụng, bất cứ thứ gì cần sống trong state, props, hoặc router có sẵn.
Phù hợp tốt khi:
- UI sản phẩm SaaS và công cụ nội bộ — bất cứ đâu màn hình là một phần của app lớn hơn
- Design system, nơi một component cần được tái sử dụng ở nhiều màn hình
- Team đã có codebase React và muốn màn hình mới lắp thẳng vào (xem MarkupGen cho Front-End Developer)
- Bất kỳ trường hợp nào thiết kế đã ngụ ý hành vi tương tác/động (tab, modal, trạng thái có điều kiện) mà xây từ đầu dưới dạng component sẽ dễ hơn
Giới hạn thật, không phóng đại: component được sinh ra xử lý cấu trúc và style — kết nối chúng với props thật, dữ liệu API, hay state ứng dụng vẫn là việc của bạn. MarkupGen build component từ cấu trúc thật của thiết kế, không đoán hình dạng state ứng dụng của bạn nên như thế nào. Xem Figma to React: Quy trình thực tế cho Developer để biết chi tiết phần nào được tự động hoá, phần nào bạn vẫn phải tự làm.
Tailwind thực sự phù hợp ở đâu
Tailwind không phải là định dạng output thứ ba đứng ngang hàng với HTML và React — nó là một trong sáu cách style CSS mà MarkupGen hỗ trợ, và có thể áp dụng cho cả hai loại output HTML lẫn React. Bộ chuyển đổi Figma to Tailwind của MarkupGen sinh ra utility class khớp với token thật của thiết kế (spacing, màu sắc, type scale) thay vì đoán chung chung, bất kể markup xung quanh là HTML tĩnh hay component React.
Chọn Tailwind cụ thể khi:
- Team đã làm việc với Tailwind sẵn và muốn output sinh ra khớp với quy ước hiện có thay vì thêm một hệ thống style thứ hai
- Muốn CSS production gọn nhẹ — engine JIT của Tailwind chỉ xuất đúng những utility class thực sự được dùng
- Đang xây dựng trong một design system nơi token spacing/màu sắc nhất quán quan trọng hơn tên class ngữ nghĩa
Chọn cách CSS khác khi:
- Muốn không phụ thuộc framework và kiểm soát thủ công hoàn toàn — xem Figma to CSS để có stylesheet thuần, dễ chỉnh tay
- Team đã chuẩn hoá dùng Bootstrap, Bulma, Materialize, hoặc Pico vì lý do khác (xem so sánh đầy đủ 6 framework CSS mà MarkupGen hỗ trợ)
- Đang xuất component React vào codebase đã dùng CSS Modules hoặc styled-components
Bảng so sánh
| Figma to HTML | Figma to React | Figma to Tailwind | |
|---|---|---|---|
| Trả lời câu hỏi | Markup gì? (tĩnh) | Markup gì? (component) | Style bằng gì? |
| Phù hợp nhất cho | Landing page, trang marketing, trang tĩnh/brochure | UI sản phẩm SaaS, dashboard, component tái sử dụng, app React có sẵn | Bất kỳ trường hợp nào ở trên, khi muốn style bằng utility class thay vì stylesheet đặt tên class |
| Deploy trực tiếp được? | Có — không cần build step | Không — cần build/bundler React | Tuỳ vào markup đi kèm |
| Xử lý tương tác/state | Không — bạn tự thêm | Cấu trúc đã sẵn sàng; bạn nối state/props/dữ liệu thật | Không áp dụng (chỉ là lớp style) |
| Kết hợp được với 2 cái còn lại? | Kết hợp với cả 6 framework CSS, kể cả Tailwind | Kết hợp với Tailwind hoặc CSS Modules | Kết hợp với output HTML hoặc React |
Quyết định theo use case
- Landing page hoặc trang chiến dịch → Figma to HTML, tuỳ chọn style bằng Tailwind nếu team thích utility class
- Màn hình ứng dụng SaaS hoặc UI sản phẩm → Figma to React
- Website marketing hoặc brochure tĩnh → Figma to HTML
- Màn hình mới trong app React có sẵn → Figma to React, kết hợp với cách style codebase đó đã dùng
- Team đã chuẩn hoá workflow design-token của Tailwind, chưa quyết định định dạng output → chọn HTML hoặc React dựa trên câu hỏi markup ở trên, sau đó chọn Tailwind làm câu trả lời cho style dù thế nào
- Startup xây phiên bản đầu tiên thật nhanh, chưa chốt framework → xem MarkupGen cho Startup & Nhà sáng lập — Figma to HTML thường là điểm khởi đầu nhanh hơn khi chưa quyết định framework app
Tóm tắt ngắn gọn
Hỏi "đây là cả một trang hay một phần của app?" trước — câu đó trả lời HTML hay React. Hỏi "utility class hay stylesheet đặt tên class?" thứ hai, độc lập — câu đó trả lời Tailwind (hoặc một trong năm framework CSS khác của MarkupGen) có phù hợp không. Đây không phải một lựa chọn ba chiều duy nhất; đó là hai lựa chọn nhỏ hơn, và MarkupGen hỗ trợ kết hợp câu trả lời theo bất kỳ cách nào bạn chọn.
