ToolDeck

Định dạng CSS

Định dạng và làm đẹp CSS với thụt lề chuẩn

Thử ví dụ

Đầu vào CSS

CSS đã định dạng

Chạy cục bộ · An toàn để dán thông tin bí mật
CSS đã định dạng sẽ hiển thị ở đây…

Định Dạng CSS Là Gì?

Định dạng CSS là quá trình thêm thụt lề, ngắt dòng và khoảng cách nhất quán vào các tệp Cascading Style Sheets để mã nguồn dễ đọc với con người. Trình duyệt hoàn toàn bỏ qua khoảng trắng trong CSS. Một dòng code rút gọn và một stylesheet thụt lề gọn gàng cho kết quả hiển thị giống hệt nhau. Sự khác biệt nằm ở khả năng đọc: CSS đã định dạng giúp bạn dễ dàng lướt qua các selector, phát hiện dấu chấm phẩy còn thiếu, và hiểu cơ chế cascade chỉ trong một cái nhìn.

Một công cụ định dạng CSS (đôi khi gọi là CSS beautifier hoặc pretty-printer) nhận CSS bị nén hoặc có định dạng không nhất quán và viết lại với thụt lề đồng nhất, mỗi khai báo trên một dòng riêng, và dấu ngoặc nhọn được đặt theo quy tắc thống nhất. Đây là thao tác ngược lại của quá trình nén, còn gọi là beautification hay pretty-printing. Trong khi nén loại bỏ khoảng trắng để giảm kích thước file cho môi trường production, định dạng khôi phục cấu trúc phục vụ cho giai đoạn phát triển, review code và bảo trì codebase.

Đặc tả CSS (W3C CSS Syntax Module Level 3) định nghĩa ngữ pháp cho stylesheet, nhưng không quy định bất kỳ quy ước về khoảng trắng nào. Quy tắc định dạng là quyết định của từng nhóm: dùng tab hay dấu cách, thụt lề 2 hay 4 dấu cách, kiểu đặt dấu ngoặc, dòng trống giữa các rule set. Một công cụ định dạng áp dụng nhất quán bất kỳ quy ước nào bạn chọn, trên toàn bộ mọi file. Hầu hết các nhóm ghi lại lựa chọn của mình trong file .prettierrc hoặc .editorconfig.

Tại Sao Dùng Công Cụ Định Dạng CSS Này?

Dán bất kỳ đoạn CSS nào và nhận kết quả đã thụt lề đúng trong vài mili giây. Không cần cài plugin cho trình soạn thảo, không cần viết file cấu hình, không cần tạo tài khoản.

Định Dạng Tức Thì
Kết quả cập nhật khi bạn gõ hoặc dán code. Bạn nhận được CSS đã định dạng ngay lập tức mà không cần chờ bước build hay chạy lệnh CLI.
🔒
Xử Lý Ưu Tiên Quyền Riêng Tư
Toàn bộ quá trình định dạng chạy cục bộ trong trình duyệt của bạn bằng JavaScript. CSS của bạn không rời khỏi thiết bị và không bao giờ được gửi đến bất kỳ máy chủ nào.
🎨
Thụt Lề Có Thể Tùy Chỉnh
Chọn giữa thụt lề 2 dấu cách, 4 dấu cách hoặc tab để phù hợp với phong cách code của dự án. Kết quả sẵn sàng để dán trực tiếp vào codebase của bạn.
📋
Không Cần Đăng Nhập
Mở trang, dán CSS, sao chép kết quả. Không cần đăng ký, không giới hạn lượt dùng, không có tính năng bị khóa. Toàn bộ công cụ hoạt động đầy đủ trong mỗi lần truy cập.

Các Trường Hợp Sử Dụng Công Cụ Định Dạng CSS

Phát Triển Frontend
Khi nhận CSS đã nén từ thư viện vendor hoặc CDN, hãy định dạng nó để đọc qua các selector và hiểu những gì nó ghi đè trong stylesheet của bạn.
Kỹ Thuật Backend
Các trang server-rendered thường nhúng critical CSS dưới dạng một dòng. Định dạng CSS đó giúp kiểm tra dễ dàng hơn các style nào được đưa vào payload HTML ban đầu.
DevOps & Pipeline CI/CD
Áp dụng định dạng CSS nhất quán trong pull request bằng cách so sánh kết quả từ công cụ định dạng với các file đã commit. Khoảng trắng không đồng nhất tạo ra diff ồn ào che khuất các thay đổi thực sự.
QA & Điều Tra Lỗi
Khi gỡ lỗi một vấn đề hiển thị, hãy định dạng CSS đã tính toán từ DevTools để nhanh chóng xác định các thuộc tính nào đang được áp dụng và theo thứ tự specificity nào.
Di Chuyển Dữ Liệu
Các hệ thống quản lý nội dung và công cụ tạo email lưu CSS trong các trường cơ sở dữ liệu, thường bị loại bỏ khoảng trắng. Định dạng CSS đã trích xuất giúp xác minh trước khi nhập lại.
Học CSS
Người học CSS có thể dán các ví dụ từ bài hướng dẫn hoặc câu trả lời Stack Overflow và xem chúng được định dạng nhất quán, giúp dễ theo dõi cách lồng nhau và cơ chế cascade hơn.

Tham Chiếu Thứ Tự Thuộc Tính CSS

Hầu hết các công cụ định dạng CSS không sắp xếp lại thuộc tính. Nhưng nhiều hướng dẫn phong cách khuyến nghị gom các thuộc tính liên quan lại với nhau. Bảng dưới đây cho thấy một quy ước nhóm phổ biến được sử dụng bởi các công cụ như plugin order của Stylelint và CSScomb:

NhómThuộc Tính Ví DụMục Đích
Position & Layoutposition, display, float, clearDefines the element's rendering mode
Box Modelwidth, height, margin, paddingControls dimensions and spacing
Typographyfont-size, line-height, colorText styling properties
Visualbackground, border, box-shadowDecorative properties
Animationtransition, animation, transformMotion and transform effects
Misccursor, overflow, z-indexBehavioral and stacking properties

Cách nhóm này là một quy ước, không phải yêu cầu của CSS. Trình duyệt áp dụng các khai báo dựa trên specificity và thứ tự xuất hiện, bất kể vị trí thuộc tính trong rule block. Công cụ định dạng tập trung vào khoảng trắng và thụt lề; việc sắp xếp lại thuộc tính là mối quan tâm linting riêng biệt do các công cụ như Stylelint xử lý.

Định Dạng CSS và Nén CSS

Định dạng và nén là các thao tác ngược nhau, được áp dụng ở các giai đoạn phát triển khác nhau:

Công Cụ Định Dạng CSS (công cụ này)
Thêm thụt lề, ngắt dòng và khoảng cách để CSS dễ đọc. Dùng trong quá trình phát triển và review code. Tăng kích thước file nhưng không có tác động gì đến việc trình duyệt hiển thị. Kết quả dành cho con người.
Công Cụ Nén CSS
Loại bỏ tất cả khoảng trắng không cần thiết, chú thích và cú pháp dư thừa để giảm kích thước file. Dùng cho bản build production. Kết quả dành cho trình duyệt và CDN, không phải để đọc.

Ví Dụ Code

Cách định dạng CSS theo chương trình trong các ngôn ngữ và môi trường khác nhau:

JavaScript (Prettier API)
import * as prettier from 'prettier'

const ugly = 'body{margin:0;padding:0}h1{font-size:2rem;color:#333}'

const formatted = await prettier.format(ugly, {
  parser: 'css',
  tabWidth: 2,
  singleQuote: true,
})
// → "body {\n  margin: 0;\n  padding: 0;\n}\n\nh1 {\n  font-size: 2rem;\n  color: #333;\n}\n"
Python (cssbeautifier)
import cssbeautifier

ugly = 'body{margin:0;padding:0}h1{font-size:2rem;color:#333}'

opts = cssbeautifier.default_options()
opts.indent_size = 2

formatted = cssbeautifier.beautify(ugly, opts)
# → "body {\n  margin: 0;\n  padding: 0;\n}\n\nh1 {\n  font-size: 2rem;\n  color: #333;\n}"
CLI (Prettier)
# Format a single file in place
npx prettier --write styles.css

# Format all CSS files in a directory
npx prettier --write "src/**/*.css"

# Check formatting without modifying files
npx prettier --check "src/**/*.css"

# Pipe minified CSS through stdin
echo "body{margin:0;padding:0}" | npx prettier --parser css
PHP (sabberworm/php-css-parser)
<?php
// composer require sabberworm/php-css-parser
require 'vendor/autoload.php';

use Sabberworm\CSS\Parser;
use Sabberworm\CSS\OutputFormat;

$input = 'body{margin:0;padding:0}h1{font-size:2rem;color:#333}';

$document = (new Parser($input))->parse();
echo $document->render(OutputFormat::createPretty());
// → body {
//     margin: 0;
//     padding: 0;
//   }
//   h1 {
//     font-size: 2rem;
//     color: #333;
//   }

Câu Hỏi Thường Gặp

Sự khác biệt giữa công cụ định dạng CSS và CSS linter là gì?
Công cụ định dạng CSS chỉ thay đổi khoảng trắng: thụt lề, ngắt dòng, khoảng cách xung quanh dấu hai chấm và dấu ngoặc nhọn. Nó không sửa đổi các khai báo CSS thực tế của bạn. Một CSS linter (như Stylelint) phân tích code của bạn để tìm lỗi, thực hành không tốt và vi phạm phong cách, đồng thời có thể đề xuất hoặc tự động sửa các vấn đề ngoài phạm vi khoảng trắng. Các nhóm thường dùng cả hai: công cụ định dạng cho khoảng cách nhất quán, linter để phát hiện lỗi.
Định dạng CSS có thay đổi cách hiển thị trong trình duyệt không?
Không. Trình duyệt phân tích CSS theo W3C CSS Syntax Module, coi tất cả khoảng trắng (dấu cách, tab, dòng mới) là các ký tự phân tách token tương đương nhau. Thêm hoặc bỏ khoảng trắng giữa các khai báo, selector hoặc giá trị không ảnh hưởng đến các style đã tính toán. Ngoại lệ duy nhất là khoảng trắng bên trong giá trị chuỗi như content: "hello world", mà công cụ định dạng vẫn giữ nguyên.
Tôi nên dùng bao nhiêu dấu cách để thụt lề CSS?
Hai quy ước phổ biến nhất là 2 dấu cách và 4 dấu cách. Hướng dẫn phong cách của Google và mặc định của Prettier đều dùng 2 dấu cách. Tiêu chuẩn code CSS của WordPress dùng tab. Không có sự khác biệt về hiệu suất. Hãy chọn những gì nhóm của bạn đang dùng, hoặc phù hợp với code JavaScript/HTML hiện có, và giữ nhất quán.
Tôi có thể định dạng SCSS, LESS hoặc các CSS preprocessor khác bằng công cụ này không?
Công cụ này định dạng cú pháp CSS tiêu chuẩn. SCSS và LESS dùng chung phần lớn cú pháp của CSS, nên code preprocessor đơn giản thường được định dạng đúng. Tuy nhiên, các cấu trúc đặc thù của SCSS như @mixin, @include và các rule set lồng nhau có thể không được xử lý như mong đợi. Với SCSS, hãy dùng Prettier với parser SCSS hoặc extension sass-formatter.
Định dạng CSS có giống với beautification CSS không?
Có. Các thuật ngữ công cụ định dạng CSS, CSS beautifier và CSS pretty-printer đều chỉ cùng một thao tác: thêm khoảng trắng nhất quán vào code CSS. Các công cụ khác nhau dùng tên khác nhau, nhưng kết quả là giống nhau: CSS thụt lề, dễ đọc với mỗi khai báo trên một dòng.
Tại sao CSS đã định dạng của tôi có số dòng khác với bản gốc?
CSS bị nén hoặc rút gọn thường gom nhiều khai báo trên một dòng hoặc bỏ ngắt dòng giữa các rule set. Công cụ định dạng thêm ngắt dòng sau mỗi khai báo và một dòng trống giữa các rule set, làm tăng số dòng. Nội dung CSS thực tế (selector, thuộc tính, giá trị) không thay đổi.
Tôi nên commit CSS đã định dạng hay đã nén vào version control?
Hãy commit CSS đã định dạng. Các diff của version control dựa trên dòng, nên CSS đã định dạng với mỗi khai báo trên một dòng tạo ra diff rõ ràng, dễ review. CSS đã nén tạo ra diff một dòng không thể review được. Hãy chạy quá trình nén như một bước build, không phải như định dạng nguồn. Các công cụ như PostCSS, cssnano hoặc plugin CSS của bundler của bạn tự động xử lý việc nén cho production.