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 imgcác phần tử kèm theo , bạn vẫn cần phải bọc imgphầ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 .imagephầ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 imgyếu tố bản thân, nhìn thấy .
.image {
position: relative;
width: 400px;
height: 400px;
}
Cung cấp cho imgphần tử con có chiều rộng bằng phần tử 100%gốc và thêm vertical-align:topvà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 .imagephầ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 imgkích thước khác nhau . Nếu bạn muốn chuyển đổi phần tử, hãy đặt độ mờ 0và 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ờ 1khi 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 contentgiá 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 imgphầ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 imgphần tử.
VÍ DỤ TẠI ĐÂY
.image:after {
content: attr(data-content);
color: #fff;
}
Với contentgiá trị là attr(data-content), phần tử giả sẽ thêm văn bản từ thuộc tính .imagecủ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, :afterphần tử giả đóng vai trò là lớp phủ màu đen, trong khi :beforephầ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;
}