Khám phá CSS từ cơ bản đến nâng cao: cú pháp, selectors đa dạng, pseudo-classes, pseudo-elements, combinators, specificity và inheritance. Tất cả những gì bạn cần để thành thạo CSS!
CSS là ngôn ngữ tạo kiểu dùng để mô tả cách hiển thị của tài liệu HTML. CSS là cầu nối giữa nội dung (HTML) và giao diện người dùng.
Cấu trúc và nội dung
Giao diện và cách trình bày
Tương tác và hành vi
bộ-chọn {
thuộc-tính: giá-trị;
thuộc-tính: giá-trị;
}<p style="color: red; font-size: 16px;"> Text với inline style </p>
<style>
p { color: blue; }
.highlight { background: yellow; }
</style><link rel="stylesheet" href="style.css">
/* style.css */
p { color: blue; }/* Phần tử */
p { color: black; }
div { margin: 10px; }
/* Lớp (Class) */
.highlight { background: yellow; }
.container { width: 100%; }
/* ID */
#header { background: navy; }
#footer { text-align: center; }
/* Toàn bộ */
* { box-sizing: border-box; }/* Khớp chính xác */
[type="text"] { border: 1px solid blue; }
/* Bắt đầu bằng */
[href^="https"] { color: green; }
/* Kết thúc bằng */
[href$=".pdf"] { color: red; }
/* Chứa */
[href*="google"] { font-weight: bold; }
/* Chứa từ */
[class~="active"] { background: yellow; }/* Trạng thái tương tác */
a:hover { color: red; }
button:focus { outline: 2px solid blue; }
input:disabled { opacity: 0.5; }
/* Cấu trúc */
li:first-child { font-weight: bold; }
p:nth-child(2n) { background: #f0f0f0; }
div:empty { display: none; }/* Tạo nội dung */
.quote::before { content: """; }
.quote::after { content: """; }
/* Chữ đầu tiên */
p::first-letter { font-size: 3em; }
p::first-line { font-weight: bold; }
/* Selection */
::selection { background: yellow; }/* Con cháu (dấu cách) */
.parent p { color: red; }
/* TẤT CẢ p ở BẤT KỲ cấp độ nào */
/* Con trực tiếp (>) */
.parent > p { color: blue; }
/* CHỈ p con TRỰC TIẾP *//* Anh em liền kề (+) */
h2 + p { margin-top: 0; }
/* p NGAY SAU h2 */
/* Anh em chung (~) */
h2 ~ p { color: gray; }
/* TẤT CẢ p sau h2 cùng cấp */style="..."#header.nav, [type]div, p/* 0-0-0-1 = 1 điểm */
p { color: black; }
/* 0-0-1-0 = 10 điểm */
.highlight { color: yellow; }
/* 0-1-0-0 = 100 điểm */
#header { color: blue; }
/* 0-0-1-1 = 11 điểm */
p.highlight { color: red; }
/* 0-1-1-1 = 111 điểm */
#main .sidebar p { color: green; }
/* 0-1-2-1 = 121 điểm - THẮNG */
#main .sidebar p.highlight { color: purple; }
/* !important ghi đè MỌI THỨ */
p { color: orange !important; }/* Specificity quá cao */
#header .nav ul.menu li.item a.link { }
/* Lạm dụng !important */
.text { color: red !important; }/* Giữ specificity thấp */
.nav-link { }
.nav-link--active { }
/* Tăng tự nhiên */
.header .nav-link { }/* Kiểm soát inheritance */
.child {
color: inherit; /* Kế thừa từ parent */
margin: initial; /* Giá trị mặc định của browser */
padding: unset; /* Kế thừa nếu có, không thì initial */
border: revert; /* Quay về browser default stylesheet */
}
/* Ví dụ thực tế */
body {
font-family: 'Helvetica', Arial, sans-serif; /* Tất cả con sẽ kế thừa */
color: #333; /* Tất cả con sẽ kế thừa */
line-height: 1.6; /* Tất cả con sẽ kế thừa */
}
.special-text {
font-family: inherit; /* Giữ font từ body */
color: red; /* Override color */
}
Mô hình hộp CSS với Content, Padding, Border và Margin
.content-box {
box-sizing: content-box;
width: 200px;
padding: 20px;
border: 5px solid;
/* Tổng = 200 + 40 + 10 = 250px */
}.border-box {
box-sizing: border-box;
width: 200px;
padding: 20px;
border: 5px solid;
/* Tổng = 200px (đã bao gồm all) */
}/* Cơ sở: Mobile */
.container { width: 100%; }
/* Tablet */
@media (min-width: 768px) {
.container { width: 750px; }
}
/* Desktop */
@media (min-width: 1024px) {
.container { width: 1000px; }
}/* BEM (Block Element Modifier) */
.card { } /* Block */
.card__title { } /* Element */
.card__title--large { } /* Modifier */
/* SMACSS */
.layout-header { } /* Layout */
.module-card { } /* Module */
.state-is-active { } /* State */
.theme-dark { } /* Theme *//* ❌ Chậm - lồng sâu */
.nav ul li a:hover { }
/* ✅ Nhanh - nhắm trực tiếp */
.nav-link:hover { }
/* ❌ Chậm - bộ chọn toàn bộ */
* { box-sizing: border-box; }
/* ✅ Tốt hơn - reset có mục tiêu */
html, body, div, span, h1, h2, h3, p {
box-sizing: border-box;
}🚀 Tiếp theo: Học về Flexbox và Grid để xây dựng layout chuyên nghiệp!