Định vị một div gần phía dưới cùng của một div khác


102

Tôi có div bên ngoài và div bên trong. Tôi cần đặt div bên trong ở dưới cùng của div bên ngoài.

Div bên ngoài có tính đàn hồi (ví dụ chiều rộng: 70%). Tôi cũng cần phải căn giữa khối bên trong.

Mô hình trang điểm đơn giản được mô tả trong hình dưới đây:

nhập mô tả hình ảnh ở đây


là chiều cao cũng đàn hồi? Nếu không, bạn có thể đặt margin-top cho hộp bên trong thành (externalBoxHeight - innerBoxHeight).
peirix

@peirix: vâng, chiều cao của khối bên ngoài có thể thay đổi và chúng tôi không biết điều đó
Roman

Câu trả lời:


79

Đã thử nghiệm và hoạt động trên Firefox 3, Chrome 1 và IE 6, 7 và 8:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
                      "http://www.w3.org/TR/html4/strict.dtd">
<html><body>
<div style='background-color: yellow; width: 70%;
            height: 100px; position: relative;'>
    Outer
    <div style='background-color: green;
                position: absolute; left: 0; width: 100%; bottom: 0;'>
        <div style='background-color: magenta; width: 100px;
                    height: 30px; margin: 0 auto; text-align: center'>
            Inner
        </div>
    </div>
</div>
</body>
</html>

Phiên bản trực tiếp tại đây: http://jsfiddle.net/RichieHindle/CresX/


Cảm ơn bạn, giải pháp của bạn gần như là chính xác. Tôi chỉ phải thêm "// margin-left: -40px" vào kiểu khối xanh cho IE. Nếu không có hack với thuộc tính margin-left này, khối màu xanh lá cây của bạn đã được xử lý bên trái trong IE7. Bất cứ ai có thể giải thích nơi mà 40px này đến từ?
Roman

IE7 đã định vị theo chiều ngang của div màu xanh lá cây sau từ "Outer". Tôi đã cập nhật mã để chỉ định "left: 0".
RichieHindle

13

Bạn cần một div bao bọc cho phần dưới cùng, để căn giữa nó.

<style>
   /* making it look like your nice illustration */
   #outer { width: 300px; height: 200px; background: #f2f2cc; border: 1px solid #c0c0c0; }
   #inner { width: 50px; height: 40px; background: #ff0080; border: 1px solid #800000; }

   /* positioning the boxes correctly */
   #outer { position: relative; }
   #wrapper { position: absolute; bottom: 3px; width: 100%; }
   #inner { margin: 0 auto; }
</style>


<div id="outer">
   <div id="wrapper"><div id="inner"></div></div>
</div>

7

CSS3 Flexboxcho phép định vị phía dưới rất dễ dàng. Kiểm tra bảng hỗ trợ Flexbox

HTML

<div class="outer">
  <div class="inner">
  </div>
</div>

CSS

.outer {
  display: flex;
  justify-content: center; /* Center content inside */
}
.inner {
  align-self: flex-end; /* At the bottom of the parent */
}

Đầu ra:


5

Hoạt động tốt trên tất cả các trình duyệt bao gồm ie6.

<style>
    #outer{
        width: 70%;
        background-color: #F2F2CC;
        border: 1px solid #C0C0C0;
        height: 500px;
        position: relative;
        text-align: center;
    }

    #inner{
        background-color: #FF0080;
        border: 1px solid black;
        width: 30px;
        height: 20px;

        /* Position at the bottom */
        position: relative;
        top: 95%;

        /* Center */
        margin: 0 auto;
        text-align: left;
    }
</style>

<div id="outer">
    <div id="inner">
    </div>
</div>

95% trên cùng không giống như nói 10px dưới cùng. Bạn muốn hộp bên trong neo ở dưới cùng khi màn hình được thay đổi kích thước.
user959690
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.