Canh giữa cho văn bản trong bang trong html

KHOAN ĐÃ! Trước khi đọc bài viết bạn có đang tò mò cách học html + css nhanh hiệu quả nhất mà mình từng trải qua?

Bạn đang tự tìm hiểu về html và css nhưng kiến thức rời rạc, bạn học cảm thấy không được bài bản, việc học nhàm chán và kém hiệu quả? Mình cũng từng tự học như bạn. Mình không bảo tự học là không tốt nhưng nó làm mình mất rất nhiều thời gian hơn so với việc tham gia một khóa học theo cách bài bản. Vào một ngày Mình quyết định đầu tư cho bản thân bằng cách bỏ ít tiền tham gia khóa học html và css của thầy Nguyễn Đức Việt . Kết quả mình học html và css nhanh và hiệu quả hơn rất nhiều. Thầy dạy dễ hiểu , kiến thức thực tiễn cho việc đi làm chứ không có lý thuyết suông. Các bạn có điều kiện nên đầu tư ít tiền cho bản thân để quá trình học html và css nói riêng , lập trình web nói chung để tiến nhanh và hiệu quả nhất trên con đường học lập trình web của mình nhé! Chúc bạn học tốt!

\>>>> Tham khảo khóa học đã giúp mình tại:

zYqrRox by DavidKhai [@davidkhai] on CodePen.[/codepen_embed]

Căn giữa mọi thứ trong CSS là một công việc mà bất kỳ lập trình viên Front end nào cũng phải làm. Nhưng rất nhiều người gặp khó trong vấn đề này.

Mình nghĩ vấn đề không phải là khó thực hiện căn giữa trong CSS, mà ở chỗ có rất nhiều cách thực hiện khác nhau, tùy thuộc vào tình huống, thế nên cũng thật khó để biết cách nào là tốt nhất.

Chính vì thế, hôm nay mình sẽ tổng hợp lại các kỹ thuật căn giữa trong CSS để giúp bạn tiện tra cứu.

I. Căn giữa theo chiều ngang

Căn giữa các phần tử theo chiều ngang trong CSS thì khá là đơn giản:

I.1. Căn giữa nội dòng hoặc căn giữa phần tử inline

Bạn có thể căn giữa các phần tử nội tuyến [text hoặc link...] theo chiều ngang của trong phần tử cha [block-level], bằng cách đặt vào phần tử cha đoạn code CSS này:

Ví dụ: Căn giữa nội dung của thẻ p, hoặc thẻ a bên trong nav

Cách này sẽ hoạt động cho inline, inline-block, inline-table, inline-flex, v.v.

\> Lưu ý: Nếu bạn không thấy được ví dụ trong Codepen thì bạn phải vào Codpen.io -> Vượt captcha -> Đăng nhập tài khoản -> Sau đó quay lại đây và bấm F5

I.2. Căn giữa phần tử block

Bạn có thể căn giữa một phần tử block bằng cách thiết lập:

  • margin-leftmargin-right thành auto

Và lưu ý là phải thiết lập width cho nó, nếu không thì chiều rộng của nó là 100% [bằng phần tử cha] và không cần căn giữa [Giải pháp này không áp dụng căn giữa cho nội dung bên trong nó]

Căn giữa theo cách này thường được viết tắt như thế này:

Ví dụ: Căn giữa thẻ div được đặt bên trong thẻ main.

Điều này sẽ hoạt động bất kể chiều rộng của phần tử block mà bạn đang căn giữa hay phần tử cha là bao nhiêu.

I.3. Căn giữa nhiều phần tử block

Nếu bạn có hai hoặc nhiều phần tử block cần được căn giữa theo chiều ngang trong một hàng, bạn có thể dễ dàng làm điều đó bằng cách đổi kiểu hiển thị [thuộc tính display].

Dưới đây là một ví dụ về sử dụng flexbox để căn giữa [cách làm này rất đơn giản và phổ biến nhất]:

Nếu bạn vẫn muốn mỗi phần tử block là một hàng thì sử dụng `a`0 vẫn tốt:

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

Căn giữa các phần tử theo chiều dọc trong CSS thì phức tạp hơn một chút.

  • Và nếu đó là inline hoặc inline-* element:

II.1. Căn giữa theo chiều dọc [sigle line]

Đôi khi, phần tử inline hoặc text có thể được căn giữa theo chiều dọc bằng cách sử dụng `a`1 bằng nhau, ví dụ:

padding-top: 30px;

padding-bottom: 30px;

}

Ví dụ: Căn text ở giữa theo chiều dọc của thẻ a

Nếu không sử dụng padding vì một lý do nào đó, thì có một mẹo là làm cho chiều cao của dòng [`a`3] bằng chiều cao của phần tử đó [nếu nội dung không dài và không cần xuống dòng].

Ví dụ: Nếu phần tử có `a`4 thì chúng ta đặt `a`3 là `a`6 để text bên trong đó tự động vào giữa theo chiều dọc.

II.2. Căn giữa theo chiều dọc [multipe lines]

Phần đệm [`a`1] bằng nhau ở trên và dưới cũng có thể tạo hiệu ứng căn giữa cho nhiều dòng văn bản.

Trong trường hợp này, bạn có thể sử dụng thuộc tính `a`8 cho kiểu table [thực hoặc được thay đổi display]

Nếu phần tử là table thì mặc định nó sẽ căn giữa ô bảng [table-cell].

Còn nếu bạn thiết lập từ CSS thì bạn cần phải chỉ định `a`9 như trong ví dụ sau:

Nếu trong trường hợp không thể biến nó thành table, có lẽ bạn có thể sử dụng flexbox:

display: flex;

flex-direction: column;

justify-content: center;

}

Cách làm này đơn giản hơn rất nhiều.

Một phần tử flex con có thể được căn giữa trong một phần tử flex cha khá dễ dàng như sau:

\> Lưu ý: Nó chỉ thực sự có liên quan nếu container mẹ có chiều cao cố định [px, %, v.v.], đó là lý do tại sao container ở đây có thiết lập chiều cao.

Nếu cả hai kỹ thuật này vì lý do nào đó mà không hiệu quả, bạn có thể sử dụng thủ thuật "Amazing Gút chóp" này:

  • Tạo một tử giả có chiều cao 100% được đặt bên trong container
  • Sau đó văn bản được căn chỉnh theo chiều dọc với nó.

Nhìn chung kỹ thuật sẽ như thế này:

position: relative;

}

/* Tạo phần tử giả */

.container::before {

content: " ";

display: inline-block;

height: 100%;

width: 1%;

vertical-align: middle;

}

/* Căn giữa dựa vào phần tử giả */

.container p {

display: inline-block;

vertical-align: middle;

}

Ví dụ:

  • Còn nếu đó là block-level:

II.3. Căn giữa block-level nếu biết chiều cao

Khá phổ biến khi không biết chiều cao trong bố cục trang web, vì nhiều lý do:

  • Chiều rộng thay đổi, văn bản không xuống hàng cũng có thể thay đổi chiều cao. Sự khác nhau trong kiểu dáng của văn bản có thể thay đổi chiều cao.
  • Sự khác nhau về số lượng văn bản có thể thay đổi chiều cao.
  • Các phần tử có tỷ lệ khung hình cố định, như hình ảnh, có thể thay đổi chiều cao khi thay đổi kích thước.
  • ...

Nhưng nếu bạn đã biết chiều cao, bạn có thể căn giữa theo chiều dọc như:

position: relative;

}

.child {

position: absolute;

top: 50%;

height: 100px;

margin-top: -50px;

/* Tính đến padding và border nếu không sử dụng box-sizing: border-box; */

}

Ví dụ:

II.4. Căn giữa block-level nếu chưa biết chiều cao

Nếu chưa biết chiều cao, bạn vẫn có thể căn giữa nó bằng cách di chuyển nó lên 50% chiều cao của nó sau khi di chuyển nó xuống 50%:

position: relative;

}

.child {

position: absolute;

top: 50%; /* Cách top 50% */

/* Tại vị trí này, dịch chuyển lên trên theo chiều Y 50% */

transform: translateY[-50%];

}

Ví dụ:

II.4. Căn giữa block-level theo chiều dọc với flexbox

Căn giữa theo chiều dọc một block-level rất dễ dàng với flexbox.

display: flex;

flex-direction: column;

justify-content: center;

}

Ví dụ:

Bạn cũng có thể căn giữa trong flexbox bằng cách sử dụng `nav`0 trên phần tử con.

III. Căn giữa theo cả chiều ngang và chiều dọc trong CSS

Bạn có thể kết hợp các kỹ thuật trên theo bất kỳ cách nào để có được các yếu tố chính giữa một cách hoàn hảo.

Tuy nhiên, ba nhóm này là cách thường làm:

III.1. Căn giữa hoàn toàn nếu chiều rộng và chiều cao là cố định

Nếu chiều rộng và chiều cao là cố định, chúng ta có thể sử dụng margin âm bằng một nửa chiều rộng và chiều cao đó.

Sau đó `nav`1 và dịch chuyển `nav`2 và `nav`3 để căn giữa nó với sự hỗ trợ tốt trên nhiều trình duyệt.

Về cơ bản là như thế này:

position: relative;

}

.child {

width: 200px;

height: 100px;

padding: 20px;

position: absolute;

top: 50%;

left: 50%;

margin: -70px 0 0 -120px;

}

Ví dụ:

III.2. Căn giữa hoàn toàn nếu chưa biết chiều rộng và chiều cao

Nếu bạn không biết chiều rộng hoặc chiều cao, bạn có thể sử dụng thuộc tính `nav`4 và `nav`5 -50% theo cả hai hướng [dựa trên chiều rộng / chiều cao hiện tại của phần tử] để căn giữa:

position: relative;

}

.child {

position: absolute;

/* Dịch chuyển 50% theo theo phần tử định vị*/

top: 50%;

left: 50%;

/* Dịch chuyển ngược lại 50% theo chiều rộng và chiều cao */

transform: translate[-50%, -50%];

}

Ví dụ:

III.3. Căn giữa hoàn toàn với flexbox

Để căn giữa theo cả hai hướng với flexbox, bạn cần sử dụng hai thuộc tính căn giữa như thế này:

display: flex;

justify-content: center;

align-items: center;

}

Ví dụ:

III.4. Căn giữa hoàn toàn với Grid

Hoặc bạn cũng có thể sử dụng tính năng CSS GRID để căn giữa hoàn toàn.

html {

height: 100%;

/* Thay đổi kiểu hiển thị thành GRID */

display: grid;

}

span {

/* Căn giữa phần tử cần căn giữa */

margin: auto;

}

Ví dụ:

Tổng kết về căn giữa trong CSS

Đó, đó là tất cả các kỹ thuật căn giữa trong CSS mà mình nghĩ đầy đủ để bạn sử dụng.

Hi vọng nó giúp ích trong quá trình học lập trình Front end của bạn.

\> Nếu bạn yêu thích mảng Front end và muốn học để đi thực tập / đi làm sớm thì tham gia HỌC FRONT END ngay đi thôi!

---

HỌC VIỆN ĐÀO TẠO CNTT NIIT - ICT HÀ NỘI

Học Lập trình chất lượng cao [Since 2002]. Học thực tế + Tuyển dụng ngay!

Đc: Tầng 3, 25T2, N05, Nguyễn Thị Thập, Cầu Giấy, Hà Nội

SĐT: 02435574074 - 0383.180086

Email: hello@niithanoi.edu.vn

Fanpage: //facebook.com/NIIT.ICT/

niit

icthanoi

niithanoi

niiticthanoi

hoclaptrinh

khoahoclaptrinh

hoclaptrinhjava

hoclaptrinhphp

java

php

python

Chủ Đề