2011-03-24 77 views

Trả lời

66

Có rất nhiều phương pháp:

  1. Center class ngang và dọc của một phần tử với biện pháp cố định

CSS

<div style="width:200px;height:100px;position:absolute;left:50%;top:50%; 
margin-left:-100px;margin-top:-50px;"> 
<!–content–> 
</div> 

2. Trung tâm ngang và dọc một dòng văn bản

CSS

<div style="width:400px;height:200px;text-align:center;line-height:200px;"> 
<!–content–> 
</div> 

3. Căn giữa theo chiều ngang và dọc của một phần tử không có biện pháp cụ thể

CSS

<div style="display:table;height:300px;text-align:center;"> 
<div style="display:table-cell;vertical-align:middle;"> 
<!–content–> 
</div> 
</div> 

More đây:Horizontal and Vertical Alignment in CSS

+0

am Tôi sai rồi ? Tôi chọn giải pháp 2 và nó dường như không hoạt động với firefox :) – nXqd

4

This blog post mô tả hai phương pháp tập trung một div cả chiều ngang và theo chiều dọc. Một người chỉ sử dụng CSS và sẽ làm việc với các div có kích thước cố định; khác sử dụng jQuery và sẽ làm việc divs mà bạn không biết kích thước trước.

Tôi đã nhân đôi CSS và các ví dụ jQuery từ bản demo bài đăng blog ở đây:

CSS

Giả sử bạn có một div với một lớp .classname, css dưới đây nên làm việc.

left:50%; top:50%; đặt góc trên cùng bên trái của div vào giữa màn hình; các margin:-75px 0 0 -135px; di chuyển nó sang trái và lên một nửa chiều rộng và chiều cao của div kích thước cố định tương ứng.

.className{ 
    width:270px; 
    height:150px; 
    position:absolute; 
    left:50%; 
    top:50%; 
    margin:-75px 0 0 -135px; 
} 

jQuery

$(document).ready(function(){ 
    $(window).resize(function(){ 
     $('.className').css({ 
      position:'absolute', 
      left: ($(window).width() - $('.className').outerWidth())/2, 
      top: ($(window).height() - $('.className').outerHeight())/2 
     }); 
    }); 
    // To initially run the function: 
    $(window).resize(); 
}); 

Dưới đây là một demo of the techniques in practice.

+1

Nếu OP không cần sử dụng jquery thì sao? –

+0

Có một ví dụ với CSS, ngay trên ví dụ jQuery. Ví dụ jQuery cũng có thể được sửa đổi để sử dụng javascript thẳng nếu OP không muốn sử dụng jQuery, và cần phải trung tâm divs mà kích thước không được biết trước. – Greg

1

Điều này không dễ làm như bạn có thể mong đợi - bạn thực sự chỉ có thể thực hiện căn chỉnh theo chiều dọc nếu bạn biết chiều cao của vùng chứa. Nếu đây là trường hợp, bạn có thể làm điều đó với vị trí tuyệt đối.

Khái niệm này là đặt các vị trí trên cùng/bên trái ở mức 50% và sau đó sử dụng lề âm (được đặt thành một nửa chiều cao/chiều rộng) để kéo vùng chứa trở lại làm trung tâm.

Ví dụ: http://jsbin.com/ipawe/edit

CSS cơ bản:

#mydiv { 
    position: absolute; 
    top: 50%; 
    left: 50%; 
    height: 400px; 
    width: 700px; 
    margin-top: -200px; /* -(1/2 height) */ 
    margin-left: -350px; /* -(1/2 width) */ 
    } 
+0

Tất nhiên, nếu bạn không biết chiều cao của vùng chứa, bạn luôn có thể sử dụng JavaScript để có được chiều cao tính toán, sau đó đặt lề của bạn bằng cách sử dụng JS. – RussellUresti

1

Có một giải pháp tốt hơn bây giờ: Vertical align anything with just 3 lines of CSS

+0

Kỹ thuật này theo chiều dọc định tâm văn bản bên trong một phần tử nhưng nếu bạn muốn phần tử chính được canh giữa theo chiều dọc và chiều ngang có liên quan đến khung nhìn. – JohnnyBizzle

+0

Xem: https://stackoverflow.com/a/47260122/7186739 – Super

Các vấn đề liên quan