2011-03-14 69 views
6

Tôi có một div cha với một số biến số div trẻ em có kích thước bằng nhau trôi nổi trái. Tôi muốn div cha mẹ mở rộng đến chiều rộng của trẻ em không có vấn đề gì, ngay cả khi nó có nghĩa là tràn container riêng của mình.Mở rộng một div phụ huynh theo chiều ngang để phù hợp với trẻ em thả nổi của nó

Có cách nào để thực hiện điều này một cách tự nhiên với HTML/CSS không?

Ví dụ (Các div căng ra sẽ gió lên là 180px rộng):

HTML:

<div id="stretchable-div"> 
    <div class="child"></div> 
    <div class="child"></div> 
    <div class="child"></div> 
    ... 
</div 

CSS:

.child { 
    width: 60px; 
    height: 60px; 
    float:left; 
} 
+0

bạn có nghĩ ra cách thực hiện điều này không? –

+0

Ok, có vẻ như cách dễ nhất để làm điều này là sử dụng JavaScript để tăng/giảm độ rộng động của phần tử vùng chứa, trong phạm vi phụ huynh bị tràn. –

Trả lời

5

Trong ví dụ này các yếu tố căng-div sẽ phá sản ra khỏi mẹ, và kéo dài đến nó bọn trẻ.

Live Demo

css

#parent{ 
    width:200px; 
    height:180px; 
    background:red; 
} 

#stretchable-div{ 
    background:blue; 
    position: absolute; 
} 

.child { 
    width: 60px; 
    height: 60px; 
    float:left; 
} 

Markup

<div id="parent">Im a parent 
    <div id="stretchable-div"> 
     <div class="child">a</div> 
     <div class="child">b</div> 
     <div class="child">c</div> 
     <div class="child">c</div> 
     <div class="child">c</div> 
     <div class="child">c</div> 
     <div class="child">c</div> 
    </div> 
</div> 
+0

@ Loktar- Cảm ơn bạn, nhưng tôi có hai câu hỏi- Xem phiên bản sửa đổi của ví dụ của bạn: http://jsfiddle.net/seB5F/12/ 1) Khi tôi thêm nhiều phần tử hơn hoặc đẩy div tuyệt đối về phía trước, các phần tử bắt đầu quấn vào mép khung. 2) Tôi cũng đã thêm tràn: ẩn cho div cha, nhưng vẫn thấy tất cả div có thể kéo dài. Tại sao tôi không thể mở rộng div căng ra để chiều rộng, với bất kỳ tràn ẩn? Bạn có thể giải thích điều này? – Yarin

+0

Ok để trả lời câu hỏi đầu tiên, vì vị trí tuyệt đối, lấy nó ra khỏi dòng tài liệu, vì vậy đó là lý do tại sao tràn không ảnh hưởng đến div co giãn, thay đổi nó thành tương đối và ẩn của nó – Loktar

+0

@ Loktar- Bạn trả lời câu hỏi của tôi, nhưng tôi vẫn có vấn đề - tôi muốn tràn bộ lọc. Để làm điều đó tôi cần phải làm cho vị trí container: tương đối, nhưng điều này gây ra các nội dung để bọc. Bất kỳ ý tưởng? – Yarin

1

bạn có thể thêm display: inline-block; cho phần tử cha. Để làm việc trong ie7, bạn cũng cần sử dụng display:inline;zoom:100%; để thay thế.

Vì vậy, một css có thể cho những gì bạn cần là thế này:

#stretchable-div { 
    background: none repeat scroll 0 0 red; 
    display: inline-block; 
    overflow: auto; /* clear the floats */ 
    *display:inline; /* ie7 hack even better use conditional comment */ 
    zoom:100%; 
} 

dụ:http://jsfiddle.net/8JJSf/

+0

@ Sotiris- Cảm ơn bạn, nhưng ví dụ của bạn sẽ không cho phép div phụ huynh tràn bộ chứa của nó. Xem http://jsfiddle.net/8JJSf/4/. – Yarin

+0

@Yarin chính xác, để tràn bộ chứa, nó cũng cần 'vị trí: tuyệt đối' cho' # stretchable-div' – Sotiris

+0

@ Sotiris- Có, nhưng bạn sẽ không cần hiển thị: chặn nội tuyến, phải không? – Yarin

3

Cũng giống như @ dụ Pizzicato, nhưng sử dụng overflow:hidden để xóa phụ huynh div: http://jsfiddle.net/dSjv4/.

Có một bài viết tuyệt vời về cách định vị và xóa div trên Danh sách Ngoài here (gần cuối bài viết).

+0

@ Nathan- Cảm ơn, nhưng ví dụ của bạn sẽ không cho phép div cha mẹ tràn bộ chứa của nó. Xem http://jsfiddle.net/dSjv4/14/ – Yarin

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