Căn giữa một 'div' ở giữa màn hình, ngay cả khi trang được cuộn lên hoặc xuống?


126

Trong trang của tôi có một nút mà khi nhấp vào sẽ hiển thị div(kiểu cửa sổ bật lên) ở giữa màn hình của tôi.

Tôi đang sử dụng CSS sau đây để đặt divchính giữa màn hình:

.PopupPanel
{
    border: solid 1px black;
    position: absolute;
    left: 50%;
    top: 50%;
    background-color: white;
    z-index: 100;

    height: 400px;
    margin-top: -200px;

    width: 600px;
    margin-left: -300px;
}

CSS này hoạt động tốt miễn là trang không được cuộn xuống.

Nhưng, nếu tôi đặt nút ở cuối trang, khi nhấp vào, nút divđược hiển thị ở trên cùng và người dùng phải cuộn lên để xem nội dung của div.

Tôi muốn biết làm thế nào để hiển thị divở giữa màn hình, ngay cả khi trang đã được cuộn.


câu hỏi Tại sao bạn lại trừ lề trên: (200) và lề trái. Tôi cảm thấy đây là phương tiện của chiều cao và chiều rộng, nhưng tại sao chúng ta phải làm điều đó để có được trung tâm tuyệt đối? Không nên để 50% còn lại và 50% hàng đầu làm thủ thuật?
jmoon90

@ jmoon90 Các left: 50%; top: 50%di chuyển các góc trên bên trái của .PopupPaneltrung tâm của màn hình. Sau đó, chúng tôi di chuyển nó một nửa chiều rộng và chiều cao trở lại trung tâm. Xem Định tâm trên css-tricks.com
kub1x

Câu trả lời:


189

Thay đổi positionthuộc tính thành fixedthay vì absolute.


2
Còn nếu bạn cần cuộn div pop và nó lớn hơn màn hình thì sao?
Darcbar

Hãy nhớ rằng đây không phải là giải pháp đáp ứng tốt nhất (nhưng là một giải pháp hoàn hảo cho vấn đề trên). Kiểm tra getbootstrap.com/javascript/#modals và tìm kiếm với DevTools của bạn để có một số ý tưởng hay về cách làm việc với cửa sổ bật lên / phương thức của bạn.
Cas Bloem


17

Trích dẫn : Tôi muốn biết cách hiển thị div ở giữa màn hình, cho dù người dùng đã cuộn lên / xuống.

Thay đổi

position: absolute;

Đến

position: fixed;

Thông số kỹ thuật của W3C cho position: absolutevà cho position: fixed.


6

Tôi vừa tìm thấy một mẹo mới để căn giữa một hộp ở giữa màn hình ngay cả khi bạn không có kích thước cố định. Giả sử bạn muốn một hộp 60% chiều rộng / 60% chiều cao. Cách để làm cho nó tập trung là bằng cách tạo 2 hộp: hộp "container" ở vị trí bên trái: 50% trên cùng: 50% và hộp "văn bản" bên trong với vị trí đảo ngược bên trái: -50%; hàng đầu: -50%;

Nó hoạt động và nó tương thích trình duyệt chéo.

Kiểm tra mã dưới đây, bạn có thể nhận được một lời giải thích tốt hơn:

jQuery('.close a, .bg', '#message').on('click', function() {
  jQuery('#message').fadeOut();
  return false;
});
html, body {
  min-height: 100%;
}

#message {
  height: 100%;
  left: 0;
  position: fixed;
  top: 0;
  width: 100%;
}

#message .container {
  height: 60%;
  left: 50%;
  position: absolute;
  top: 50%;
  z-index: 10;
  width: 60%;
}

#message .container .text {
  background: #fff;
  height: 100%;
  left: -50%;
  position: absolute;
  top: -50%;
  width: 100%;
}

#message .bg {
  background: rgba(0, 0, 0, 0.5);
  height: 100%;
  left: 0;
  position: absolute;
  top: 0;
  width: 100%;
  z-index: 9;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="message">
  <div class="container">
    <div class="text">
      <h2>Warning</h2>
      <p>The message</p>
      <p class="close"><a href="#">Close Window</a></p>
    </div>
  </div>
  <div class="bg"></div>
</div>


4

Phương pháp đúng là

.PopupPanel
{
    border: solid 1px black;
    position: fixed;
    left: 50%;
    top: 50%;
    background-color: white;
    z-index: 100;
    height: 400px;
    margin-top: -200px;

    width: 600px;
    margin-left: -300px;
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.