Menu

CSS ngoài và CSS nội bộ: giải thích link và style

CSS ngoài (external CSS) nằm trong một tệp .css mà mọi trang liên kết tới bằng <link rel="stylesheet">; CSS nội bộ (internal CSS) nằm trong phần tử <style> bên trong một trang. Tìm hiểu cả hai, cách đường dẫn tệp hoạt động, và quy tắc nào thắng khi chúng gặp nhau.

Trang này có trình soạn thảo chạy trực tiếp. Sửa, chạy và xem đầu ra ngay lập tức.

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 ở đâuMột tệp .cssBên trong trang HTML
Phạm viMọi trang liên kết tới nóMột trang
Lưu đệmTải một lần, dùng lại cho nhiều trangGửi lại cùng mỗi trang
Đổi giao diện trang webSửa một tệpSửa từng trang
Thêm requestCó, mỗi tệp một requestKhông
Phù hợp choTrang 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.

hrefTải
styles.cssMột tệp trong cùng thư mục với trang
css/styles.cssThư mục css nằm cạnh trang
../styles.cssLên một cấp thư mục
/styles.cssTừ thư mục gốc của trang web
https://example.com/a.cssMộ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 href thì 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 .css chỉ 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.

Hình minh họa các ngôn ngữ lập trình của Coddy

Học lập trình cùng Coddy

Bắt đầu