สำหรับสีพื้นหลังกึ่งโปร่งใสที่เรียบง่ายโซลูชันด้านบน (ภาพ CSS3 หรือ bg) เป็นตัวเลือกที่ดีที่สุด อย่างไรก็ตามหากคุณต้องการทำสิ่งที่นักเล่นชื่นชอบ (เช่นภาพเคลื่อนไหว, พื้นหลังหลาย ๆ แบบ ฯลฯ ) หรือหากคุณไม่ต้องการใช้ CSS3 คุณสามารถลองใช้“ เทคนิคบานหน้าต่าง”:
.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>
เทคนิคนี้ทำงานโดยใช้“ เลเยอร์” สองอันภายในองค์ประกอบนอกบานหน้าต่าง:
- หนึ่ง ("ย้อนกลับ") ที่เหมาะกับขนาดขององค์ประกอบบานหน้าต่างโดยไม่มีผลต่อการไหลของเนื้อหา
- และหนึ่ง ("ต่อ") ที่มีเนื้อหาและช่วยกำหนดขนาดของบานหน้าต่าง
position: relative
ในบานหน้าต่างด้านเป็นสิ่งสำคัญ; มันบอกเลเยอร์ด้านหลังให้พอดีกับขนาดของบานหน้าต่าง (ถ้าคุณต้องการ<p>
แท็กจะเป็นที่แน่นอนเปลี่ยนบานหน้าต่างจาก<p>
ไป<span>
และห่อทุกสิ่งที่อย่างในตำแหน่ง<p>
แท็ก.)
ข้อได้เปรียบหลักเทคนิคนี้มีเหนือกว่ารายการที่คล้ายกันข้างต้นคือบานหน้าต่างไม่จำเป็นต้องมีขนาดที่ระบุ ตามที่เขียนไว้ข้างต้นมันจะเต็มความกว้าง (เลย์เอาต์องค์ประกอบบล็อกปกติ) และสูงที่สุดเท่าที่เนื้อหา องค์ประกอบบานหน้าต่างด้านนอกสามารถปรับขนาดได้ตามที่คุณต้องการตราบใดที่มันเป็นรูปสี่เหลี่ยมผืนผ้า (นั่นคือบล็อกแบบอินไลน์จะทำงานได้
นอกจากนี้ยังให้อิสระมากมายกับพื้นหลัง คุณมีอิสระที่จะใส่ทุกอย่างลงในองค์ประกอบด้านหลังและไม่ส่งผลกระทบต่อการไหลของเนื้อหา (ถ้าคุณต้องการเลเยอร์ย่อยขนาดเต็มหลาย ๆ ชุดให้แน่ใจว่าพวกเขามีตำแหน่ง: แน่นอนความกว้าง / ความสูง: 100% และด้านบน / ล่าง / ซ้าย / ขวา: อัตโนมัติ)
รูปแบบหนึ่งที่อนุญาตให้มีการปรับการแทรกพื้นหลัง (ผ่านด้านบน / ล่าง / ซ้าย / ขวา) และ / หรือการปักหมุดพื้นหลัง (โดยการลบคู่ซ้าย / ขวาหรือบน / ล่าง / คู่ล่าง) อย่างใดอย่างหนึ่งคือใช้ CSS ต่อไปนี้แทน:
.pane > .back {
position: absolute;
width: auto; height: auto;
top: 0px; bottom: 0px; left: 0px; right: 0px;
}
ตามที่เขียนมาใช้งานได้ใน Firefox, Safari, Chrome, IE8 + และ Opera แม้ว่า IE7 และ IE6 ต้องใช้ CSS และนิพจน์พิเศษ IIRC และครั้งสุดท้ายที่ฉันตรวจสอบ CSS ชุดที่สองไม่ทำงานใน Opera
สิ่งที่ต้องระวัง:
- อิลิเมนต์ที่ลอยอยู่ภายในของเลเยอร์ cont จะไม่ถูกเก็บไว้ คุณจะต้องตรวจสอบให้แน่ใจว่าพวกเขาจะถูกล้างออกหรือบรรจุอยู่มิฉะนั้นพวกเขาจะหลุดออกจากด้านล่าง
- ระยะขอบไปที่องค์ประกอบบานหน้าต่างและช่องว่างภายในไปที่องค์ประกอบต่อเนื่อง อย่าใช้สิ่งที่ตรงกันข้าม (ระยะขอบบน cont หรือ padding บนบานหน้าต่าง) หรือคุณจะค้นพบสิ่งแปลกประหลาดเช่นหน้านั้นกว้างกว่าหน้าต่างเบราว์เซอร์เล็กน้อย
- ดังที่ได้กล่าวมาแล้วทั้งหมดต้องเป็นแบบบล็อกหรือแบบอินไลน์บล็อก คุณสามารถใช้
<div>
s แทน<span>
CSS เพื่อทำให้ CSS ของคุณง่ายขึ้น
การสาธิตที่สมบูรณ์กว่าแสดงความยืดหยุ่นของเทคนิคนี้โดยใช้ควบคู่กับdisplay: inline-block
และทั้งauto
& width
s / s เฉพาะ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>
และนี่คือตัวอย่างสดของเทคนิคที่ใช้อย่างกว้างขวาง: