Menu

Border trong CSS: độ dày, kiểu, màu và border-radius

Thuộc tính border vẽ một đường viền quanh vùng padding của phần tử. Tìm hiểu cách viết rút gọn border, mọi kiểu viền, màu và từng cạnh riêng, bo góc với border-radius, và border khác outline thế nào.

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.

Cách viết rút gọn border

border vẽ một đường quanh phần tử, nằm giữa padding và margin. Cách viết rút gọn nhận ba phần theo thứ tự bất kỳ: độ dày, kiểu và màu.

PhầnThuộc tính đầy đủGiá trịMặc định
Độ dàyborder-width1px, 0.2em, thin, medium, thickmedium
Kiểuborder-stylesolid, dashed, dotted, double và nhiều kiểu khácnone
Màuborder-colorMàu bất kỳcurrentColor (màu chữ)

Kiểu viền là phần bạn không thể bỏ qua. Mặc định của nó là none, nên border: 2px #2563eb; không vẽ gì cả. Nếu bỏ màu, đường viền lấy màu chữ của phần tử.

Các kiểu viền

double cần ít nhất 3px mới hiện được hai đường. groove, ridge, inset và outset đổ bóng màu để trông như 3D và hơi khác nhau giữa các trình duyệt. hidden trông giống none; hai giá trị này chỉ khác nhau trong bảng có viền gộp (collapsed), nội dung có trong trang viền bảng HTML.

Từng cạnh một

Mỗi cạnh có cách viết rút gọn riêng (border-top, border-right, border-bottom, border-left), và mỗi phần có thuộc tính đầy đủ theo cạnh như border-top-color. Các phiên bản logic, border-inline-start và border-block-end, đi theo hướng của chữ:

border-color, border-width và border-style nhận từ một đến bốn giá trị theo cùng thứ tự chiều kim đồng hồ như padding: trên, phải, dưới, trái.

Bo góc với border-radius

border-radius bo tròn góc của đường viền và của nền, nên dùng được cả với phần tử không có viền.

Giá trịKết quả
border-radius: 8pxBo tròn mọi góc 8px
border-radius: 50%Hình tròn trên phần tử vuông, hình elip trên hình chữ nhật
border-radius: 999pxHình viên thuốc: hai cạnh ngắn thành nửa hình tròn
border-radius: 8px 0Góc trên trái và dưới phải 8px, hai góc còn lại vuông
border-top-left-radius: 12pxChỉ một góc
border-radius: 50% / 25%Góc elip: bán kính ngang / bán kính dọc

Phần tử con có nền có thể lòi ra ngoài góc bo tròn của phần tử cha. overflow: hidden trên phần tử cha sẽ cắt nó theo đường cong.

Border và outline

Outline trông giống border nhưng được vẽ bên ngoài và không chiếm chỗ, nên thêm outline không bao giờ làm xê dịch thứ gì. Vì vậy trình duyệt dùng outline cho vòng focus.

BorderOutline
Chiếm chỗCó, là một phần kích thước hộpKhông
Theo từng cạnhCó (border-top, ...)Không, bao quanh toàn bộ
Theo border-radiusCóCó, trên các trình duyệt hiện nay
Cách xa hộpKhôngCó, outline-offset
Cách dùng thường gặpThiết kếChỉ báo focus, gỡ lỗi

Lỗi thường gặp

  • Không có kiểu viền. border: 1px #111827; và border-color: red; không vẽ gì. Hãy thêm solid (hoặc kiểu khác).
  • Viền làm bố cục nhảy khi hover. Hãy giữ chỗ bằng một viền trong suốt, hoặc dùng outline hay box-shadow.
  • Quên tính viền vào chiều rộng. Phần tử width: 100% có viền sẽ tràn khỏi phần tử chứa khi dùng content-box. Hãy dùng box-sizing: border-box.
  • border-radius mà phần tử con lòi ra ở góc. Thêm overflow: hidden cho phần tử cha được bo góc.
  • Xóa outline focus bằng outline: none. Người dùng bàn phím cần nó; hãy định dạng lại outline thay vì xóa đi.

Câu hỏi thường gặp

Làm sao thêm đường viền trong CSS?

Dùng cách viết rút gọn với độ dày, kiểu và màu: border: 2px solid #2563eb;. Kiểu viền là phần quan trọng nhất: nếu thiếu, kiểu viền là none và không có đường viền nào được vẽ.

Vì sao border CSS của tôi không hiện?

Gần như luôn là vì chưa đặt kiểu viền. Chỉ border: 2px #2563eb; hay border-color: red; thì không vẽ gì, vì border-style mặc định là none. Hãy thêm solid, dashed hoặc một kiểu khác.

Làm sao bo góc trong CSS?

Dùng border-radius: border-radius: 8px; bo tròn cả bốn góc. border-radius: 50%; trên một hình vuông tạo ra hình tròn, còn giá trị lớn như 999px tạo hình viên thuốc. Thuộc tính này bo cả nền, kể cả khi không có đường viền.

Làm sao thêm viền cho một cạnh duy nhất?

Dùng thuộc tính theo cạnh: border-bottom: 2px solid #e5e7eb;, hoặc border-inline-start cho cạnh nơi chữ bắt đầu, cách này cũng đúng với ngôn ngữ viết từ phải sang trái.

border và outline khác nhau thế nào?

Border là một phần của hộp: nó chiếm chỗ và làm thay đổi kích thước phần tử. Outline được vẽ bên ngoài border mà không chiếm chỗ, không đặt riêng được cho từng cạnh, và là thứ trình duyệt dùng cho vòng focus. Cả hai đều theo border-radius trên các trình duyệt hiện nay.

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