Đối với màu nền bán trong suốt đơn giản, các giải pháp trên (hình ảnh CSS3 hoặc bg) là các tùy chọn tốt nhất. Tuy nhiên, nếu bạn muốn làm một cái gì đó fancier (ví dụ: hoạt hình, nhiều nền, v.v.) hoặc nếu bạn không muốn dựa vào CSS3, bạn có thể thử kỹ thuật khung pane
.pane, .pane > .back, .pane > .cont { display: block; }
.pane {
position: relative;
}
.pane > .back {
position: absolute;
width: 100%; height: 100%;
top: auto; bottom: auto; left: auto; right: auto;
}
.pane > .cont {
position: relative;
z-index: 10;
}
<p class="pane">
<span class="back" style="background-color: green; opacity: 0.6;"></span>
<span class="cont" style="color: white;">Hello world</span>
</p>
Kỹ thuật này hoạt động bằng cách sử dụng hai lớp trên mạng của phần tử khung bên ngoài:
- một (các back back của) phù hợp với kích thước của phần tử khung mà không ảnh hưởng đến luồng nội dung,
- và một (các cont contv) có chứa nội dung và giúp xác định kích thước của khung.
Khung position: relative
trên là quan trọng; Nó nói với lớp trở lại để phù hợp với kích thước của khung. (Nếu bạn cần <p>
thẻ là tuyệt đối, hãy thay đổi khung từ a <p>
sang a <span>
và bọc tất cả những thứ đó ở một vị trí tuyệt đối<p>
thẻ .)
Ưu điểm chính của kỹ thuật này so với các công cụ tương tự được liệt kê ở trên là khung không phải có kích thước xác định; như được mã hóa ở trên, nó sẽ phù hợp với toàn bộ chiều rộng (bố cục phần tử khối thông thường) và chỉ cao bằng nội dung. Phần tử khung bên ngoài có thể được định kích thước theo bất kỳ cách nào bạn muốn, miễn là hình chữ nhật đó (tức là khối nội tuyến sẽ hoạt động; nội tuyến cũ đơn giản sẽ không).
Ngoài ra, nó cung cấp cho bạn rất nhiều tự do cho nền; Bạn có thể đặt bất kỳ thứ gì vào phần tử phía sau và không ảnh hưởng đến luồng nội dung (nếu bạn muốn có nhiều lớp con kích thước đầy đủ, chỉ cần đảm bảo rằng chúng cũng có vị trí: tuyệt đối, chiều rộng / chiều cao: 100%, và trên / dưới / trái / phải: tự động).
Một biến thể để cho phép điều chỉnh chèn nền (thông qua đỉnh / đáy / trái / phải) và / hoặc ghim nền (thông qua việc xóa một trong các cặp trái / phải hoặc trên / dưới) là sử dụng CSS sau:
.pane > .back {
position: absolute;
width: auto; height: auto;
top: 0px; bottom: 0px; left: 0px; right: 0px;
}
Như đã viết, điều này hoạt động trong Firefox, Safari, Chrome, IE8 + và Opera, mặc dù IE7 và IE6 yêu cầu thêm CSS và biểu thức, IIRC và lần trước tôi đã kiểm tra, biến thể CSS thứ hai không hoạt động trong Opera.
Những điều cần chú ý:
- Các phần tử nổi bên trong lớp cont sẽ không được chứa. Bạn sẽ cần đảm bảo rằng chúng được xóa hoặc có chứa, hoặc chúng sẽ trượt ra khỏi đáy.
- Các lề đi trên phần tử khung và phần đệm đi trên phần tử cont. Không sử dụng ngược lại (lề trên cont hoặc phần đệm trên khung) hoặc bạn sẽ phát hiện ra những điều kỳ lạ như trang luôn rộng hơn một chút so với cửa sổ trình duyệt.
- Như đã đề cập, toàn bộ điều cần phải là khối hoặc khối nội tuyến. Hãy sử dụng
<div>
s thay vì <span>
s để đơn giản hóa CSS của bạn.
Một bản demo đầy đủ hơn, thể hiện sự linh hoạt của kỹ thuật này bằng cách sử dụng song song với display: inline-block
và với cả auto
& width
s / s cụ thể min-height
:
.pane, .pane > .back, .pane > .cont { display: block; }
.pane {
position: relative;
width: 175px; min-height: 100px;
margin: 8px;
}
.pane > .back {
position: absolute; z-index: 1;
width: auto; height: auto;
top: 8px; bottom: 8px; left: 8px; right: 8px;
}
.pane > .cont {
position: relative; z-index: 10;
}
.debug_red { background: rgba(255, 0, 0, 0.5); border: 1px solid rgba(255, 0, 0, 0.75); }
.debug_green { background: rgba(0, 255, 0, 0.5); border: 1px solid rgba(0, 255, 0, 0.75); }
.debug_blue { background: rgba(0, 0, 255, 0.5); border: 1px solid rgba(0, 0, 255, 0.75); }
<p class="pane debug_blue" style="float: left;">
<span class="back debug_green"></span>
<span class="cont debug_red">
Pane content.<br/>
Pane content.
</span>
</p>
<p class="pane debug_blue" style="float: left;">
<span class="back debug_green"></span>
<span class="cont debug_red">
Pane content.<br/>
Pane content.<br/>
Pane content.<br/>
Pane content.<br/>
Pane content.<br/>
Pane content.<br/>
Pane content.<br/>
Pane content.<br/>
Pane content.
</span>
</p>
<p class="pane debug_blue" style="float: left; display: inline-block; width: auto;">
<span class="back debug_green"></span>
<span class="cont debug_red">
Pane content.<br/>
Pane content.
</span>
</p>
<p class="pane debug_blue" style="float: left; display: inline-block; width: auto; min-height: auto;">
<span class="back debug_green"></span>
<span class="cont debug_red">
Pane content.<br/>
Pane content.
</span>
</p>
Và đây là bản demo trực tiếp về kỹ thuật đang được sử dụng rộng rãi: