ฉันขอแนะนำให้ใช้องค์ประกอบหลอกแทนองค์ประกอบภาพซ้อนทับ เนื่องจากไม่สามารถเพิ่มองค์ประกอบหลอกในองค์ประกอบที่ปิดล้อมได้img
คุณยังคงต้องรวมimg
องค์ประกอบไว้
ตัวอย่างสดที่นี่ -ตัวอย่างพร้อมข้อความ
<div class="image">
<img src="http://i.stack.imgur.com/Sjsbh.jpg" alt="" />
</div>
สำหรับ CSS ให้ตั้งค่ามิติที่เป็นทางเลือกบน.image
องค์ประกอบและวางตำแหน่ง หากคุณกำลังเล็งสำหรับภาพที่ตอบสนองเพียงละเว้นขนาดนี้และจะยังคงทำงาน(ตัวอย่าง) มันเป็นเพียงที่น่าสังเกตว่าขนาดจะต้องอยู่ในองค์ประกอบหลักเมื่อเทียบกับimg
องค์ประกอบตัวเองดู
.image {
position: relative;
width: 400px;
height: 400px;
}
กำหนดให้img
องค์ประกอบลูกมีความกว้างของพาเรนต์100%
และเพิ่มvertical-align:top
เพื่อแก้ไขปัญหาการจัดแนวพื้นฐานเริ่มต้น
.image img {
width: 100%;
vertical-align: top;
}
สำหรับองค์ประกอบหลอกให้ตั้งค่าเนื้อหาและวางตำแหน่งให้สัมพันธ์กับ.image
องค์ประกอบอย่างแน่นอน ความกว้าง / ความสูง100%
จะช่วยให้มั่นใจได้ว่าสิ่งนี้ใช้ได้กับimg
ขนาดที่แตกต่างกัน หากคุณต้องการเปลี่ยนองค์ประกอบให้ตั้งค่าความทึบ0
และเพิ่มคุณสมบัติ / ค่าการเปลี่ยนแปลง
.image:after {
content: '\A';
position: absolute;
width: 100%; height:100%;
top:0; left:0;
background:rgba(0,0,0,0.6);
opacity: 0;
transition: all 1s;
-webkit-transition: all 1s;
}
ใช้ความทึบของ1
เมื่อวางเมาส์เหนือองค์ประกอบหลอกเพื่ออำนวยความสะดวกในการเปลี่ยน:
.image:hover:after {
opacity: 1;
}
สิ้นสุดผลลัพธ์ที่นี่
หากคุณต้องการเพิ่มข้อความเมื่อวางเมาส์เหนือ:
สำหรับวิธีการที่ง่ายที่สุดเพียงเพิ่มข้อความเป็นค่าองค์ประกอบหลอกcontent
:
ตัวอย่างที่นี่
.image:after {
content: 'Here is some text..';
color: #fff;
}
สิ่งนี้ควรใช้ได้ในกรณีส่วนใหญ่ อย่างไรก็ตามหากคุณมีimg
องค์ประกอบมากกว่าหนึ่งรายการคุณอาจไม่ต้องการให้ข้อความเดียวกันปรากฏบนโฮเวอร์ คุณจึงสามารถตั้งค่าข้อความในdata-*
แอตทริบิวต์ดังนั้นจึงมีข้อความที่ไม่ซ้ำกันสำหรับทุกimg
องค์ประกอบ
ตัวอย่างที่นี่
.image:after {
content: attr(data-content);
color: #fff;
}
ด้วยcontent
ค่าattr(data-content)
องค์ประกอบหลอกจะเพิ่มข้อความจากแอตทริบิวต์.image
ขององค์ประกอบdata-content
:
<div data-content="Text added on hover" class="image">
<img src="http://i.stack.imgur.com/Sjsbh.jpg" alt="" />
</div>
คุณสามารถเพิ่มสไตล์และทำสิ่งต่อไปนี้:
ตัวอย่างที่นี่
ในตัวอย่างข้างต้น:after
องค์ประกอบหลอกทำหน้าที่เป็นภาพซ้อนทับสีดำในขณะที่:before
องค์ประกอบหลอกคือคำอธิบายภาพ / ข้อความ เนื่องจากองค์ประกอบต่างๆไม่ขึ้นต่อกันคุณจึงสามารถใช้การจัดแต่งทรงผมแยกกันเพื่อให้ได้ตำแหน่งที่เหมาะสมยิ่งขึ้น
.image:after, .image:before {
position: absolute;
opacity: 0;
transition: all 0.5s;
-webkit-transition: all 0.5s;
}
.image:after {
content: '\A';
width: 100%; height:100%;
top: 0; left:0;
background:rgba(0,0,0,0.6);
}
.image:before {
content: attr(data-content);
width: 100%;
color: #fff;
z-index: 1;
bottom: 0;
padding: 4px 10px;
text-align: center;
background: #f00;
box-sizing: border-box;
-moz-box-sizing:border-box;
}
.image:hover:after, .image:hover:before {
opacity: 1;
}