Căn chỉnh khối vào giữa trang. Căn chỉnh theo chiều dọc trong div. Phần thưởng: nhận xét có điều kiện

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ẻ

Trong quá trình bố trí các trang web, việc căn giữa các khối là khá phổ biến. Điều này có thể là định tâm theo chiều dọc hoặc chiều ngang.

Ví dụ: nếu trang web có chiều rộng cố định thì việc căn chỉnh nó ở giữa cửa sổ trình duyệt là hợp lý, bởi vì điều này làm cho văn bản dễ đọc hơn (đặc biệt nếu màn hình lớn). Một số thiết kế thường liên quan đến việc đặt khối ở giữa cửa sổ trình duyệt, tức là định tâm cả theo chiều dọc và chiều ngang.

Đầu tiên, hãy nói về định tâm theo chiều ngang. Kỹ thuật phổ biến nhất là khi khối được căn giữa bằng cách đặt kích thước bên phải và bên trái lề thành "tự động". Giả sử chúng ta muốn căn giữa một khối có id = "container" và chiều rộng là 860px. Trong trường hợp này, trong tệp CSS bạn cần viết:

#thùng đựng hàng (
màu nền:#EEE;
chiều rộng: 860px;
lề: 0px tự động;
}

Tuy nhiên, I.E. các phiên bản cũ hơn (ví dụ 5.0) sẽ không căn chỉnh khối này ở giữa. Tất nhiên, không còn ai sử dụng các trình duyệt cổ xưa như vậy nữa (trong số 1800 khách truy cập hàng ngày của tôi - chỉ 1), nhưng để đề phòng, tốt hơn hết là bạn nên làm cho nó hoạt động ở đó :)

Để làm điều này, phần tử cha, tức là phần tử mà chúng ta căn giữa khối của mình (thường phần tử cha là thẻ BODY), cần đặt tham số căn chỉnh văn bản:giữa. Trong trường hợp này, khối sẽ được căn chỉnh về giữa, nhưng tất cả nội dung của nó cũng sẽ được căn chỉnh về giữa, nhưng chúng ta không cần điều đó. Do đó, bên trong khối này, chúng tôi đặt căn chỉnh mặc định - căn chỉnh văn bản: trái .

nội dung (text-align:center)

#thùng đựng hàng (
màu nền:#EEE;
chiều rộng: 860px;
lề: 0px tự động;
căn chỉnh văn bản:trái;
}

Ngoài ra còn có một cách khác để căn chỉnh khối theo chiều ngang, dựa trên . Như bạn có thể đã biết, theo mặc định, bất kỳ phần tử khối nào cũng được nhấn vào cạnh trái của phần tử cha. Do đó, để căn chỉnh nó vào trung tâm, bạn cần:

2. Di chuyển nó sang bên phải 50% chiều rộng cửa sổ trình duyệt

3. Sử dụng phần đệm âm, di chuyển nó sang trái một khoảng bằng một nửa chiều rộng của khối.

Bằng cách này, khối sẽ được căn giữa. Để rõ ràng hơn, hãy xem video dưới đây:

Mã CSS ví dụ:

#thùng đựng hàng (
màu nền:#559964;
vị trí: tuyệt đối;
trái: 50%;
lề trái:-430px;

chiều rộng: 860px;
}

Cần lưu ý rằng nếu bạn muốn định vị một khối không liên quan đến cửa sổ trình duyệt, nhưng, chẳng hạn, liên quan đến một khối khác, thì đối với khối khác này, bạn cần đặt vị trí: tương đối;

Giả sử khối #container của chúng ta cần được căn giữa, nằm bên trong khối #wrap. Sau đó, mã sẽ trông như thế này:

#wrap(vị trí:tương đối)

#thùng đựng hàng (
màu nền:#559964;
vị trí: tuyệt đối;
trái: 50%;
lề trái:-430px;

chiều rộng: 860px;
}

Bây giờ chúng ta hãy xem trường hợp khi bạn cần căn chỉnh một khối vào giữa trang, tức là. Áp dụng đồng thời định tâm ngang và dọc. Định vị lại phát huy tác dụng ở đây. Vì vậy chúng ta cần:

1. Đặt khối về vị trí tuyệt đối

2. Di chuyển nó sang phải 50% và giảm 50%, từ đó đặt góc trên bên trái của nó ở giữa cửa sổ trình duyệt.

3. Sử dụng phần đệm âm, di chuyển nó lên một khoảng bằng một nửa chiều cao của khối và sang trái một khoảng bằng một nửa chiều rộng của khối.

Điều này sẽ đặt khối ở giữa trang web.

Giả sử chiều cao của khối của chúng tôi là 600px và chiều rộng là 860px. Sau đó, mã CSS sẽ trông như thế này:

#thùng đựng hàng (
màu nền:#559964;
vị trí: tuyệt đối;
trên cùng: 50%;

trái: 50%;
lề trên: -300px;
lề trái:-430px;

chiều cao:600px;
chiều rộng: 860px;
}

Tôi hy vọng nguyên tắc này đã rõ ràng với bạn.

Đánh giá bài học này: 1 2 3 4 5

Bình luận:

Tôi sẽ là người đầu tiên xem bài học!!!

Ế... Thứ hai =) Gần đây tôi gặp phải vấn đề này trong IE, tôi đã chịu đựng lâu rồi)) Cảm ơn bạn =)

Cảm ơn bạn, đã đánh dấu trang)))

Cảm ơn bạn rất nhiều, Andrey, vì những bài học mới!

Chỉ cảm ơn bạn, tôi không nghĩ có gì để thêm ở đây))

Cảm ơn bài học, tôi thực sự đã cố gắng làm điều này vài ngày trước, chịu đựng một chút và tạm gác nó sang một bên

Nhưng tôi có một vấn đề: trang web trong Mozille Firefox không muốn căn chỉnh, nó bị kẹt ở cạnh trái và thế là xong, không có cách nào ở trên giúp được (tương tự trong Opera).

tại sao cái này không hoạt động? - "nếu bạn muốn định vị một khối không liên quan đến cửa sổ trình duyệt, nhưng, ví dụ, liên quan đến một khối khác, đối với khối khác này, bạn cần đặt vị trí: tương đối;"

Cảm ơn bạn rất nhiều!! chỉ là GIANT cảm ơn bạn!

Mọi thứ đều ổn, nhưng vì lý do nào đó, tất cả hình ảnh chỉ rơi vào vị trí sau khi cập nhật trình duyệt. Xin vui lòng cho tôi biết tại sao điều này xảy ra?

Andrey, vui lòng thêm tìm kiếm trang web.

Thêm một bình luận.

Từ tác giả: Tôi chào mừng bạn một lần nữa đến với các trang blog của chúng tôi. Trong bài viết hôm nay tôi muốn nói về các kỹ thuật căn chỉnh khác nhau có thể áp dụng cho cả khối và nội dung của chúng. Đặc biệt là cách căn chỉnh các khối trong css cũng như căn chỉnh văn bản.

Căn chỉnh các khối vào giữa

Trong CSS, việc căn giữa một khối rất dễ dàng. Đây là kỹ thuật được nhiều người biết đến nhất, nhưng trước hết tôi muốn nói về nó ngay bây giờ. Điều này có nghĩa là căn chỉnh căn giữa theo chiều ngang so với phần tử gốc. Nó được thực hiện như thế nào? Giả sử chúng ta có một vùng chứa và đối tượng thử nghiệm của chúng ta ở trong đó:

< div id = "wrapper" >

< div id = "header" > < / div >

< / div >

Giả sử rằng đây là tiêu đề trang web. Nó không trải dài trên toàn bộ chiều rộng của cửa sổ và chúng ta cần căn giữa nó. Chúng tôi viết như thế này:

#tiêu đề(

chiều rộng / chiều rộng tối đa: 800px;

lề: 0 tự động;

Chúng ta cần chỉ định chiều rộng chính xác hoặc tối đa, sau đó ghi lại thuộc tính chính - lề: 0 tự động. Nó đặt lề ngoài của tiêu đề của chúng ta, giá trị đầu tiên xác định lề trên và dưới và giá trị thứ hai xác định lề phải và trái. Giá trị auto yêu cầu trình duyệt tự động tính toán phần đệm ở cả hai bên để phần tử được căn giữa chính xác trên phần tử mẹ của nó. Thoải mái!

Căn chỉnh văn bản

Đây cũng là một kỹ thuật rất đơn giản. Để căn chỉnh tất cả các phần tử nội tuyến, bạn có thể sử dụng thuộc tính text-align và các giá trị của nó: left, right, center. Cái sau căn giữa văn bản, đó là những gì chúng ta cần. Bạn thậm chí có thể căn chỉnh ảnh theo cách tương tự vì theo mặc định, nó cũng là một thành phần nội tuyến.

Căn chỉnh văn bản theo chiều dọc

Nhưng điều này phức tạp hơn. Theo mặc định, không có thuộc tính đơn giản, nổi tiếng nào có thể dễ dàng căn giữa văn bản theo chiều dọc trong vùng chứa khối. Tuy nhiên, có một số kỹ thuật mà các nhà thiết kế bố cục đã nghĩ ra trong nhiều năm qua.

Đặt chiều cao khối bằng cách sử dụng phần đệm. Cách này không phải là đặt chiều cao rõ ràng bằng cách sử dụng chiều cao mà là tạo chiều cao một cách giả tạo bằng cách sử dụng các phần đệm ở trên cùng và dưới cùng, các phần này phải giống nhau. Hãy tạo bất kỳ khối nào và viết các thuộc tính sau vào nó:

div(nền: #ccc; phần đệm: 30px 0; )

div(

nền : #ccc;

phần đệm: 30px 0;

Nền chỉ để hiển thị trực quan các cạnh cũng như phần đệm. Bây giờ chiều cao của khối được tạo thành từ hai vết lõm này và chính dòng đó, và tất cả trông như thế này:

Xác định chiều cao dòng cho khối. Tôi nghĩ đây là cách chính xác hơn nếu bạn cần căn chỉnh một dòng văn bản. Với nó, bạn có thể viết chiều cao theo cách thông thường bằng cách sử dụng thuộc tính chiều cao. Sau đó, anh ta cũng cần đặt chiều cao của dòng, giống như chiều cao của toàn bộ khối.

div( chiều cao: 60px; chiều cao dòng: 60px; )

div(

chiều cao: 60px;

chiều cao dòng: 60px;

Kết quả sẽ tương tự như hình trên. Mọi thứ sẽ hoạt động ngay cả khi bạn thêm phần đệm. Tuy nhiên, chỉ cho một dòng. Nếu bạn cần thêm văn bản trong phần tử thì phương pháp này sẽ không hoạt động.

Chuyển đổi một khối thành một ô bảng. Bản chất của phương pháp này là ô trong bảng có thuộc tính Vertical-align: middle, giúp phần tử căn giữa theo chiều dọc. Theo đó, trong trường hợp này, khối cần được đặt thành như sau:

div(hiển thị: ô bảng; căn chỉnh dọc: giữa; )

div(

hiển thị: bảng - ô;

dọc - căn chỉnh : giữa ;

Phương pháp này tốt vì bạn có thể căn chỉnh bao nhiêu văn bản tùy thích vào giữa. Nhưng tốt hơn hết là viết display: table vào khối mà div của chúng ta được lồng vào, nếu không nó có thể không hoạt động.

Chà, ở đây chúng ta đến với kỹ thuật cuối cùng của ngày hôm nay - đây là việc căn chỉnh các khối theo chiều dọc. Phải nói rằng, một lần nữa, không có thuộc tính nào dành riêng cho việc này, nhưng có một số thủ thuật mà bạn nên biết.

Đặt thụt lề theo tỷ lệ phần trăm. Nếu bạn biết chiều cao của phần tử gốc và đặt một phần tử khối khác vào bên trong nó, bạn có thể căn giữa nó bằng cách sử dụng phần đệm phần trăm. Ví dụ: cha mẹ có chiều cao 600 pixel. Bạn đặt một khối có chiều cao 300 pixel vào đó. Bạn cần lùi lại bao nhiêu ở phần trên và phần dưới để căn giữa nó? Mỗi pixel 150 pixel, bằng 25% chiều cao của bố mẹ.

Phương pháp này chỉ cho phép căn chỉnh khi kích thước cho phép tính toán. Và nếu cha mẹ của bạn có chiều cao 887 pixel, thì bạn sẽ không thể ghi lại chính xác bất cứ điều gì, điều này đã rõ ràng.

Chèn một phần tử vào một ô của bảng. Một lần nữa, nếu chúng ta chuyển đổi phần tử cha thành một ô trong bảng thì khối được chèn vào nó sẽ tự động được căn giữa theo chiều dọc. Để làm được điều này, cha mẹ chỉ cần đặt Vertical-align: middle.

Và nếu ngoài điều này, chúng ta còn viết lề: 0 tự động, thì phần tử sẽ được căn giữa theo chiều ngang!

Vlad Merzhevich

Do nội dung của các ô trong bảng có thể được căn chỉnh đồng thời theo chiều ngang và chiều dọc, nên khả năng kiểm soát vị trí của các phần tử so với nhau được mở rộng. Bảng cho phép bạn đặt căn chỉnh hình ảnh, văn bản, trường biểu mẫu và các thành phần khác có liên quan với nhau và toàn bộ trang web. Nhìn chung, việc căn chỉnh chủ yếu là cần thiết để thiết lập các kết nối trực quan giữa các yếu tố khác nhau cũng như để nhóm chúng lại với nhau.

Định tâm dọc

Một cách để cho khách truy cập thấy trọng tâm và tên của trang web là sử dụng trang giật gân. Đây là trang đầu tiên, theo quy định, có màn hình giật gân flash hoặc hình ảnh thể hiện ý chính của trang web. Hình ảnh cũng là một liên kết đến các phần khác của trang web. Bạn cần đặt hình ảnh này vào giữa cửa sổ trình duyệt, bất kể độ phân giải màn hình. Với mục đích này, bạn có thể sử dụng bảng có chiều rộng và chiều cao 100% (ví dụ 1).

Ví dụ 1: Căn giữa bản vẽ

Căn chỉnh

Trong ví dụ này, căn chỉnh theo chiều ngang được đặt bằng tham số thẻ Align="center" và nội dung của ô có thể không được căn giữa theo chiều dọc vì đây là vị trí mặc định.

Để đặt chiều cao của bảng thành 100%, bạn cần xóa, mã không còn hiệu lực.

Việc sử dụng chiều rộng và chiều cao để bao phủ toàn bộ khu vực có sẵn của trang web đảm bảo rằng nội dung của bảng sẽ được căn chỉnh chính xác ở giữa cửa sổ trình duyệt, bất kể kích thước của nó.

Căn chỉnh theo chiều ngang

Bằng cách kết hợp các thuộc tính căn chỉnh (căn chỉnh ngang) và valign (căn chỉnh dọc) của thẻ , cho phép đặt một số loại vị trí của các phần tử so với nhau. Trong bộ lễ phục. Hình 1 cho thấy các cách căn chỉnh các phần tử theo chiều ngang.

Chúng ta hãy xem một số ví dụ về căn chỉnh văn bản theo hình bên dưới.

Căn chỉnh trên cùng

Để chỉ định căn chỉnh trên cùng của nội dung ô cho một thẻ bạn cần đặt thuộc tính valign với giá trị top (ví dụ 2).

Ví dụ 2: Sử dụng valign

Căn chỉnh

Cột 1 Cột 2

Trong ví dụ này, các đặc điểm của ô được kiểm soát bằng các tham số thẻ , nhưng cũng thuận tiện hơn khi thay đổi qua các kiểu. Đặc biệt, việc căn chỉnh trong ô được xác định bởi thuộc tính Vertical-align và text-align (ví dụ 3).

Ví dụ 3: Áp dụng kiểu để căn chỉnh

Căn chỉnh

Cột 1 Cột 2

Để rút ngắn mã, ví dụ này sử dụng nhóm các bộ chọn vì thuộc tính căn dọc và đệm được áp dụng cho hai ô cùng một lúc.

Căn chỉnh dưới cùng được thực hiện theo cách tương tự, nhưng thay vì giá trị trên cùng, đáy được sử dụng.

Căn giữa

Theo mặc định, nội dung ô được căn chỉnh về giữa đường thẳng đứng của chúng, vì vậy nếu các cột có độ cao khác nhau, bạn cần đặt căn chỉnh về cạnh trên. Đôi khi bạn vẫn cần phải để lại phương pháp căn chỉnh ban đầu, chẳng hạn như khi đặt công thức, như trong Hình. 2.

Trong trường hợp này, công thức nằm ngay chính giữa cửa sổ trình duyệt và số của nó nằm ở cạnh phải. Để sắp xếp các phần tử theo cách này, bạn sẽ cần một bảng có ba ô. Các ô bên ngoài phải có cùng kích thước, ở ô giữa căn chỉnh được căn giữa và ở ô bên phải - dọc theo cạnh phải (ví dụ 4). Số lượng ô này là cần thiết để đảm bảo rằng công thức được đặt ở giữa.

Ví dụ 4: Căn chỉnh công thức

Căn chỉnh

(18.6)

Trong ví dụ này, ô đầu tiên của bảng được để trống; nó chỉ dùng để tạo thụt lề, nhân tiện, cũng có thể được đặt bằng cách sử dụng kiểu.

Căn chỉnh các phần tử biểu mẫu

Sử dụng bảng sẽ thuận tiện cho việc xác định vị trí của các trường biểu mẫu, đặc biệt khi chúng xen kẽ với văn bản. Một trong những tùy chọn thiết kế cho biểu mẫu dùng để nhập nhận xét được hiển thị trong Hình. 3.

Để đảm bảo rằng văn bản bên cạnh các trường biểu mẫu được căn phải và bản thân các thành phần của biểu mẫu được căn trái, bạn sẽ cần một bảng có đường viền vô hình và hai cột. Cột bên trái sẽ chứa chính văn bản đó và cột bên phải sẽ chứa các trường văn bản (ví dụ 5).

Ví dụ 5: Căn chỉnh các trường biểu mẫu

Căn chỉnh

Tên
E-mail
Một lời bình luận

Trong ví dụ này, đối với những ô cần căn phải, thuộc tínhalign="right" sẽ được thêm vào. Để đảm bảo rằng nhãn Nhận xét được đặt ở đầu văn bản nhiều dòng, ô tương ứng được đặt thành căn chỉnh trên cùng bằng thuộc tính valign.

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 nhận xét có điều kiệ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 .