Tôi khuyên bạn nên sử dụng phần tử giả thay cho phần tử lớp phủ. Bởi vì các phần tử giả không thể được thêm vào img
các phần tử kèm theo , bạn vẫn cần phải bọc img
phần tử đó.
VÍ DỤ TRỰC TIẾP TẠI ĐÂY - VÍ DỤ VỚI VĂN BẢN
<div class="image">
<img src="http://i.stack.imgur.com/Sjsbh.jpg" alt="" />
</div>
Đối với CSS, hãy đặt các kích thước tùy chọn trên .image
phần tử và định vị nó một cách tương đối. Nếu bạn đang nhắm đến một hình ảnh đáp ứng, chỉ cần bỏ qua các kích thước và điều này sẽ vẫn hoạt động (ví dụ) . Nó chỉ đáng chú ý là kích thước phải nằm trên yếu tố phụ huynh như trái ngược với các img
yếu tố bản thân, nhìn thấy .
.image {
position: relative;
width: 400px;
height: 400px;
}
Cung cấp cho img
phần tử con có chiều rộng bằng phần tử 100%
gốc và thêm vertical-align:top
vào để khắc phục sự cố căn chỉnh đường cơ sở mặc định.
.image img {
width: 100%;
vertical-align: top;
}
Đối với phần tử giả, hãy đặt một giá trị nội dung và hoàn toàn đặt nó so với .image
phần tử. Chiều rộng / chiều cao của 100%
sẽ đảm bảo rằng điều này hoạt động với các img
kích thước khác nhau . Nếu bạn muốn chuyển đổi phần tử, hãy đặt độ mờ 0
và thêm các thuộc tính / giá trị chuyển đổi.
.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;
}
Sử dụng độ mờ 1
khi di chuột qua phần tử giả để tạo điều kiện chuyển đổi:
.image:hover:after {
opacity: 1;
}
KẾT QUẢ KẾT QUẢ TẠI ĐÂY
Nếu bạn muốn thêm văn bản khi di chuột:
Đối với cách tiếp cận đơn giản nhất, chỉ cần thêm văn bản làm content
giá trị của phần tử giả :
VÍ DỤ TẠI ĐÂY
.image:after {
content: 'Here is some text..';
color: #fff;
/* Other styling.. */
}
Điều đó sẽ hoạt động trong hầu hết các trường hợp; tuy nhiên, nếu bạn có nhiều hơn một img
phần tử, bạn có thể không muốn cùng một văn bản xuất hiện khi di chuột. Do đó, bạn có thể đặt văn bản trong một data-*
thuộc tính và do đó có văn bản duy nhất cho mọi img
phần tử.
VÍ DỤ TẠI ĐÂY
.image:after {
content: attr(data-content);
color: #fff;
}
Với content
giá trị là attr(data-content)
, phần tử giả sẽ thêm văn bản từ thuộc tính .image
của phần tử data-content
:
<div data-content="Text added on hover" class="image">
<img src="http://i.stack.imgur.com/Sjsbh.jpg" alt="" />
</div>
Bạn có thể thêm một số kiểu và làm như sau:
VÍ DỤ TẠI ĐÂY
Trong ví dụ trên, :after
phần tử giả đóng vai trò là lớp phủ màu đen, trong khi :before
phần tử giả là chú thích / văn bản. Vì các phần tử độc lập với nhau, bạn có thể sử dụng kiểu dáng riêng biệt để định vị tối ưu hơn.
.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;
}