Div căn chỉnh theo chiều dọc Tất cả các phương pháp căn chỉnh dọc trong CSS

Hôm nay bạn đọc thân mến, chúng ta sẽ giải quyết vấn đề căn chỉnh theo chiều dọc trong một khối div.

Rất có thể bạn đã biết về sự tồn tại của một thuộc tính CSS tuyệt vời căn chỉnh theo chiều dọc. Và chính Chúa đã ra lệnh cho chúng ta sử dụng chính xác đặc tính này để căn chỉnh theo chiều dọc (không phải vô cớ mà nó có một cái tên tự giải thích như vậy).

Xây dựng bài toán: Bạn cần căn giữa nội dung của khối có chiều cao thay đổi so với chiều dọc.

Bây giờ chúng ta hãy bắt đầu giải quyết vấn đề.

Và như vậy, chúng ta có một khối, chiều cao của nó có thể thay đổi:

Chặn nội dung

Điều đầu tiên bạn nghĩ đến là thực hiện động tác giả sau:

Chặn nội dung

Có mọi lý do để tin rằng cụm từ Chặn nội dung sẽ được căn chỉnh theo chiều cao trung tâm của vùng chứa div.

Nhưng nó không có ở đó! Chúng tôi sẽ không đạt được bất kỳ sự liên kết trung tâm như mong đợi nào theo cách này. Và tại sao? Có vẻ như mọi thứ đều được chỉ định chính xác. Hóa ra đây chính là điều đáng tiếc: tài sản căn chỉnh theo chiều dọc chỉ có thể được sử dụng để căn chỉnh nội dung của các ô trong bảng hoặc để căn chỉnh các phần tử nội tuyến tương đối với nhau.

Về căn chỉnh bên trong ô bảng, tôi nghĩ mọi thứ đều rõ ràng. Nhưng tôi sẽ giải thích một trường hợp khác với các phần tử nội tuyến.

Căn chỉnh theo chiều dọc của các phần tử nội tuyến

Giả sử bạn có một dòng văn bản được chia nhỏ bằng thẻ dòng thành các phần:

Bạn chào mừng cái chữ!

Thẻ nội tuyến là một thùng chứa có hình thức không làm cho nội dung được chuyển sang một dòng mới.

Hành động của thẻ khối làm cho nội dung của vùng chứa được chuyển sang một dòng mới.

là thẻ khối. Nếu chúng ta gói các đoạn văn bản thành các khối
, sau đó mỗi người trong số họ sẽ ở trên một dòng mới. Sử dụng thẻ , mà, không giống như
, là chữ thường, các container sẽ không được chuyển sang dòng mới, tất cả các container sẽ vẫn ở trên cùng một dòng.

Thùng đựng hàng thuận tiện sử dụng khi chỉ định một phần văn bản có định dạng đặc biệt (đánh dấu nó bằng màu sắc, phông chữ khác, v.v.)

Đối với container Áp dụng các thuộc tính CSS sau:

#perviy( Vertical-align:sub; ) #vtoroy( Vertical-align:3px; ) #tretiy( Vertical-align:-3px; )

Dòng văn bản kết quả sẽ trông như thế này:

Đây không gì khác hơn là căn chỉnh theo chiều dọc của các phần tử nội tuyến và thuộc tính CSS căn chỉnh theo chiều dọcđối phó với nhiệm vụ này một cách hoàn hảo.

Chúng ta hơi phân tâm một chút, bây giờ chúng ta quay lại nhiệm vụ chính của mình.

Căn chỉnh dọc trong vùng chứa div

Dù thế nào đi nữa, để căn chỉnh trong vùng chứa div, chúng ta sẽ sử dụng thuộc tính căn chỉnh theo chiều dọc. Như tôi đã nói, thuộc tính này có thể được sử dụng trong trường hợp căn chỉnh các phần tử nội tuyến (chúng ta đã thảo luận chi tiết về trường hợp này ở trên và nó không phù hợp với chúng ta để căn chỉnh trong vùng chứa div); tất cả những gì còn lại là sử dụng thực tế rằng căn chỉnh theo chiều dọc hoạt động cho các ô của bảng.

Làm thế nào chúng ta có thể sử dụng điều này? Chúng tôi không có bảng, chúng tôi làm việc với vùng chứa div.

Ha, hóa ra lại rất đơn giản.

Thuộc tính CSS trưng bày cho phép bạn biến khối div của chúng tôi thành một ô trong bảng, việc này có thể được thực hiện dễ dàng và tự nhiên:

Giả sử chúng ta có một lớp div căn chỉnh văn bản:

Chặn nội dung

Đối với khối này, chúng tôi chỉ định thuộc tính CSS sau:

Textalign(hiển thị: ô bảng; )

Hướng dẫn CSS này sẽ biến div của chúng ta thành một ô bảng một cách thần kỳ mà không cần thay đổi trực quan nó theo bất kỳ cách nào. Và đối với một ô trong bảng, chúng ta có thể áp dụng thuộc tính căn chỉnh theo chiều dọcđầy đủ và căn chỉnh theo chiều dọc mong muốn sẽ hoạt động.

Tuy nhiên, mọi thứ không thể kết thúc đơn giản như vậy. Chúng tôi có một trình duyệt IE tuyệt vời. Anh ta không biết cách làm việc với tài sản hiển thị: ô bảng(Tôi khuyên bạn nên đọc bảng minh họa chức năng của thuộc tính CSS này trong các trình duyệt khác nhau trên trang web htmlbook.ru). Vì vậy, chúng ta sẽ phải dùng đến nhiều thủ đoạn khác nhau.

Có nhiều cách để đạt được sự căn chỉnh trong vùng chứa div cho tất cả các trình duyệt:

  • Phương pháp sử dụng vùng chứa div phụ trợ bổ sung
  • Phương pháp sử dụng biểu thức. Nó được kết nối với một phép tính phức tạp về chiều cao khối. Bạn không thể làm điều này nếu không có kiến ​​thức về JavaScript.
  • Sử dụng thuộc tính chiều cao dòng. Phương pháp này chỉ thích hợp cho việc căn chỉnh theo chiều dọc trong một khối có chiều cao đã biết và do đó không áp dụng được trong trường hợp chung.
  • Sử dụng offset nội dung tuyệt đối và tương đối trong trường hợp trình duyệt IE. Phương pháp này đối với tôi có vẻ dễ hiểu và đơn giản nhất. Ngoài ra, nó có thể triển khai được cho vùng chứa div có chiều cao thay đổi. Chúng tôi sẽ tập trung vào nó chi tiết hơn.

Như bạn đã hiểu, chúng ta chỉ cần giải quyết vấn đề căn chỉnh theo chiều dọc trong IE liên quan đến sự hiểu lầm về thuộc tính của nó hiển thị: ô bảng(không phải IE6, cũng không phải IE7, cũng không phải IE8 không quen thuộc với tính chất này). Vì vậy, sử dụng bình luận có điều kiện Chúng tôi sẽ chỉ định các thuộc tính CSS khác nhau dành riêng cho trình duyệt IE.

Bình luận có điều kiện

Loại công trình:

... Инструкции, действующие только в случае выполнения условия в квадратных скобках...

được gọi là nhận xét có điều kiện (hãy cẩn thận, loại nhận xét có điều kiện phải hoàn toàn tương ứng với ví dụ đã cho, tối đa một khoảng trắng).

Các hướng dẫn có trong nhận xét có điều kiện như vậy sẽ chỉ được thực thi nếu trình duyệt diễn giải mã này thuộc họ IE.

Do đó, bằng cách sử dụng nhận xét có điều kiện, chúng ta có thể ẩn một đoạn mã khỏi tất cả các trình duyệt ngoại trừ IE.

Giải pháp của vấn đề

Vì tất cả mùi tây này, chúng tôi sẽ cần cung cấp mã HTML của mình với hai vùng chứa bổ sung. Khối văn bản của chúng ta sẽ trông như thế này:

Đây là một loại văn bản xác minh.
Nó bao gồm hai dòng.

Đối với lớp chứa div căn chỉnh văn bản Các thuộc tính CSS được đặt để căn chỉnh nội dung của nó theo chiều dọc cho tất cả các trình duyệt thông thường (tất nhiên ngoại trừ IE):

Hiển thị: ô bảng; căn dọc: giữa;

Và hai thuộc tính nữa đặt chiều rộng và chiều cao cho khối:

Chiều rộng: 500px; chiều cao: 500px;

Điều này là khá đủ để căn chỉnh nội dung của vùng chứa ở giữa theo chiều dọc, trong tất cả các trình duyệt ngoại trừ IE.

Bây giờ chúng ta bắt đầu thêm các thuộc tính liên quan đến căn chỉnh dành cho các trình duyệt thuộc họ IE(đối với họ, chúng tôi đã sử dụng các khối bổ sung divnhịp):

Đề cập đến thẻ div bên trong một khối lớp căn chỉnh văn bản. Để thực hiện việc này, trước tiên bạn cần chỉ ra tên của lớp, sau đó, cách nhau bằng dấu cách, thẻ mà chúng ta đang truy cập.

Căn chỉnh văn bản div(vị trí: tuyệt đối; trên cùng: 50%; )

Thiết kế này có nghĩa là: cho tất cả các thẻ div bên trong một khối có một lớp căn chỉnh văn bảnáp dụng các thuộc tính được liệt kê.

Theo đó, các kiểu được chỉ định cho khối căn chỉnh văn bảnđược sửa đổi:

Textalign(hiển thị: ô bảng; căn dọc: giữa; chiều rộng:500px; chiều cao: 500px; vị trí: tương đối; )

Bây giờ điểm trên cùng bên trái của khối văn bản được di chuyển xuống 50%.

Để giải thích điều gì đang xảy ra, tôi đã vẽ một minh họa:

Như bạn có thể thấy trong hình, chúng tôi đã đạt được một số tiến bộ. Nhưng đó không phải là tất cả! Điểm trên cùng bên trái của khối màu vàng thực sự đã di chuyển xuống 50% so với khối gốc (màu tím). Nhưng chúng ta cần nó ở độ cao bằng 50% chiều cao của khối màu tím. trung tâm của khối màu vàng, không phải điểm trên cùng bên trái của nó.

Bây giờ thẻ sẽ phát huy tác dụng nhịp và vị trí tương đối của nó:

Khoảng văn bản(vị trí: tương đối; trên cùng: -50%; )

Do đó, chúng ta đã dịch chuyển khối màu vàng lên 50% chiều cao của nó so với vị trí ban đầu. Như bạn hiểu, chiều cao của khối màu vàng bằng chiều cao của nội dung được căn giữa. Và thao tác cuối cùng trên span container đã đặt nội dung của chúng ta vào giữa khối màu tím. Hoan hô!

Hãy gian lận một chút

Trước hết, chúng ta cần ẩn mùi tây khỏi tất cả các trình duyệt thông thường và mở nó cho IE. Tất nhiên, điều này có thể được thực hiện bằng cách sử dụng một nhận xét có điều kiện; không phải vô ích mà chúng ta đã làm quen với nó:

Có một vấn đề nhỏ. Nếu nội dung được căn giữa quá cao thì điều này sẽ dẫn đến hậu quả khó chịu: có thêm chiều cao cho cuộn dọc.

Giải pháp cho vấn đề: cần thêm thuộc tính tràn: ẩn khối textalign.

Tìm hiểu chi tiết về tài sản tràn ra có thể trong .

Hướng dẫn CSS cuối cùng cho khối căn chỉnh văn bản có dạng:

Textalign(hiển thị: ô bảng; căn chỉnh dọc: giữa; chiều rộng: 500px; chiều cao: 500px; vị trí: tương đối; tràn: ẩn; đường viền: 1px màu đen đậm; )

Tôi xin lỗi, tôi quên đề cập đến một điểm quan trọng. Nếu bạn cố gắng thiết lập chiều cao của khối lớp căn chỉnh văn bản như một phần trăm, Sau đó bạn có sẽ không có gì hiệu quả.

Căn giữa khối có chiều cao thay đổi

Rất thường xuyên có nhu cầu đặt chiều cao của khối lớp căn chỉnh văn bản không phải bằng pixel mà là phần trăm chiều cao của khối cha và căn chỉnh nội dung của vùng chứa div ở giữa.

Điều đáng chú ý là không thể thực hiện điều này đối với một ô trong bảng (nhưng khối lớp căn chỉnh văn bản biến chính xác thành một ô bảng, nhờ thuộc tính hiển thị:ô bảng).

Trong trường hợp này, bạn phải sử dụng một khối bên ngoài có thuộc tính CSS được chỉ định hiển thị: bảng và đã đặt giá trị phần trăm của chiều cao cho nó. Sau đó, khối được lồng trong đó với lệnh CSS hiển thị:ô bảng, sẽ vui vẻ kế thừa chiều cao của khối cha.

Để triển khai khối có chiều cao thay đổi trong ví dụ của chúng tôi, chúng tôi sẽ chỉnh sửa CSS một chút:

Đến lớp căn chỉnh văn bản chúng tôi sẽ thay đổi giá trị tài sản trưng bày Với ô bảng TRÊN bàn và loại bỏ chỉ thị căn chỉnh căn dọc: giữa. Bây giờ chúng ta có thể thay đổi giá trị chiều cao từ 500 pixel thành 100% một cách an toàn.

Vì vậy các thuộc tính CSS cho khối lớp căn chỉnh văn bản sẽ trông như thế này:

Textalign( display: bảng; chiều rộng: 500px; chiều cao: 100%; vị trí: tương đối; tràn: ẩn; đường viền: 1px màu đen đậm; )

Tất cả những gì còn lại là triển khai việc tập trung vào nội dung. Để làm điều này, một thùng chứa div được lồng trong một khối lớp căn chỉnh văn bản(đây là khối màu vàng giống trong hình), bạn cần đặt thuộc tính CSS hiển thị:ô bảng, thì nó sẽ kế thừa chiều cao 100% từ khối cha căn chỉnh văn bản(khối màu tím). Và không có gì ngăn cản chúng ta căn chỉnh nội dung của vùng chứa div lồng nhau ở giữa với thuộc tính căn dọc: giữa.

Chúng tôi nhận được một danh sách bổ sung các thuộc tính CSS khác cho khối div được lồng trong vùng chứa căn chỉnh văn bản.

Textalign div( display: table-cell; Vertical-align: middle; )

Đó là toàn bộ thủ thuật. Nếu muốn, bạn có thể có chiều cao thay đổi với nội dung được căn giữa.

Để biết thêm thông tin về căn chỉnh theo chiều dọc của khối có chiều cao thay đổi, hãy xem .

Việc căn chỉnh các thành phần khác nhau, chẳng hạn như trên một trang web hoặc trang, ban đầu là một nhiệm vụ khó khăn đối với một số người vì việc căn chỉnh văn bản theo chiều dọc bị ảnh hưởng. Thật kỳ lạ, một trong những cách khó sử dụng CSS nhất là tập trung vào nội dung. Việc căn giữa nội dung theo chiều ngang tương đối dễ dàng tại một số thời điểm. Việc căn giữa nội dung theo chiều dọc hầu như luôn khó khăn. Căn giữa một phần tử khác cần được căn chỉnh theo chiều dọc bằng CSS. Đây chắc chắn là một câu hỏi rất thường gặp và gây khó khăn cho các nhà thiết kế và quản trị viên web. Tuy nhiên, có nhiều phương pháp để thực hiện định tâm dọc và mỗi phương pháp đều khá dễ sử dụng.

Nếu bạn đã từng thử thì sẽ thấy khó, đặc biệt nếu bạn muốn tránh sử dụng bảng. May mắn thay, tiếng kêu cứu của chúng tôi đã được lắng nghe và một trong những vũ khí mới được thêm vào kho vũ khí CSS để giải quyết vấn đề này là một kiểu bố cục được gọi là bố cục hộp linh hoạt. Như bạn sẽ tìm hiểu sau đây, nó cung cấp cho bạn một số tính năng thực sự tuyệt vời để đơn giản hóa các bố cục phức tạp. Một số chức năng tuyệt vời này cũng cho phép bạn căn giữa nội dung của mình theo chiều dọc và chiều ngang và đó là những gì chúng tôi sẽ đề cập trong hướng dẫn này. Bạn có thể thực hiện việc này bằng phần đệm ở một mức độ nào đó, nhưng nó có thể đưa bố cục của bạn đến các màn hình nhỏ hơn. Việc thêm một lớp CSS tùy chỉnh vào biểu định kiểu của bạn có nghĩa là bạn có thể căn giữa bất kỳ nội dung nào theo chiều dọc trong vài giây.

Căn chỉnh ngang xác định cách các cạnh trái và phải của đoạn văn thẳng hàng giữa các cạnh trái và phải của hộp văn bản. Căn chỉnh dọc xác định vị trí dọc của ký tự trong trường văn bản. Việc thiếu các cách tốt để căn giữa các phần tử theo chiều dọc trong CSS đã là một lỗ hổng đen tối đối với danh tiếng của nó trong gần như toàn bộ sự tồn tại của nó.

Phương pháp đầu tiên với chiều cao dòng

Phương pháp đầu tiên đơn giản và hơi tầm thường, nhưng nó có những nhược điểm sẽ hạn chế việc sử dụng nó. Khi mã hóa các trang html cho một trang web, khoảng cách dòng của nội dung văn bản có lẽ là một trong những thuộc tính thường được để mặc định. Nói chung, chúng ta cần đặt chiều cao của chính dòng đó, có chiều cao tương tự cho khối nơi nó được sử dụng chiều cao giữa các dòng tài sản.


Đây là phương pháp đầu tiên được thể hiện trong các cuộc biểu tình



CSS

Constutesim_first(
đường viền: 2px liền khối #bf1515;
chiều cao: 175px;
}
.constutesim_first > p(
chiều cao dòng: 175px;
lề:0;
căn chỉnh văn bản:giữa;
phần đệm: 0;
cỡ chữ: 17px;
màu sắc: #3152a0;
Họ phông chữ: Tahoma;
độ dày phông chữ: đậm;
}


Bạn cũng có thể thấy ngay mọi thứ sẽ trông như thế nào trong thực tế.

Sử dụng một phương pháp tương tự, có thể nhận ra cách định vị hình ảnh, hình ảnh sẽ ở giữa và chắc chắn là theo chiều dọc. Ở đây tất cả những gì còn lại là chỉ định một thuộc tính: Vertical-align: middle; chịu trách nhiệm hiển thị hình ảnh.


.png">Biến thể thứ hai, đi kèm với hình ảnh


CSS

Biến thể thứ hai (
đường viền: 2px màu đỏ đậm;
chiều cao dòng: 158px;
}

Div biến thể thứ hai(
căn chỉnh văn bản:giữa;
}
.img-biến thể thứ hai (
căn dọc: giữa;
đường viền: 0px liền khối #3a3838;
}


Chúng tôi triển khai ảnh chụp nhanh ở giữa và dọc.

Căn chỉnh với thuộc tính vị trí

Đây có lẽ là phương pháp được biết đến nhiều nhất nhưng cũng là phương pháp được sử dụng rộng rãi nhất khi sử dụng CSS. Nhưng ở đây chúng ta cần nói thêm rằng nó cũng không lý tưởng và phương pháp này cũng có những sắc thái nhỏ riêng liên quan đến tâm của phần tử, nếu đặt theo tỷ lệ phần trăm thì nó sẽ được căn giữa ở phía bên trái của phần tử. phía trên, bên trong blog.




CSS

Tùy chọn cạnh tranh (
đường viền: 2px liền khối #d40e0e;
chiều cao: 162px;
vị trí: tương đối;
}
.competaird-option div (
vị trí: tuyệt đối;
trên cùng: 50%;
trái: 50%;
chiều cao: 28%;
chiều rộng: 49%;
ký quỹ: -2% 0 0 -25%;
đường viền: 2px liền khối #4a4848;
}


Khoảng cách dòng hoặc chiều cao dòng là chiều cao dọc giữa các dòng văn bản trong trang HTML được hiển thị. Hầu như luôn luôn giá trị khoảng cách này được trình duyệt hoặc công cụ kết xuất đặt thành giá trị thích hợp. Giá trị này thường phụ thuộc vào phông chữ của trang đang được hiển thị và các yếu tố khác.

Căn chỉnh với thuộc tính bảng

Trong phương pháp này, chúng tôi sử dụng phương pháp cũ và đã được chứng minh, trong đó chúng tôi chuyển đổi các phần tử thành một bảng chứa các ô. Còn thẻ table sẽ không được sử dụng ở đây, ở đây chúng ta sẽ đặt các thuộc tính CSS hoàn toàn khác nhau, đây là display: table;, display: table-cell;. Nếu chúng ta nói về các phiên bản IE cũ nhất, thì dữ liệu sẽ không được hiển thị ở đây. Tôi hy vọng bạn đã cập nhật trình duyệt của mình vì nó không còn phù hợp nữa và hiển thị hầu hết mọi thứ không chính xác.

Biến thể Cherevert (
đường viền: 2px liền khối #c30b0b;
chiều cao: 173px;
hiển thị: bảng;
chiều rộng: 100%;
cỡ chữ: 17px;
độ dày phông chữ: đậm;
màu sắc: #3945a0;
}

Cherevert-biến div(
hiển thị: ô bảng;
căn dọc: giữa;
căn chỉnh văn bản:giữa;
}


Trước hết, hãy xem đâu là mặc định được hầu hết các trình duyệt sử dụng. Hầu hết các trình duyệt ban ngày hiện đại đều có khoảng cách dòng.

Căn chỉnh với thuộc tính flex

Ở đây chúng ta đến với một phiên bản nguyên bản hơn, có các thuộc tính riêng mà hiếm khi có thể tìm thấy trong cách bố trí tài nguyên Internet. Nhưng chúng vẫn được sử dụng và trong một số trường hợp chúng vẫn hữu ích. Điều này thiết lập trục chính, do đó định nghĩa của các phần tử linh hoạt định hướng được đặt trong vùng chứa đĩa mềm.


Căn chỉnh với thuộc tính flex


CSS

Biến thể ngang (
đường viền: 2px liền khối #d20c0c;
chiều cao: 147px;
hiển thị: linh hoạt;
căn chỉnh các mục: giữa;
biện minh-nội dung: trung tâm;
cỡ chữ: 18px;
độ dày phông chữ: đậm;
màu sắc: #49518c;
}


Bạn có thể chỉ định giá trị cho chiều cao hàng giống như cách bạn chỉ định bất kỳ kích thước nào khác trong css, dưới dạng số, kích thước pixel hoặc tỷ lệ phần trăm.

Căn chỉnh với thuộc tính biến đổi

Và bây giờ chúng ta đã đến với phương pháp cực đoan nhất, nhưng chưa phải là ứng dụng mới nhất trong việc sử dụng thiết kế web của nó. Mọi thứ ở đây đều đơn giản, bạn cần dịch chuyển phần tử đã chỉ định theo chiều dọc đến giá trị bạn cần. Tài sản biến đổi, đây là danh sách các phép biến đổi mà trình cài đặt áp dụng khi cài đặt gói. Trình cài đặt áp dụng các phép biến đổi theo thứ tự giống như chúng được chỉ định trong thuộc tính.


Căn chỉnh với thuộc tính biến đổi


CSS

Dọc-medilpasudsa (
đường viền: 2px liền khối #e00a0a;
chiều cao: 158px;
cỡ chữ: 19px;
độ dày phông chữ: đậm;
màu: #353c71;
}
.vertical-medilpasudsa > div(
vị trí: tương đối;
trên cùng: 50%;
biến đổi: dịchY(-50%);
căn chỉnh văn bản:giữa;
}


Khi bạn chỉ định các giá trị dưới dạng số, nó sẽ sử dụng cỡ chữ hiện tại làm cơ sở. Kích thước phông chữ hiện tại được nhân với số bạn chỉ định để tính chiều cao dòng hoặc khoảng cách giữa các dòng.

Nếu bạn muốn căn giữa các ký tự theo chiều ngang trong một phần tử, bạn nên sử dụng text-align: center. Một tùy chọn là nếu bạn muốn căn giữa nó theo chiều dọc và bạn có chân trang đầu trang và một hàng văn bản cố định, hãy đặt chiều cao của dòng bằng với chiều cao của chân trang.

Nếu bạn cần căn giữa văn bản trong một phần tử như div, tiêu đề hoặc đoạn văn, bạn có thể sử dụng thuộc tính CSS căn chỉnh văn bản.

Căn chỉnh văn bản có một số thuộc tính hợp lệ:

Trung tâm: Kết cấu được căn giữa;
bên trái: Sẽ được căn chỉnh về phía bên trái của vùng chứa;
Phải: Căn chỉnh về phía bên phải của container
biện minh: Buộc phải căn chỉnh theo cả hai cạnh trái và phải của container, ngoại trừ các đường viền ngoài cùng;
biện minh-tất cả: Làm cho đường cực đoan biện minh cho các dấu hiệu;
bắt đầu: Tương tự như bên trái, chỉ khi hướng đi từ trái sang phải. Nhưng sẽ đúng nếu ban đầu bạn đặt hướng văn bản, điều này sẽ xảy ra từ phải sang trái;
Kết thúc: Ngược lại với sự khởi đầu;
cha mẹ phù hợp: Tương tự như kế thừa, ngoại trừ phần bắt đầu và kết thúc, nó được tính tương ứng với phần tử cha;

Sử dụng các thuộc tính này để căn chỉnh văn bản trong div cha hoặc trình bao bọc. Nếu bạn muốn căn giữa văn bản theo chiều ngang trong một phần tử, bạn nên sử dụng text-align: center.

Một tùy chọn là nếu bạn muốn căn giữa nó theo chiều dọc, nếu bạn có chân trang đầu trang cố định và một hàng văn bản, hãy đặt chiều cao của dòng bằng với chiều cao của chân trang.

Tôi nghĩ nhiều người trong số các bạn từng làm việc với bố cục đã gặp phải nhu cầu căn chỉnh các phần tử theo chiều dọc và biết những khó khăn nảy sinh khi căn chỉnh một phần tử vào giữa.

Có, có một thuộc tính căn chỉnh theo chiều dọc đa giá trị đặc biệt trong CSS để căn chỉnh theo chiều dọc. Tuy nhiên, trên thực tế nó không hề hoạt động như mong đợi. Hãy thử tìm hiểu điều này.


Hãy so sánh các phương pháp sau. Căn chỉnh bằng cách sử dụng:

  • những cái bàn,
  • thụt đầu dòng,
  • chiều cao giữa các dòng
  • kéo dài,
  • biên độ âm,
  • biến đổi
  • phần tử giả
  • flexbox.
Để minh họa, hãy xem xét ví dụ sau.

Có hai phần tử div, trong đó một phần tử được lồng vào phần tử kia. Hãy cung cấp cho họ các lớp tương ứng - bên ngoài và bên trong.


Thử thách là căn chỉnh phần tử bên trong với tâm của phần tử bên ngoài.

Đầu tiên, hãy xem xét trường hợp khi kích thước của khối bên ngoài và khối bên trong được biết đến. Hãy thêm quy tắc display: inline-block vào phần tử bên trong và text-align: center và Vertical-align: middle vào phần tử bên ngoài.

Hãy nhớ rằng căn chỉnh chỉ áp dụng cho các phần tử có chế độ hiển thị nội tuyến hoặc khối nội tuyến.

Hãy đặt kích thước của các khối cũng như màu nền để chúng ta có thể nhìn thấy đường viền của chúng.

Bên ngoài ( chiều rộng: 200px; chiều cao: 200px; căn chỉnh văn bản: giữa; căn chỉnh dọc: giữa; màu nền: #ffc; ) .inner ( hiển thị: khối nội tuyến; chiều rộng: 100px; chiều cao: 100px; màu nền : #fcc; )
Sau khi áp dụng các kiểu, chúng ta sẽ thấy khối bên trong được căn chỉnh theo chiều ngang chứ không phải theo chiều dọc:
http://jsfiddle.net/c1bgfffq/

Tại sao nó lại xảy ra? Vấn đề là thuộc tính căn chỉnh dọc ảnh hưởng đến việc căn chỉnh chính phần tử đó chứ không phải nội dung của nó(trừ khi nó được áp dụng cho các ô của bảng). Do đó, việc áp dụng thuộc tính này cho phần tử bên ngoài không tạo ra bất cứ thứ gì. Hơn nữa, việc áp dụng thuộc tính này cho một phần tử bên trong cũng sẽ không có tác dụng gì, vì các khối nội tuyến được căn chỉnh theo chiều dọc so với các khối liền kề và trong trường hợp của chúng ta, chúng ta có một khối nội tuyến.

Có một số kỹ thuật để giải quyết vấn đề này. Dưới đây chúng ta sẽ xem xét kỹ hơn về từng người trong số họ.

Căn chỉnh bằng bảng

Giải pháp đầu tiên bạn nghĩ đến là thay thế khối bên ngoài bằng một bảng gồm một ô. Trong trường hợp này, việc căn chỉnh sẽ được áp dụng cho nội dung của ô, tức là cho khối bên trong.


http://jsfiddle.net/c1bgfffq/1/

Nhược điểm rõ ràng của giải pháp này là, từ quan điểm ngữ nghĩa, việc sử dụng bảng để căn chỉnh là không chính xác. Nhược điểm thứ hai là việc tạo bảng yêu cầu thêm một phần tử khác xung quanh khối bên ngoài.

Điểm trừ đầu tiên có thể được loại bỏ một phần bằng cách thay thế thẻ table và td bằng div và thiết lập chế độ hiển thị bảng trong CSS.


.outer-wrapper ( display: table; ) .outer ( display: table-cell; )
Tuy nhiên, khối bên ngoài vẫn sẽ là một cái bàn với mọi hậu quả sau đó.

Căn chỉnh bằng cách sử dụng thụt lề

Nếu biết chiều cao của khối bên trong và bên ngoài, thì có thể đặt căn chỉnh bằng cách sử dụng thụt lề dọc của khối bên trong bằng công thức: (H bên ngoài – H bên trong) / 2.

Bên ngoài ( chiều cao: 200px; ) . bên trong ( chiều cao: 100px; lề: 50px 0; )
http://jsfiddle.net/c1bgfffq/6/

Nhược điểm của giải pháp này là nó chỉ được áp dụng trong một số trường hợp hạn chế khi đã biết chiều cao của cả hai khối.

Căn chỉnh bằng chiều cao dòng

Nếu bạn biết rằng khối bên trong không được chiếm nhiều hơn một dòng văn bản thì bạn có thể sử dụng thuộc tính line-height và đặt nó bằng chiều cao của khối bên ngoài. Vì nội dung của khối bên trong không được bao bọc ở dòng thứ hai nên bạn cũng nên thêm các quy tắc khoảng trắng: nowrap và tràn: ẩn.

Bên ngoài ( chiều cao: 200px; chiều cao dòng: 200px; ) . bên trong ( khoảng trắng: nowrap; tràn: ẩn; )
http://jsfiddle.net/c1bgfffq/12/

Kỹ thuật này cũng có thể được sử dụng để căn chỉnh văn bản nhiều dòng nếu bạn xác định lại giá trị chiều cao dòng cho khối bên trong, đồng thời thêm các quy tắc display: inline-block và Vertical-align: middle.

Bên ngoài ( chiều cao: 200px; chiều cao dòng: 200px; ) .inner ( chiều cao dòng: bình thường; hiển thị: khối nội tuyến; căn chỉnh dọc: giữa; )
http://jsfiddle.net/c1bgfffq/15/

Nhược điểm của phương pháp này là phải biết chiều cao của khối bên ngoài.

Căn chỉnh bằng cách sử dụng "kéo dài"

Phương pháp này có thể được sử dụng khi chưa biết chiều cao của khối bên ngoài nhưng đã biết chiều cao của khối bên trong.

Để làm điều này bạn cần:

  1. đặt vị trí tương đối cho khối bên ngoài và định vị tuyệt đối cho khối bên trong;
  2. thêm các quy tắc top: 0 và Bottom: 0 vào khối bên trong, do đó nó sẽ kéo dài đến toàn bộ chiều cao của khối bên ngoài;
  3. đặt phần đệm dọc của khối bên trong thành tự động.
.outer ( vị trí: tương đối; ) .inner ( chiều cao: 100px; vị trí: tuyệt đối; trên cùng: 0; dưới cùng: 0; lề: tự động 0; )
http://jsfiddle.net/c1bgfffq/4/

Ý tưởng đằng sau kỹ thuật này là việc đặt chiều cao cho khối được kéo dài và được định vị tuyệt đối sẽ khiến trình duyệt tính toán phần đệm dọc theo tỷ lệ bằng nhau nếu nó được đặt thành auto .

Căn chỉnh với lề trên âm

Phương pháp này đã được biết đến rộng rãi và được sử dụng rất thường xuyên. Giống như cái trước, nó được sử dụng khi không biết chiều cao của khối bên ngoài nhưng đã biết chiều cao của khối bên trong.

Bạn cần đặt khối bên ngoài thành vị trí tương đối và khối bên trong thành định vị tuyệt đối. Sau đó, bạn cần di chuyển khối bên trong xuống một nửa chiều cao của khối bên ngoài trên cùng: 50% và nâng nó lên một nửa chiều cao của chính nó lề-top: -H bên trong / 2.

Bên ngoài ( vị trí: tương đối; ) .inner ( chiều cao: 100px; vị trí: tuyệt đối; trên cùng: 50%; lề trên: -50px; )
http://jsfiddle.net/c1bgfffq/13/

Nhược điểm của phương pháp này là phải biết chiều cao của dàn lạnh.

Căn chỉnh với biến đổi

Phương pháp này tương tự như phương pháp trước nhưng có thể được sử dụng khi không xác định được độ cao của dàn lạnh. Trong trường hợp này, thay vì đặt khoảng đệm pixel âm, bạn có thể sử dụng thuộc tính biến đổi và di chuyển khối bên trong lên bằng cách sử dụng hàm dịchY và giá trị -50%.

Bên ngoài ( vị trí: tương đối; ) . bên trong ( vị trí: tuyệt đối; trên cùng: 50%; biến đổi: dịchY(-50%); )
http://jsfiddle.net/c1bgfffq/9/

Tại sao không thể đặt giá trị dưới dạng phần trăm trong phương pháp trước? Vì giá trị lề phần trăm được tính tương ứng với phần tử gốc nên giá trị 50% sẽ bằng một nửa chiều cao của hộp bên ngoài và chúng ta sẽ cần nâng hộp bên trong lên một nửa chiều cao của chính nó. Thuộc tính biến đổi là hoàn hảo cho việc này.

Nhược điểm của phương pháp này là không thể sử dụng nếu dàn lạnh có khả năng định vị tuyệt đối.

Căn chỉnh với Flexbox

Cách căn chỉnh dọc hiện đại nhất là sử dụng Flexbox (thường được gọi là Flexbox). Mô-đun này cho phép bạn kiểm soát linh hoạt vị trí của các thành phần trên trang, sắp xếp chúng ở hầu hết mọi nơi. Căn giữa cho Flexbox là một công việc rất đơn giản.

Khối bên ngoài cần được đặt thành display: flex và khối bên trong thành Margin: auto . Và đó là tất cả! Đẹp chứ?

Bên ngoài ( hiển thị: flex; chiều rộng: 200px; chiều cao: 200px; ) . bên trong ( chiều rộng: 100px; lề: tự động; )
http://jsfiddle.net/c1bgfffq/14/

Nhược điểm của phương pháp này là Flexbox chỉ được hỗ trợ bởi các trình duyệt hiện đại.

Tôi nên chọn phương pháp nào?

Bạn cần bắt đầu từ tuyên bố vấn đề:
  • Để căn chỉnh văn bản theo chiều dọc, tốt hơn nên sử dụng thuộc tính thụt lề dọc hoặc thuộc tính line-height.
  • Đối với các phần tử được định vị tuyệt đối với chiều cao đã biết (ví dụ: biểu tượng), phương pháp có thuộc tính lề trên âm là lý tưởng.
  • Đối với các trường hợp phức tạp hơn, khi không xác định được chiều cao của khối, bạn cần sử dụng phần tử giả hoặc thuộc tính biến đổi.
  • Chà, nếu bạn may mắn đến mức không cần hỗ trợ các phiên bản cũ hơn của trình duyệt IE, thì tất nhiên, tốt hơn hết bạn nên sử dụng Flexbox.

Thẻ: Thêm thẻ

Về cơ bản, có một số cách khác nhau để căn giữa một đối tượng theo chiều dọc bằng CSS, nhưng việc chọn đúng cách có thể khó khăn. Chúng tôi sẽ xem xét một số trong số chúng và cũng tạo một trang web nhỏ bằng cách sử dụng kiến ​​​​thức thu được.

Căn chỉnh trung tâm theo chiều dọc không dễ đạt được bằng CSS. Có nhiều cách và không phải tất cả đều hoạt động trong tất cả các trình duyệt. Hãy cùng xem xét 5 phương pháp khác nhau cũng như ưu và nhược điểm của từng phương pháp. Ví dụ.

phương pháp thứ nhất

Phương pháp này giả định rằng chúng tôi đặt một số phần tử

display dưới dạng bảng, sau đó chúng ta có thể sử dụng thuộc tính căn chỉnh dọc trong đó (hoạt động khác nhau ở các phần tử khác nhau).

Một số thông tin hữu ích cần được tập trung.
#wrapper( display: table; ) #cell( display: table-cell; Vertical-align: middle; )

thuận

  • Nội dung có thể thay đổi chiều cao một cách linh hoạt (chiều cao không được xác định trong CSS).
  • Nội dung không bị cắt nếu không đủ chỗ cho nó.

Nhược điểm

  • Không hoạt động trong IE 7 trở xuống
  • Rất nhiều thẻ lồng nhau

phương pháp thứ 2

Phương pháp này sử dụng vị trí tuyệt đối của div, với phần trên cùng được đặt thành 50% và phần lề trên trừ đi một nửa chiều cao nội dung. Điều này ngụ ý rằng đối tượng phải có chiều cao cố định, được xác định theo kiểu CSS.

Vì chiều cao được cố định nên bạn có thể đặt tràn: tự động; đối với div chứa nội dung, do đó, nếu nội dung không vừa, thanh cuộn sẽ xuất hiện.

Nội dung ở đây
#content ( vị trí: tuyệt đối; trên cùng: 50%; chiều cao: 240px; lề trên: -120px; /* trừ một nửa chiều cao */ )

thuận

  • Hoạt động trong tất cả các trình duyệt.
  • Không có sự lồng ghép không cần thiết.

Nhược điểm

  • Khi không đủ dung lượng, nội dung sẽ biến mất (ví dụ: div nằm bên trong nội dung và người dùng đã thu nhỏ cửa sổ, trong trường hợp đó thanh cuộn sẽ không xuất hiện.

phương pháp thứ 3

Trong phương pháp này, chúng tôi sẽ bọc div nội dung bằng một div khác. Hãy đặt chiều cao của nó thành 50% (chiều cao: 50%;) và lề dưới bằng một nửa chiều cao (lề dưới:-contentheight;). Nội dung sẽ xóa nổi và được căn giữa.

đây là nội dung
#floater( float: left; chiều cao: 50%; lề dưới: -120px; ) #content( xóa: cả hai; chiều cao: 240px; vị trí: tương đối; )

thuận

  • Hoạt động trong tất cả các trình duyệt.
  • Khi không đủ dung lượng (ví dụ khi thu nhỏ cửa sổ) nội dung không bị cắt, thanh cuộn sẽ xuất hiện.

Nhược điểm

  • Tôi chỉ có thể nghĩ đến một điều: một phần tử trống bổ sung đang được sử dụng.

phương pháp thứ 4.

Phương pháp này sử dụng thuộc tính vị trí: tuyệt đối;. đối với div có kích thước cố định (chiều rộng và chiều cao). Sau đó, chúng tôi đặt tọa độ của nó top:0; đáy: 0; , nhưng vì nó có chiều cao cố định nên nó không thể kéo dài và căn chỉnh vào giữa. Điều này rất giống với phương pháp nổi tiếng là căn giữa theo chiều ngang một phần tử khối có chiều rộng cố định (lề: 0 tự động;).

Thông tin quan trọng.
#content(vị trí: tuyệt đối; trên cùng: 0; dưới cùng: 0; trái: 0; phải: 0; lề: tự động; chiều cao: 240px; chiều rộng: 70%; )

thuận

  • Rất đơn giản.

Nhược điểm

  • Không hoạt động trong Internet Explorer
  • Nội dung sẽ bị cắt mà không có thanh cuộn nếu không có đủ dung lượng trong vùng chứa.

phương pháp thứ 5

Sử dụng phương pháp này, bạn có thể căn giữa một dòng văn bản. Chúng ta chỉ cần đặt chiều cao văn bản (line-height) bằng chiều cao phần tử (height). Sau đó, dòng sẽ được hiển thị ở trung tâm.

Một dòng văn bản nào đó
#content( chiều cao: 100px; chiều cao dòng: 100px; )

thuận

  • Hoạt động trong tất cả các trình duyệt.
  • Không cắt văn bản nếu nó không phù hợp.

Nhược điểm

  • Chỉ hoạt động với văn bản (không hoạt động với các phần tử khối).
  • Nếu có nhiều hơn một dòng văn bản thì trông rất tệ.

Phương pháp này rất hữu ích cho các phần tử nhỏ, chẳng hạn như căn giữa văn bản trong một nút hoặc trường văn bản.

Bây giờ bạn đã biết cách căn chỉnh trung tâm theo chiều dọc, hãy tạo một trang web đơn giản có kết quả như thế này:

Bước 1

Bắt đầu bằng đánh dấu ngữ nghĩa luôn là điều tốt. Trang của chúng ta sẽ có cấu trúc như sau:

  • #floater (để căn giữa nội dung)
  • #centered (yếu tố trung tâm)
    • #bên
      • #Logo
      • #nav (danh sách
      • #nội dung
    • #bottom (đối với bản quyền và tất cả những thứ đó)

    Hãy viết đánh dấu html sau:

    Một công ty tập trung

    Tiêu đề trang

    Tái thiết kế toàn diện hoạt động gia công phần mềm có giá trị gia tăng sau khi cộng tác và chia sẻ ý tưởng lấy quy trình làm trung tâm. Đơn giản hóa mạnh mẽ các thị trường ngách có tác động mạnh mẽ thông qua các mệnh lệnh được kích hoạt. Sự đổi mới cao cấp chiếm ưu thế toàn diện sau các kịch bản hấp dẫn. Tiếp cận lại một cách liền mạch các tiêu chuẩn cao về nguồn nhân lực bằng các sản phẩm được sản xuất hàng đầu. Cung cấp các lược đồ tuân thủ tiêu chuẩn một cách rõ ràng trước các cơn lốc mạnh mẽ. Tóm tắt lại một cách độc đáo tính sẵn sàng của web được tận dụng thông tin có sẵn.

    Tiêu đề 2

    Tận dụng hiệu quả tính sẵn sàng của web tùy chỉnh thay vì các quy trình do khách hàng hướng dẫn. Quyết đoán phát triển các mệnh lệnh đa nền tảng dựa trên các công nghệ chủ động. Trao quyền thuận tiện cho các siêu dịch vụ đa ngành mà không cần giao diện toàn doanh nghiệp. Hợp lý hóa một cách thuận tiện các lĩnh vực chủ đề chiến lược cạnh tranh với các thị trường điện tử tập trung. Cung cấp chất phát quang huỳnh quang cho các cộng đồng đẳng cấp thế giới đối với các thị trường giá trị gia tăng. Tái tạo lại các dịch vụ tổng thể một cách thích hợp trước khi có các dịch vụ điện tử mạnh mẽ.

    Thông báo bản quyền ở đây

    Bước 2

    Bây giờ chúng ta sẽ viết CSS đơn giản nhất để đặt các phần tử trên trang. Bạn nên lưu mã này vào tệp style.css. Chính vì điều này mà liên kết được viết trong tệp html.

    Html, nội dung ( lề: 0; phần đệm: 0; chiều cao: 100%; ) nội dung ( nền: url("page_bg.jpg") 50% 50% không lặp lại #FC3; họ phông chữ: Georgia, Times, serifs; ) #floater ( vị trí: tương đối; float: trái; chiều cao: 50%; lề dưới: -200px; chiều rộng: 1px; ) #centered ( vị trí: tương đối; xóa: trái; chiều cao: 400px; chiều rộng: 80%; tối đa -width: 800px; min-width: 400px; lề: 0 tự động; nền: #fff; đường viền: 4px Solid #666; ) #bottom ( vị trí: tuyệt đối; đáy: 0; phải: 0; ) #nav ( vị trí: tuyệt đối; trái: 0; trên cùng: 0; dưới cùng: 0; phải: 70%; đệm: 20px; lề: 10px; ) #content ( vị trí: tuyệt đối; trái: 30%; phải: 0; trên cùng: 0; dưới cùng: 0; tràn: tự động; chiều cao: 340px; phần đệm: 20px; lề: 10px; )

    Trước khi căn chỉnh trung tâm nội dung, chúng ta cần đặt chiều cao của nội dung và html thành 100%. Vì chiều cao được tính mà không có phần đệm bên trong và bên ngoài (phần đệm và lề), nên chúng tôi đặt chúng (phần đệm) thành 0 để không có thanh cuộn.

    Lề dưới cho phần tử "floater" bằng trừ một nửa chiều cao nội dung (400px), cụ thể là -200px ;

    Trang của bạn bây giờ trông giống như thế này:

    #chiều rộng phần tử ở giữa là 80%. Điều này làm cho trang web của chúng tôi thu hẹp hơn trên màn hình nhỏ và rộng hơn trên màn hình lớn hơn. hầu hết các trang web trông không đứng đắn trên màn hình rộng mới ở góc trên bên trái. Các thuộc tính chiều rộng tối thiểu và chiều rộng tối đa cũng giới hạn trang của chúng tôi để nó trông không quá rộng hoặc quá hẹp. Internet Explorer không hỗ trợ các thuộc tính này. Bạn cần đặt nó ở một chiều rộng cố định.

    Vì phần tử #centered có tập hợp vị trí:tương đối nên chúng ta có thể sử dụng vị trí tuyệt đối của các phần tử bên trong nó. Sau đó đặt tràn:tự động; cho phần tử #content để thanh cuộn xuất hiện nếu nội dung không vừa.

    Bước 3

    Điều cuối cùng chúng ta sẽ làm là thêm một số kiểu dáng để làm cho trang trông hấp dẫn hơn một chút. Hãy bắt đầu với thực đơn.

    #nav ul ( list-style: none; đệm: 0; lề: 20px 0 0 0; thụt lề văn bản: 0; ) #nav li ( đệm: 0; lề: 3px; ) #nav li a ( display: block; màu nền: #e8e8e8; phần đệm: 7px; lề: 0; trang trí văn bản: không; màu: #000; viền dưới: 1px liền khối #bbb; căn chỉnh văn bản: phải; ) #nav li a::after ( nội dung: """; màu: #aaa; font-weight: đậm; hiển thị: nội tuyến; float: phải; lề: 0 2px 0 5px; ) #nav li a:hover, #nav li a:focus ( nền: # f8f8f8; border-bottom-color: #777; ) #nav li a:hover::after ( lề: 0 0 0 7px; color: #f93; ) #nav li a:active ( đệm: 8px 7px 6px 7px; )

    Điều đầu tiên chúng tôi làm để làm cho menu trông đẹp hơn là loại bỏ các dấu đầu dòng bằng cách đặt thuộc tính list-style:none, đồng thời đặt phần đệm và phần đệm, vì chúng khác nhau rất nhiều theo mặc định trong các trình duyệt khác nhau.

    Lưu ý rằng sau đó chúng tôi đã chỉ định rằng các liên kết phải được hiển thị dưới dạng phần tử khối. Bây giờ, khi được hiển thị, chúng được trải dài trên toàn bộ chiều rộng của phần tử chứa chúng.

    Một điều thú vị khác mà chúng tôi sử dụng cho menu là các lớp giả:trước và:sau. Chúng cho phép bạn thêm nội dung nào đó vào trước và sau một phần tử. Đây là một cách hay để thêm biểu tượng hoặc ký hiệu, chẳng hạn như mũi tên ở cuối mỗi liên kết. Thủ thuật này không hoạt động trong Internet Explorer 7 trở xuống.

    Bước 4

    Và cuối cùng nhưng không kém phần quan trọng, chúng tôi sẽ thêm một số ốc vít vào thiết kế của mình để trông đẹp hơn nữa.

    #centered ( -webkit-border-radius: 8px; -moz-border-radius: 8px; border-radius: 8px; ) h1, h2, h3, h4, h5, h6 ( họ phông chữ: Helvetica, Arial, sans- serif; font-weight: normal; color: #666; ) h1 ( color: #f93; border-bottom: 1px solid #ddd; letter-spacing: -0,05em; font-weight: đậm; lề-top: 0; đệm-top: 0; ) #bottom ( đệm: 10px; cỡ chữ: 0,7em; màu: #f03; ) #logo ( cỡ chữ: 2em; căn chỉnh văn bản: giữa; màu: #999; ) #logo mạnh ( font-weight: normal; ) #logo span ( display: block; font-size: 4em; line-height: 0.7em; color: #666; ) p, h2, h3 ( line-height: 1.6em; ) a ( màu: #f03; )

    Trong các kiểu này, chúng tôi đặt các góc tròn cho phần tử #centered. Trong CSS3, điều này sẽ được thực hiện bởi thuộc tính bán kính đường viền. Điều này chưa được triển khai trong một số trình duyệt, ngoài việc sử dụng tiền tố -moz và -webkit cho Mozilla Firefox và Safari/Webkit.

    Khả năng tương thích

    Như bạn có thể đã đoán, nguồn gốc chính của vấn đề tương thích là Internet Explorer:

    • Phần tử #floater phải được đặt chiều rộng
    • IE 6 có thêm phần đệm xung quanh các menu

    235882 lượt xem

    Khi bố cục một trang, thường phải thực hiện căn chỉnh giữa bằng phương pháp CSS: ví dụ: căn giữa khối chính. Có một số tùy chọn để giải quyết vấn đề này, mỗi tùy chọn sớm hay muộn đều phải được sử dụng bởi bất kỳ nhà thiết kế bố cục nào.

    Căn chỉnh văn bản ở giữa

    Thông thường, với mục đích trang trí, cần phải đặt văn bản ở vị trí căn giữa; CSS trong trường hợp này cho phép bạn giảm thời gian bố cục. Trước đây, việc này được thực hiện bằng cách sử dụng các thuộc tính HTML, nhưng giờ đây tiêu chuẩn yêu cầu văn bản phải được căn chỉnh bằng các biểu định kiểu. Không giống như các khối mà bạn cần thay đổi lề, trong CSS, việc căn giữa văn bản được thực hiện bằng một dòng duy nhất:

    • căn chỉnh văn bản:giữa;

    Tài sản này được thừa kế và truyền lại từ cha mẹ cho tất cả con cháu. Không chỉ ảnh hưởng đến văn bản mà còn ảnh hưởng đến các yếu tố khác. Để làm điều này, chúng phải ở dạng nội tuyến (ví dụ: span) hoặc khối nội tuyến (bất kỳ khối nào có thuộc tính display: block được đặt). Tùy chọn thứ hai cũng cho phép bạn thay đổi chiều rộng và chiều cao của phần tử và điều chỉnh mức thụt lề linh hoạt hơn.

    Thông thường trên các trang, căn chỉnh được gán cho chính thẻ đó. Điều này ngay lập tức làm mất hiệu lực mã vì W3C đã không dùng thuộc tính căn chỉnh nữa. Sử dụng nó trên một trang không được khuyến khích.

    Căn chỉnh một khối vào trung tâm

    Nếu bạn cần căn giữa một div, CSS cung cấp một cách khá thuận tiện: sử dụng lề. Thụt lề có thể được đặt cho cả phần tử khối và phần tử khối nội tuyến. Giá trị thuộc tính phải là 0 (đệm dọc) và auto (đệm ngang tự động):

    • lề:0 tự động;

    Bây giờ tùy chọn này được công nhận là hoàn toàn hợp lệ. Việc sử dụng phần đệm bên ngoài cũng cho phép bạn đặt hình ảnh ở giữa: nó cho phép bạn giải quyết nhiều vấn đề liên quan đến vị trí của một thành phần trên trang.

    Căn chỉnh khối sang trái hoặc phải

    Đôi khi không cần căn chỉnh trung tâm CSS, nhưng bạn cần đặt hai khối cạnh nhau: một khối ở cạnh trái, khối kia ở bên phải. Với mục đích này, có một thuộc tính float, có thể nhận một trong ba giá trị: trái, phải hoặc không. Giả sử bạn có hai khối cần được đặt cạnh nhau. Sau đó, mã sẽ như thế này:

    • .left (float:left;)
    • .right(float:right)

    Nếu cũng có khối thứ ba, khối này phải nằm dưới hai khối đầu tiên (ví dụ: chân trang), thì nó cần được cung cấp thuộc tính clear:

    • .left (float:left;)
    • .right(float:right)
    • chân trang (rõ ràng: cả hai)

    Thực tế là các khối có các lớp trái và phải nằm ngoài luồng chung, nghĩa là tất cả các phần tử khác đều bỏ qua sự tồn tại của các phần tử được căn chỉnh. Thuộc tính clear:both cho phép chân trang hoặc bất kỳ khối nào khác nhìn thấy các phần tử đã rơi ra khỏi luồng và cấm thả nổi ở cả bên trái và bên phải. Do đó, trong ví dụ của chúng tôi, phần chân trang sẽ di chuyển xuống.

    Căn dọc

    Đôi khi việc căn chỉnh tâm bằng các phương pháp CSS là không đủ, bạn cũng cần thay đổi vị trí dọc của khối con. Bất kỳ phần tử khối nội tuyến hoặc khối nội tuyến nào cũng có thể được lồng ở cạnh trên hoặc dưới, ở giữa phần tử cha hoặc ở bất kỳ vị trí nào. Thông thường, khối cần được căn chỉnh về giữa; đối với điều này, thuộc tính căn chỉnh dọc được sử dụng. Giả sử có hai khối, một khối lồng vào nhau. Trong trường hợp này, khối bên trong là phần tử khối nội tuyến (hiển thị: khối nội tuyến). Bạn cần căn chỉnh khối con theo chiều dọc:

    • căn chỉnh trên cùng - .child(vertical-align:top);
    • căn giữa - .child(vertical-align:middle);
    • căn lề dưới - .child(vertical-align:bottom);

    Cả căn chỉnh văn bản và căn chỉnh dọc đều không ảnh hưởng đến các phần tử khối.

    Các vấn đề có thể xảy ra với các khối được căn chỉnh

    Đôi khi việc căn giữa một div bằng CSS có thể gây ra một chút rắc rối. Ví dụ: khi sử dụng float: giả sử có ba khối: .first, .second và .third. Khối thứ hai và thứ ba nằm ở khối thứ nhất. Phần tử có lớp thứ hai được căn trái và khối cuối cùng được căn phải. Sau khi chững lại, cả hai đều rơi ra khỏi dòng chảy. Nếu phần tử cha không được đặt chiều cao (ví dụ: 30em), thì nó sẽ không còn kéo dài theo chiều cao của các khối con của nó nữa. Để tránh lỗi này, hãy sử dụng “spacer” - một khối đặc biệt nhìn thấy .second và .third. Mã CSS:

    • .second(float:left)
    • .third(float:right)
    • .clearfix(height:0; clear: cả hai;)

    Lớp giả:after thường được sử dụng, điều này cũng cho phép bạn trả các khối về vị trí của chúng bằng cách tạo một miếng đệm giả (trong ví dụ, một div có lớp chứa nằm bên trong.first và contains.left và.right) :

    • .left(float:left)
    • .right(float:right)
    • .container:after(content:""; display:table; clear:both;)

    Các tùy chọn trên là phổ biến nhất, mặc dù có một số biến thể. Bạn luôn có thể tìm ra cách đơn giản và thuận tiện nhất để tạo một miếng đệm giả thông qua thử nghiệm.

    Một vấn đề khác mà các nhà thiết kế bố cục thường gặp phải là việc căn chỉnh các phần tử khối nội tuyến. Một khoảng trống sẽ tự động được thêm vào sau mỗi khoảng trống. Thuộc tính lề, được đặt thành thụt lề âm, sẽ giúp giải quyết vấn đề này. Có các phương pháp khác được sử dụng ít thường xuyên hơn: ví dụ: về 0. Trong trường hợp này, cỡ chữ: 0 được ghi trong thuộc tính của phần tử cha. Nếu có văn bản bên trong các khối thì kích thước phông chữ được yêu cầu đã được trả về trong thuộc tính của các phần tử khối nội tuyến. Ví dụ: cỡ chữ: 1em. Phương pháp này không phải lúc nào cũng thuận tiện, vì vậy tùy chọn thụt lề bên ngoài thường được sử dụng nhiều hơn.

    Các khối căn chỉnh cho phép bạn tạo các trang đẹp và tiện dụng: điều này bao gồm bố cục của bố cục tổng thể, sắp xếp sản phẩm trong các cửa hàng trực tuyến và ảnh trên trang web danh thiếp.