2012-04-24 44 views
6

trong một thời gian dài tôi đang loay hoay xung quanh với một vấn đề bố cục cụ thể mà tôi rõ ràng đang tiếp cận sai hướng.Tràn với bố cục bố cục tuyệt đối/tương đối

Dưới đây là cách tiếp cận chia nhỏ các thành phần cơ bản của nó:

<!DOCTYPE html> 
<html> 
<head> 
</head> 
<body> 
<div class="stretched"> 
    <div class="header">SOME HEADER</div> 
    <div class="someControls"> 
     <input type="button" value="click me"/> 
     <input type="button" value="no me"/> 
    </div> 
    <div class="inner"> 
     some text... 
    </div> 
</div> 
</body> 
</html> 

với css sau:

.stretched { 
    position:absolute; 
    height:auto; 
    bottom: 0; 
    top: 0; 
    left: 0; 
    right: 0; 
    width: 250px; 
    margin: 30px auto 20px; 
    background-color: green; 
} 

.inner { 
    margin:10px; 
    background-color: red; 
    overflow: auto;   
} 

Những gì tôi đang cố gắng để làm là có stretched div sử dụng tất cả có sẵn không gian khung nhìn dọc (trừ một vài điểm ảnh trên và dưới cho đầu trang và chân trang) và được căn giữa theo chiều ngang với một cố định với.

Điều này dường như hoạt động khá tốt. Vấn đề là thuộc tính overflow: auto; không được áp dụng cho nội dung inner như tôi muốn. Khi some text... lâu hơn, các inner div chồng chéo vùng chứa của tôi và không hiển thị thanh cuộn.

Đây là Fiddle: fiddle #1

Tôi muốn tránh việc thanh cuộn trên cơ thể trang và thay vào đó có tràn bởi cuộn quản lý bên trong inner div, do đó làm cho stretched luôn hoàn toàn có thể nhìn thấy.

tôi có thể áp dụng các thủ thuật tương tự với position: absolute; top: 0; ... đến inner div là tốt, nhưng sau đó tôi phải xác định chiều cao của header + someControls một cách rõ ràng, mà tôi muốn tránh, bởi vì nó là khác nhau trên tất cả các trang của tôi.

Đây là cách nó hoạt động như tôi muốn nó (trừ phần top: 40px;): fiddle #2

Tôi đang làm gì sai ở đây? Cảm ơn trước!

+0

+1 cho câu hỏi được cấu trúc tốt và tự thử. – MarioDS

+0

Yêu cầu hỗ trợ IE7 phải không? – thirtydot

+0

Không nhất thiết. Tuy nhiên, sẽ tốt đẹp. – FlxMgdnz

Trả lời

0

Hey tại sao xác định vị trí tuyệt đối trong bảng phong cách của bạn

thay thế một

.stretched { 

    width: 250px; 
    margin: 30px auto 20px; 
    background-color: green; 
} 

sống demo này http://jsfiddle.net/rohitazad/Rpdr9/366/

Cập nhật js fiddle http://jsfiddle.net/rohitazad/Rpdr9/368/

+0

Cảm ơn! Đã làm cho câu hỏi của tôi chính xác hơn, sẽ là tuyệt vời nếu bạn muốn kiểm tra fiddle thứ hai tôi thêm vào câu hỏi của tôi. – FlxMgdnz

0

Di

position: absolute; 

và thêm

border: 10px solid green; 

http://jsfiddle.net/Rpdr9/367/

EDIT: Nếu bạn không thích biên giới rất lớn, bạn có thể thay đổi biên giới có kích thước 1px.

border: 1px solid green; 

Thậm chí việc này cũng hiệu quả.

+0

Cảm ơn! Nhưng tôi muốn tránh thanh cuộn trên thân trang, có vẻ như tôi phải làm cho câu hỏi của tôi cụ thể hơn. 'Diveded' div nên được hiển thị hoàn toàn, và tràn sẽ được xử lý bởi thanh cuộn trong div' inner'. – FlxMgdnz

+0

Bạn có nghĩa là một cái gì đó như thế này - http://jsfiddle.net/Rpdr9/369/? – Ankit

+0

Có, nhưng không có chiều cao cố định. Hãy kiểm tra fiddle khác tôi đã thêm vào câu hỏi của tôi. – FlxMgdnz

1

Tôi không nghĩ rằng điều này là có thể với CSS tinh khiết (..đó hoạt động trong tất cả các trình duyệt phổ biến).

Dưới đây là một cách tiếp cận sử dụng old Flexbox spec: http://jsfiddle.net/thirtydot/xRr7e/

Thật không may, nó chỉ works in trình duyệt WebKit/Firefox.

Đã đến lúc sử dụng một vài dòng mã JavaScript cho bố cục này ..