2012-02-10 135 views
20

Tôi có hai div trong một vùng chứa. Một phao còn lại và một phao trôi nổi. Cả hai đều rộng khoảng 60% so với container và được thiết kế sao cho chúng chồng lên nhau ở giữa (quyền div được ưu tiên).CSS: Làm cho hai phần tử nổi chồng lên nhau

Làm cách nào để khiến chúng trùng lặp thay vì ngăn xếp theo chiều dọc như các phần tử nổi thường làm? Nếu tôi định vị sai phần tử bên phải thì div chứa không mở rộng để vừa với nội dung.

Mã (tiếc là tôi không thể jsfiddle này như các máy chủ của họ được đọc chỉ atm):

<div id="container"> 
    <div id="left">left</div> 
    <div id="right">right</div> 
</div> 

#container { 
    width: 400px; 
    background-color: #eee; 
} 

#left { 
    width: 250px; 
    border: 1px solid #ccc; 
    display: inline; 
    float: left; 
} 

#right { 
    width: 250px; 
    border: 1px solid #ccc; 
    display: inline; 
    float: right; 
} 
+0

Nếu tôi thuộc tính "hiển thị: nội tuyến" chính xác cũng không cho phép thứ nguyên cài đặt. Điều này có nghĩa là nếu bạn đặt hiển thị của mình thành nội tuyến, bạn không được định nghĩa bất kỳ chiều rộng và/hoặc chiều cao nào. Và bạn nổi, nội tuyến đó dường như vô dụng đối với tôi. Tôi sẽ sử dụng chỉ mục z mà bạn có thể kiểm soát thông qua javascript trên: hovers hoặc click() s (hoán đổi giá trị giữa hai phần tử). Giao diện của bạn năng động đến mức nào? – benqus

+0

'display: inline' là thừa vì bất kỳ phần tử nào là' float'ed được tự động 'display: block'. – Gareth

Trả lời

37

Sử dụng một tiêu cực margin-right trên hộp trái để ô đúng được phép chồng chéo:

#left { 
    width: 250px; 
    border: 1px solid #ccc; 
    display: inline; 
    float: left; 
    margin-right:-104px; 
} 

Các 104 pixel là số tiền chồng chéo cộng 4px cho biên giới.

Đây là jsfiddle.

+0

Rất tuyệt vời. Tôi đã tìm kiếm một giải pháp để chồng chéo các cột nổi trong một thời gian (đối với các tab tự động chiều cao http://j.mp/1iQ30Fz) Đây là một giải pháp hoàn hảo! – sstur

+3

Tôi không thích điều này. Nó có vẻ là nhiều "tùy chỉnh" trường hợp. Các vấn đề có thể xảy ra, nếu kích thước của phần tử thứ hai được thay đổi từ 100px thành bất cứ điều gì ... –

0

Bạn có thể tạo các divs với vị trí tuyệt đối và thêm một z-index tích cực cho một trong những bạn muốn trở thành trong trước mặt.

<div id="container"> 
    <div id="left">left</div> 
    <div id="right">right</div> 
</div> 

#container { 
    width: 400px; 
    background-color: #eee; 
    position: relative; 
} 

#left { 
    width: 250px; 
    border: 1px solid #ccc; 
    display: block; 
    position: absolute; 
    top: 0px; 
    left: 0px; 
} 

#right { 
    width: 250px; 
    border: 1px solid #ccc; 
    display: inline; 
    position: absolute; 
    top: 0px; 
    right: 0px; 
    z-index: 1; 
} 
+0

Trong trường hợp bạn không biết "px" là không cần thiết khi bạn xác định "0px", bạn chỉ có thể sử dụng hàng đầu: 0; tiết kiệm cho bạn một số ký tự – thenetimp

+1

Tôi đã làm điều này nhưng điều đó có nghĩa là vùng chứa mẹ sẽ không mở rộng để vừa với nội dung – Chris

+0

Bạn có thể đặt chiều rộng của vùng chứa và các div bằng phần trăm thay vì giá trị cố định. ví dụ. chiều rộng vùng chứa: 100%, #left chiều rộng 60% và chiều rộng #right 60%. –

2

Bạn chỉ có thể thực hiện việc đó với định vị.

<div id="container"> 
    <div id="left">left</div> 
    <div id="right">right</div> 
</div> 

#container { 
    width: 400px; 
    background-color: #eee; 
    position: relative; 
} 

#left { 
    width: 250px; 
    border: 1px solid #ccc; 
    position: absolute; 
    left: 0; 
    top: 0; 
    z-index: 1; 
} 

#right { 
    width: 250px; 
    border: 1px solid #ccc; 
    position: absolute; 
    right: 0; 
    top: 0; 
    z-index: 2; 
} 
-1

Hãy thử điều này một:

<div id="container"> 
    <div id="left">left</div> 
    <div id="right">right</div> 
</div> 
<style> 
#container { 
    width: 400px; 
    background-color: #eee; 
} 

#left { 
    width: 250px; 
    border: 1px solid #ccc; 
    float: left; 
} 

#right { 
    width: 250px; 
    border: 1px solid #ccc; 
    margin-left: 150px; 
    position: absolute; 
} 
</style> 
+0

nên tốt hơn để được liên kết tự nhiên, thay vì đánh lừa. –

-1

Làm thế nào về kéo div đúng với biên độ tiêu cực. Một cái gì đó như thế này?

<div id="container"> 
    <div id="left">left</div> 
    <div id="right">right</div> 
</div> 

#container { 
    position: relative; 
    width: 400px; 
    height: 110px; 
    background-color: #eee; 
} 

#left { 
    width: 250px; 
    height: 100px; 
    border: 1px solid green; 
    float: left; 
} 

#right { 
    position: relative; 
    float: right; 
    width: 250px; 
    height: 100px; 
    top: -100px; 
    border: 1px solid red; 
} 
0

Làm cho thùng chứa lớn hơn vừa vừa vặn. Sau đó, sử dụng vị trí tương đối và trái: -100px hoặc bất kỳ thứ gì ở bên phải.

1

Bạn có thể thêm div phụ vào đó không?

<div id="container"> 
    <div id="left"> 
     <div id="left-inner">left</div> 
    </div> 
    <div id="right">right</div> 
</div> 
<style> 
#container { 
    width: 400px; 
} 

#left { 
    float: left; 
    width: 0px; 
    overflow:visible; 
} 

#left-inner { 
    float: right; 
    width: 250px; 
} 

#right { 
    width: 250px; 
} 
</style> 
+1

Việc thêm cấu trúc bổ sung để tạo kiểu là sử dụng HTML và CSS không đúng cách. –

+0

@Bradley A. Tetreault: như một quy luật chung, điều này là đúng. nhưng thực tế là tồi tệ nhất sau đó này - lấy IE6-8 làm ví dụ và tất cả các sửa chữa/hack, mà cũng liên quan đến rất nhiều div.fixer (hoặc div # fixer) – llamerr

0

xuất sắc Giải pháp: http://jsfiddle.net/A9Ap7/237/


Vì vậy, không sử dụng:

MARGIN-LEFT:100px... 

== hoặc lệnh tương tự.
Vấn đề là, nếu kích thước phần tử bên trái bị thay đổi, nếu cửa sổ được thay đổi kích thước hoặc vv ,,, sau đó nó sẽ làm cho bạn vấn đề! vì vậy, không sử dụng tùy chỉnh như vậy bẩn "thủ thuật", nhưng làm cho một cấu trúc bình thường bên trong html, vì vậy họ nên được tự nhiên ra lệnh.

+0

Điều này không giải quyết được vấn đề cho phép hai phần tử 60% chiều rộng của container để chồng lên nhau. – Gareth

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