2012-06-20 27 views
5

Với HTML sau:trật tự lớp Confusing chồng chéo divs với nội dung và màu nền

<div class="foo">howdy howdy howdy how</div> 
<div class="bar">Hello</div>​ 

và CSS sau đây:

.foo { 
    background-color:green; 
    overflow:hidden; 
    height:.75em; 
} 

.bar { 
    color: white; 
    background-color: red; 
    margin-top: -10px; 
    width: 200px; 
} 

Trình tự lớp là một cái gì đó như thế này:

weird layer order

Đây là liên kết jsfiddle: http://jsfiddle.net/q3J8D/

Tôi cho rằng nền màu đỏ nằm trên đầu văn bản màu đen và không hiểu tại sao văn bản màu đen ở trên nền đỏ.

Tôi có thể khắc phục vấn đề này bằng cách sử dụng position: relative, nhưng tôi chỉ tò mò.

Tại sao văn bản màu đen ở trên nền đỏ?

Tôi đặc biệt đang tìm kiếm nguồn chính thức/tiêu chuẩn giải thích hành vi này.

+0

Xảy ra trong Chrome, nhưng không xuất hiện trong Firefox. Nhưng không biết tại sao. – bfavaretto

+2

Hơi giống với điều này: http: // stackoverflow.com/questions/11088176/before-pseudo-element-stacking-order-issue – thirtydot

+0

@bfavaretto: Tôi thấy nó liên tục trên các phiên bản mới nhất của tất cả các trình duyệt. – BoltClock

Trả lời

3

Mất một lúc để hiểu nó, ngay cả sau khi đọc thespec nhiều lần và BoltClock's answer đến linked question.

Nhưng có vẻ như những lời giải thích rất đơn giản: vì đây là hai tĩnh (tức là không ở vị trí), các yếu tố khối cấp bên trong cùng bối cảnh xếp chồng (bối cảnh gốc), họ được rút ra theo trình tự sau:

  • nền của #foo
  • nền của #bar
  • nội dung văn bản của #foo
  • nội dung văn bản của #bar

Vì vậy, đầu ra chúng ta thấy trong câu hỏi.

Thứ tự sơn được quyết định bởi thuật toán được mô tả trong Appendix E của thông số CSS 2.1. Những gì không có trong phụ lục (nhưng được đề cập là here), là thuật toán được áp dụng đệ quy cho mỗi ngữ cảnh xếp chồng (không phải mỗi phần tử ).

+0

Ngữ cảnh xếp chồng gốc là 'html', không phải' nội dung'. Bên cạnh đó, bạn về cơ bản đã có nó. Làm tốt lắm :) – BoltClock

+0

@BoltClock Vì vậy, 'body' cũng đang tạo ra một bối cảnh xếp chồng mới? Tôi nghĩ là không. BTW: xin lỗi nếu tôi lãng phí thời gian của bạn yêu cầu giúp đỡ. Tôi đã phần nào bị ám ảnh về câu hỏi này. Câu cuối cùng trong câu trả lời của tôi giải thích nguồn gốc của tất cả sự nhầm lẫn của tôi. – bfavaretto

+0

'body' không tạo ra một bối cảnh xếp chồng mới, nhưng là con của' html', nó được vẽ trên đầu trang của 'html', tiếp theo là hai' div '. Tôi cho rằng nhận xét đó là để làm rõ cho OP và các độc giả khác, hơn bất cứ điều gì. Và không phải lo lắng, không lãng phí thời gian - tôi nghĩ rằng bạn đã làm việc trên nó anyway. – BoltClock

-1

http://www.w3.org/TR/CSS21/visuren.html#z-index

"Ví dụ này cho thấy khái niệm về tính minh bạch. Hành vi mặc định của nền là để cho phép hộp đằng sau nó để được hiển thị. Trong ví dụ này, mỗi hộp trong suốt chồng lên hộp dưới nó. Đây hành vi có thể bị ghi đè bằng cách sử dụng một trong các thuộc tính nền hiện tại "

+2

... được sử dụng trên mã ví dụ. Không minh bạch ở đây. – bfavaretto

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