CSS ngoài trong một dòng
CSS ngoài (external CSS) là một tệp .css riêng. Bạn liên kết tới nó từ <head> của mọi trang cần dùng:
<head>
<link rel="stylesheet" href="styles.css">
</head>
Bản thân tệp chỉ chứa các quy tắc CSS thuần, không có thẻ HTML nào bao quanh:
/* styles.css */
body {
font-family: system-ui, sans-serif;
color: #111827;
}
.card {
border: 2px solid #2563eb;
border-radius: 8px;
padding: 12px 16px;
}
Khung xem trước bên dưới không có tệp thứ hai để tải, nên nó đặt cùng đoạn CSS đó trong một phần tử <style>. Đó là CSS nội bộ, và nó hiển thị y hệt như tệp được liên kết:
CSS nội bộ: phần tử style
CSS nội bộ (internal CSS, còn gọi là CSS nhúng) là một phần tử <style> bên trong trang. Đặt nó trong <head> để các style được biết trước khi phần thân trang hiển thị. Nó áp dụng cho cả trang, và các quy tắc của nó dùng selector, điều mà thuộc tính style inline không làm được.
Di chuột lên một thẻ: :hover chạy được ở đây vì đó là một quy tắc thật. Cách thứ ba, thuộc tính style, được trình bày ở trang CSS inline.
CSS nội bộ và CSS ngoài
Ngoài (<link>) | Nội bộ (<style>) | |
|---|---|---|
| Nằm ở đâu | Một tệp .css | Bên trong trang HTML |
| Phạm vi | Mọi trang liên kết tới nó | Một trang |
| Lưu đệm | Tải một lần, dùng lại cho nhiều trang | Gửi lại cùng mỗi trang |
| Đổi giao diện trang web | Sửa một tệp | Sửa từng trang |
| Thêm request | Có, mỗi tệp một request | Không |
| Phù hợp cho | Trang web thực tế | Demo, trang đơn, email HTML, CSS quan trọng |
Độ ưu tiên (specificity) như nhau cho cả hai: một quy tắc trong phần tử <style> và cùng quy tắc đó trong tệp được liên kết có trọng lượng y hệt nhau. Khi ngang nhau, quy tắc xuất hiện sau trong tài liệu sẽ thắng.
Thứ tự: stylesheet đứng sau thắng
Các stylesheet được đọc theo thứ tự trong tài liệu, <link> hay <style> đều vậy. Với hai quy tắc có cùng độ ưu tiên, quy tắc đứng sau thắng. Hai khối <style> dưới đây đóng vai một tệp được liên kết, theo sau là phần ghi đè ở cấp trang:
Nút giữ padding và chữ trắng từ quy tắc đầu tiên và chỉ lấy màu nền từ quy tắc thứ hai. Đó là lý do stylesheet của chính trang web đặt sau stylesheet của framework: <link> thư viện trước, rồi đến tệp của bạn.
Đường dẫn tệp trong href
href của một <link> là một URL, được tính theo vị trí của tệp HTML.
| href | Tải |
|---|---|
styles.css | Một tệp trong cùng thư mục với trang |
css/styles.css | Thư mục css nằm cạnh trang |
../styles.css | Lên một cấp thư mục |
/styles.css | Từ thư mục gốc của trang web |
https://example.com/a.css | Một URL đầy đủ trên máy chủ khác |
Với trang web có các trang nằm ở nhiều cấp thư mục khác nhau, dạng tương đối theo thư mục gốc (/css/styles.css) giúp một đường dẫn chạy đúng trên mọi trang.
Stylesheet cho bản in và các loại media khác
Thuộc tính media giới hạn stylesheet chỉ áp dụng khi điều kiện khớp. Cả <link> và <style> đều nhận thuộc tính này:
<link rel="stylesheet" href="print.css" media="print">
<link rel="stylesheet" href="wide.css" media="(min-width: 900px)">
Khung xem trước là màn hình, nên biểu ngữ hiện ra. Trên một trang thật, biểu ngữ biến mất khỏi bản in, và trong DevTools bạn có thể thấy điều tương tự bằng cách giả lập loại media print (bảng Rendering).
Lỗi thường gặp
- Sai đường dẫn. Gõ nhầm trong
hrefthì không tải được gì, và trang hiển thị không có style. Mở DevTools, tab Network, và tìm lỗi 404 trên tệp.css. - Quên
rel="stylesheet". Thiếu nó,<link href="styles.css">không tải stylesheet. - HTML bên trong tệp
.css. Tệp.csschỉ chứa quy tắc. Thẻ<style>bên trong nó không phải CSS hợp lệ và làm hỏng quy tắc đứng cạnh. - Đặt stylesheet của bạn trước stylesheet của framework. Khi độ ưu tiên bằng nhau, tệp đứng sau thắng, nên hãy liên kết CSS của bạn sau cùng.
- Thấy phiên bản cũ. Trình duyệt lưu đệm stylesheet. Làm mới cứng, hoặc thêm phiên bản vào URL (
styles.css?v=2) khi bạn triển khai một thay đổi.
Câu hỏi thường gặp
CSS ngoài là gì?
CSS ngoài (external CSS) là một stylesheet được lưu trong tệp .css riêng và được tải bằng <link rel="stylesheet" href="styles.css"> trong <head> của trang. Mọi trang liên kết tới tệp đều nhận cùng các style, và trình duyệt lưu đệm tệp giữa các trang.
CSS nội bộ là gì?
CSS nội bộ (internal CSS), còn gọi là CSS nhúng, là CSS viết bên trong phần tử <style> ngay trong tài liệu HTML, thường đặt trong <head>. Nó chỉ áp dụng cho trang đó.
Làm sao liên kết tệp CSS với HTML?
Thêm <link rel="stylesheet" href="styles.css"> bên trong <head>. href là đường dẫn tương đối so với tệp HTML, nên css/styles.css trỏ vào thư mục css nằm cạnh nó, còn /styles.css bắt đầu từ thư mục gốc của trang web.
CSS nội bộ hay CSS ngoài tốt hơn?
CSS ngoài cho mọi trang web có nhiều hơn một trang: chỉ một tệp để sửa, và trình duyệt tải nó một lần rồi dùng lại. CSS nội bộ hợp với một trang đơn, một bản demo, hoặc một khối nhỏ các style quan trọng mà bạn muốn có ngay trong phản hồi đầu tiên.
Vì sao CSS ngoài không hoạt động?
Nguyên nhân thường gặp là đường dẫn href sai (xem tab Network có lỗi 404 không), thiếu rel="stylesheet", viết thẻ <style> bên trong tệp .css, hoặc một quy tắc phía sau ghi đè quy tắc của bạn. Làm mới cứng (hard refresh) sẽ loại trừ khả năng trình duyệt dùng bản cũ trong bộ nhớ đệm.