Margin trong CSS là khoảng trống nằm giữa phần tử và các phần tử khác xung quanh nó. Margins giúp kiểm soát không gian bên ngoài phần tử, cho phép bạn tạo khoảng cách giữa các phần tử trên trang web để đảm bảo giao diện trang gọn gàng và dễ nhìn hơn. Trong bài viết này, chúng ta sẽ tìm hiểu chi tiết về margin trong CSS, các thuộc tính con của nó, và cách áp dụng margin để kiểm soát bố cục trang web.
1. Tổng quan về thuộc tính margin
margin là một thuộc tính CSS cho phép bạn tạo khoảng trống xung quanh một phần tử HTML. Khoảng cách này được đo từ cạnh ngoài của phần tử (viền) tới các phần tử khác.
Các thuộc tính chính của margin:
margin-top: Điều chỉnh khoảng trống phía trên phần tử.margin-right: Điều chỉnh khoảng trống bên phải phần tử.margin-bottom: Điều chỉnh khoảng trống phía dưới phần tử.margin-left: Điều chỉnh khoảng trống bên trái phần tử.

Cú pháp cơ bản:
element {
margin: top right bottom left;
}Bạn có thể đặt giá trị cụ thể cho từng phía của phần tử (top, right, bottom, left) hoặc sử dụng một giá trị duy nhất để áp dụng cho tất cả các phía.
Ví dụ:
div {
margin: 10px 20px 30px 40px;
}Trong ví dụ này:
10pxlà khoảng cách phía trên.20pxlà khoảng cách bên phải.30pxlà khoảng cách phía dưới.40pxlà khoảng cách bên trái.
2. Cách sử dụng thuộc tính margin
2.1. Thiết lập một giá trị duy nhất cho tất cả các cạnh
Nếu bạn chỉ cung cấp một giá trị duy nhất cho thuộc tính margin, giá trị đó sẽ được áp dụng cho tất cả các phía của phần tử (trên, phải, dưới, và trái).
Ví dụ:
div {
margin: 20px;
}Kết quả: Tất cả các cạnh của phần tử div sẽ có khoảng cách 20px so với các phần tử khác.
2.2. Thiết lập hai giá trị
Khi bạn chỉ định hai giá trị cho thuộc tính margin:
- Giá trị thứ nhất sẽ được áp dụng cho trên và dưới.
- Giá trị thứ hai sẽ được áp dụng cho trái và phải.
Ví dụ:
div {
margin: 20px 50px;
}Kết quả: Phần tử div sẽ có margin 20px cho phía trên và dưới, và 50px cho phía trái và phải.
2.3. Thiết lập ba giá trị
Khi bạn chỉ định ba giá trị:
- Giá trị thứ nhất áp dụng cho trên.
- Giá trị thứ hai áp dụng cho trái và phải.
- Giá trị thứ ba áp dụng cho dưới.
Ví dụ:
div {
margin: 10px 50px 30px;
}Kết quả:
- 10px cho phía trên.
- 50px cho hai bên trái và phải.
- 30px cho phía dưới.
2.4. Thiết lập bốn giá trị
Khi bạn chỉ định bốn giá trị, thứ tự lần lượt sẽ là:
- Giá trị thứ nhất: Trên.
- Giá trị thứ hai: Phải.
- Giá trị thứ ba: Dưới.
- Giá trị thứ tư: Trái.
Ví dụ:
div {
margin: 10px 20px 30px 40px;
}Kết quả:
- 10px cho phía trên.
- 20px cho phía phải.
- 30px cho phía dưới.
- 40px cho phía trái.
3. Giá trị tự động (auto) cho margin
Khi sử dụng giá trị auto cho margin, đặc biệt là đối với các phần tử khối (block elements) như <div>, bạn có thể canh giữa phần tử theo chiều ngang một cách dễ dàng.
Ví dụ:
div {
width: 500px;
margin: 0 auto;
}Kết quả:
width: 500pxđặt chiều rộng của phần tử div.margin: 0 auto: canh giữa phần tử div theo chiều ngang.0là margin trên và dưới, vàautolà canh giữa phần tử theo chiều trái và phải.
Điều này thường được sử dụng để canh giữa các phần tử như container, hình ảnh hoặc nội dung chính giữa trang.
4. Giá trị âm của margin
CSS cho phép sử dụng giá trị âm cho thuộc tính margin, giúp bạn kéo phần tử lại gần các phần tử khác hơn hoặc di chuyển nó ra khỏi vị trí mặc định.
Ví dụ:
div {
margin-top: -20px;
}Kết quả: Phần tử div sẽ dịch chuyển lên trên 20px so với vị trí ban đầu.
Ứng dụng của margin âm:
- Tạo ra các bố cục chồng lên nhau hoặc thay đổi vị trí phần tử một cách tinh tế.
- Tạo ra hiệu ứng đặc biệt khi cần phần tử lấn ra ngoài vùng chứa của nó.
5. Thuộc tính margin trong các phần tử nội tuyến (inline elements)
Khi áp dụng margin cho các phần tử nội tuyến (inline elements) như <span>, <a>, thuộc tính margin-top và margin-bottom thường không có hiệu quả rõ rệt. Tuy nhiên, margin-left và margin-right vẫn sẽ hoạt động bình thường.
Ví dụ:
span {
margin-left: 10px;
margin-right: 10px;
}Kết quả: Các phần tử span sẽ có khoảng cách 10px ở hai bên trái và phải.
6. Gộp margin (Margin collapsing)
Trong CSS, gộp margin (margin collapsing) xảy ra khi hai phần tử có khoảng cách margin phía trên và phía dưới gặp nhau. Thay vì cộng dồn hai khoảng cách margin này, trình duyệt sẽ chỉ áp dụng khoảng cách lớn hơn.
Ví dụ:
h1 {
margin-bottom: 30px;
}
p {
margin-top: 20px;
}Trong ví dụ trên:
h1có margin dưới là 30px.pcó margin trên là 20px.
Thay vì cộng tổng hai khoảng cách (30px + 20px = 50px), trình duyệt sẽ chỉ áp dụng khoảng cách lớn hơn là 30px.
Khi nào margin gộp lại?
- Khi hai phần tử khối nằm liền kề nhau.
- Khi phần tử rỗng không có nội dung, viền, padding.
Lưu ý: Margin gộp không xảy ra với margin-left và margin-right, mà chỉ xảy ra với margin-top và margin-bottom.
7. Giá trị inherit cho margin
Bạn có thể sử dụng giá trị inherit để kế thừa giá trị margin từ phần tử cha. Điều này rất hữu ích khi bạn muốn đảm bảo tính đồng nhất về bố cục giữa các phần tử con và phần tử cha.
Ví dụ:
div {
margin: 20px;
}
p {
margin: inherit; /* Kế thừa margin từ phần tử cha */
}Kết quả: Các phần tử p sẽ kế thừa margin từ div, tức là có margin 20px giống như phần tử cha.
8. Margin với các đơn vị khác nhau
Ngoài đơn vị px (pixel), bạn có thể sử dụng nhiều đơn vị khác để chỉ định giá trị margin, bao gồm:
- %: Tính theo phần trăm của kích thước chứa phần tử.
- em: Tính theo kích thước font chữ của phần tử hiện tại.
- rem: Tính theo kích thước font chữ của phần tử gốc (root element).
- vw: Đơn vị viewport width (chiều rộng của cửa sổ trình duyệt).
- vh: Đơn vị viewport height (chiều cao của cửa sổ trình duyệt).
Ví dụ:
div {
margin: 5vw; /* 5% của chiều rộng cửa sổ trình duyệt */
}Kết quả: Phần tử div sẽ có khoảng cách bằng 5% chiều rộng của cửa sổ trình duyệt.
