Menu

Căn giữa chữ trong HTML: text-align, căn giữa dọc, thụt lề

Căn giữa chữ trong HTML bằng thuộc tính CSS text-align: center. Tìm hiểu nên đặt nó ở đâu, vì sao nó không có tác dụng trên span, cách căn giữa chữ theo chiều dọc trong một khung, cách căn chữ về đầu, cuối hoặc đều hai bên, và cách thụt lề đoạn văn.

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 căn giữa chữ trong HTML

Dùng thuộc tính CSS text-align: center trên phần tử chứa chữ:

text-align căn giữa mọi dòng bên trong phần tử, kể cả những thứ inline như link, ảnh và nút. Thuộc tính này được kế thừa, nên đặt nó trên một khung chứa sẽ căn giữa chữ ở mọi thứ bên trong.

Đặt trên khối, không phải trên span

text-align hoạt động trên các khối chứa: <p>, <div>, tiêu đề, ô bảng. Trên <span> hay <a> nó không làm gì cả, vì phần tử inline chỉ rộng bằng chữ của nó và không còn khoảng trống để căn giữa:

Cách sửa luôn giống nhau: chuyển text-align: center lên khối cha.

Căn giữa khối, căn các dòng về đầu

Với đoạn văn nhiều dòng, chữ căn giữa hoàn toàn rất khó đọc vì mỗi dòng bắt đầu ở một chỗ khác nhau. Cách làm phổ biến là căn giữa khối trên trang và giữ chữ bên trong căn về đầu dòng:

margin-inline: auto căn giữa một khối có chiều rộng, còn text-align căn giữa các dòng bên trong nó. Căn giữa khung (bằng flexbox, grid hoặc margin) có ở trang căn giữa div.

Căn giữa chữ theo chiều dọc

text-align chỉ hoạt động theo chiều ngang. Để căn giữa chữ theo chiều dọc trong một khung, hãy biến khung đó thành flex container:

align-items: center căn giữa theo chiều dọc, justify-content: center căn giữa theo chiều ngang, và text-align: center vẫn căn giữa các dòng so với nhau khi có nhiều dòng. Mẹo line-height chỉ dùng được cho một dòng chữ trong khung có chiều cao biết trước.

Mọi giá trị của text-align

Giá trịKết quả
start (mặc định)Dòng bắt đầu ở mép đầu: bên trái với tiếng Anh, bên phải với tiếng Ả Rập và tiếng Do Thái
endDòng kết thúc ở mép cuối
centerCác dòng được căn giữa
justifyCác dòng được giãn ra chạm cả hai mép (trừ dòng cuối)
left, rightLuôn bên trái hoặc luôn bên phải, bất kể ngôn ngữ

Nên dùng start và end thay cho left và right: chúng tự đảo chiều với các ngôn ngữ viết từ phải sang trái, như khung cuối cho thấy.

Thẻ center cũ

Các trang cũ căn giữa chữ bằng <center> hoặc bằng thuộc tính align:

<center>Old way</center>
<p align="center">Also old</p>

Cả hai đều đã lỗi thời. Trình duyệt vẫn hiển thị chúng để các trang cũ không bị hỏng, nhưng chúng không hợp lệ trong HTML hiện nay và trộn bố cục vào markup. Hãy dùng text-align: center trong CSS.

Thụt lề chữ

HTML không có thẻ thụt lề, và các dấu cách gõ vào sẽ bị gộp lại (xem khoảng trắng trong HTML). Thụt lề là việc của CSS:

Thụt lềCSS
Chỉ dòng đầutext-indent: 2em
Cả khốipadding-inline-start: 2em hoặc margin-inline-start: 2em
Thụt treo (dòng đầu lồi ra)padding-inline-start: 2em; text-indent: -2em

em gắn khoảng thụt lề với cỡ chữ, nên nó co giãn theo chữ.

Lỗi thường gặp

  • text-align trên phần tử inline. Hãy đặt nó lên khối cha.
  • Mong text-align căn giữa một khung. Nó căn giữa chữ và nội dung inline, không phải một khối có chiều rộng. Dùng margin-inline: auto hoặc flexbox cho khung.
  • Dùng <center> hoặc align="center". Đã lỗi thời. Hãy dùng CSS.
  • Căn giữa đoạn văn dài. Chỉ căn giữa tiêu đề và dòng ngắn; giữ phần nội dung căn về đầu dòng.
  • Thụt lề bằng &nbsp; hay dấu cách. Hãy dùng text-indent hoặc padding.

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

Làm sao căn giữa chữ trong HTML?

Thêm text-align: center vào phần tử chứa chữ, ví dụ <p style="text-align: center"> hoặc một quy tắc CSS như h1 { text-align: center; }. Nó căn giữa mọi dòng chữ và nội dung inline bên trong phần tử đó.

Tại sao text-align: center không có tác dụng trên span?

Span là phần tử inline, nên nó chỉ rộng bằng chữ bên trong và không còn chỗ để căn giữa. Hãy đặt text-align: center lên khối cha (thẻ <p> hoặc <div> bao quanh nó), hoặc cho span display: block.

Làm sao căn giữa chữ theo chiều dọc?

Biến khung chứa thành flex box: display: flex; align-items: center; (thêm justify-content: center để căn giữa cả chiều ngang). Với một dòng duy nhất trong khung có chiều cao cố định, đặt line-height bằng chiều cao cũng được.

Thẻ <center> còn hợp lệ không?

Không. <center> và thuộc tính align="center" đã lỗi thời. Trình duyệt vẫn hiển thị chúng cho các trang cũ, nhưng code mới nên dùng text-align: center trong CSS.

Làm sao thụt lề chữ trong HTML?

Dùng CSS. text-indent: 2em thụt dòng đầu của đoạn văn, còn padding-inline-start: 2em hoặc margin-inline-start: 2em thụt cả khối. Dấu cách hay &nbsp; trong văn bản không phải cách thụt lề đáng tin cậy.

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