Это мой код. Я хочу наложить серый цвет поверх содержимого каждого элемента flexItem. Слой также должен быть поверх изображения. Я не могу найти решение, у кого-нибудь есть идеи?
Я пробую использовать относительное положение для flexCont и абсолютное для наложения flexItem, но ничего не поделаешь.
У меня есть функция в js, которая применяет класс оверлея при наведении и удаляет его, если вы больше не наведете
$('.flexItem').hover(
function() {
$(this).addClass( 'overlay' );
console.info('hover')
}, function() {
$(this).removeClass( 'overlay' );
console.info('no hover')
}
);.flexCont{
display: flex;
display: -ms-flex;
display: -webkit-flex;
flex-direction: row;
}
.flexContO{
display: flex;
display: -ms-flex;
display: -webkit-flex;
flex-direction: row;
}
.flexContO>div{
width:50%;
}
.flexCont .flexItem{
flex: 1 1 25%;
}
.flexItem{
display: flex;
flex-direction: column;
}
.overlay{
background-color: rgba(0,0,0,0.5); /*dim the background*/
position: relative;
z-index:999!important;
}
.flexItemV{
display: flex;
flex-direction: column;
justify-content: space-between;
}
.flexItemO{
display: flex;
flex-direction: row;
}
.flexItemO>div{
width:50%;
}
.flexItem1{
height:375px;
justify-content: center;
align-items: center;
display: flex;
flex-direction: column;
text-align:center;
padding:20px;
}
.flexItem2>img{
width: 100%;z-index:99!important;
}
.flexItemV1{
}
.flexItemV2{
}
.<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class = "flexCont">
<div class = "flexItem">
<div class = "flexItem1">
<p>Place</p>
<h3>u & d 4</h3>
<a href = "http//link/u-d/">sometext bla bla </a><br><a href = "http//link/u-d/"><i class = "x-icon x-icon-arrow-right" data-x-icon = "" aria-hidden = "true"></i></a>
</div>
<div class = "flexItem2"><img src = "https://meme.xyz/uploads/posts/t/l-1229-the-two-states-of-every-programmer.jpg"></div>
</div>
<div class = "flexItem">
<div class = "flexItem2"><img src = "https://meme.xyz/uploads/posts/t/l-1229-the-two-states-of-every-programmer.jpg"></div>
<div class = "flexItem1">
<p>Place</p>
<h3>d & u 3</h3>
<a href = "http//link/d-u/">sometext bla bla </a><br><a href = "http//link/d-u/"><i class = "x-icon x-icon-arrow-right" data-x-icon = "" aria-hidden = "true"></i></a>
</div>
</div>
<div class = "flexItem">
<div class = "flexItem1">
<p>Place</p>
<h3>d & u 2</h3>
<a href = "http//link/matrimonio-test2/">sometext bla bla </a><br><a href = "http//link/matrimonio-test2/"><i class = "x-icon x-icon-arrow-right" data-x-icon = "" aria-hidden = "true"></i></a>
</div>
<div class = "flexItem2"><img src = "https://meme.xyz/uploads/posts/t/l-1229-the-two-states-of-every-programmer.jpg"></div>
</div>
<div class = "flexItem">
<div class = "flexItem2"><img src = "https://meme.xyz/uploads/posts/t/l-1229-the-two-states-of-every-programmer.jpg"></div>
<div class = "flexItem1">
<p>Place</p>
<h3>u & d 1</h3>
<a href = "http//link/matrimonio-test/">sometext bla bla </a><br><a href = "http//link/matrimonio-test/"><i class = "x-icon x-icon-arrow-right" data-x-icon = "" aria-hidden = "true"></i></a>
</div>
</div>
</div>Я сделал это тоже здесь, в коде, не работает
Проверьте мой ответ ниже !!



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Хорошо, вы можете использовать псевдоэлемент after для стилизации этого. Проверь это
$('.flexItem').hover(
function() {
$(this).addClass( 'overlay' );
}, function() {
$(this).removeClass( 'overlay' );
}
);.flexCont {
display: flex;
display: -ms-flex;
display: -webkit-flex;
flex-direction: row;
}
.flexContO {
display: flex;
display: -ms-flex;
display: -webkit-flex;
flex-direction: row;
}
.flexContO>div {
width: 50%;
}
.flexCont .flexItem {
flex: 1 1 25%;
}
.flexItem {
display: flex;
flex-direction: column;
}
.overlay {
/*dim the background*/
position: relative;
}
.overlay:after {
content: "";
background-color: rgba(0, 0, 0, 0.5);
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
}
.flexItemV {
display: flex;
flex-direction: column;
justify-content: space-between;
}
.flexItemO {
display: flex;
flex-direction: row;
}
.flexItemO>div {
width: 50%;
}
.flexItem1 {
height: 375px;
justify-content: center;
align-items: center;
display: flex;
flex-direction: column;
text-align: center;
padding: 20px;
}
.flexItem2>img {
width: 100%;
z-index: 99 !important;
}<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class = "flexCont">
<div class = "flexItem">
<div class = "flexItem1">
<p>Place</p>
<h3>u & d 4</h3>
<a href = "http//link/u-d/">sometext bla bla </a><br><a href = "http//link/u-d/"><i class = "x-icon x-icon-arrow-right" data-x-icon = "" aria-hidden = "true"></i></a>
</div>
<div class = "flexItem2"><img src = "https://meme.xyz/uploads/posts/t/l-1229-the-two-states-of-every-programmer.jpg"></div>
</div>
<div class = "flexItem">
<div class = "flexItem2"><img src = "https://meme.xyz/uploads/posts/t/l-1229-the-two-states-of-every-programmer.jpg"></div>
<div class = "flexItem1">
<p>Place</p>
<h3>d & u 3</h3>
<a href = "http//link/d-u/">sometext bla bla </a><br><a href = "http//link/d-u/"><i class = "x-icon x-icon-arrow-right" data-x-icon = "" aria-hidden = "true"></i></a>
</div>
</div>
<div class = "flexItem">
<div class = "flexItem1">
<p>Place</p>
<h3>d & u 2</h3>
<a href = "http//link/matrimonio-test2/">sometext bla bla </a><br><a href = "http//link/matrimonio-test2/"><i class = "x-icon x-icon-arrow-right" data-x-icon = "" aria-hidden = "true"></i></a>
</div>
<div class = "flexItem2"><img src = "https://meme.xyz/uploads/posts/t/l-1229-the-two-states-of-every-programmer.jpg"></div>
</div>
<div class = "flexItem">
<div class = "flexItem2"><img src = "https://meme.xyz/uploads/posts/t/l-1229-the-two-states-of-every-programmer.jpg"></div>
<div class = "flexItem1">
<p>Place</p>
<h3>u & d 1</h3>
<a href = "http//link/matrimonio-test/">sometext bla bla </a><br><a href = "http//link/matrimonio-test/"><i class = "x-icon x-icon-arrow-right" data-x-icon = "" aria-hidden = "true"></i></a>
</div>
</div>
</div>Я не могу это скрыть, мне нужно изменить здесь не непрозрачность, а наложить цвет.
Вы можете использовать обновленный код ниже:
$('.flexItem').hover(
function() {
$(this).addClass( 'overlay' );
$(this).find('img').css('opacity', '0.6');
//console.info('hover')
}, function() {
$(this).removeClass( 'overlay' );
$(this).find('img').css('opacity', '1');
//console.info('no hover')
}
);.flexCont{
display: flex;
display: -ms-flex;
display: -webkit-flex;
flex-direction: row;
}
.flexContO{
display: flex;
display: -ms-flex;
display: -webkit-flex;
flex-direction: row;
}
.flexContO>div{
width:50%;
}
.flexCont .flexItem{
flex: 1 1 25%;
}
.flexItem{
display: flex;
flex-direction: column;
}
.overlay{
background-color: rgba(0,0,0,0.5); /*dim the background*/
position: relative;
z-index:999!important;
}
.flexItemV{
display: flex;
flex-direction: column;
justify-content: space-between;
}
.flexItemO{
display: flex;
flex-direction: row;
}
.flexItemO>div{
width:50%;
}
.flexItem1{
height:375px;
justify-content: center;
align-items: center;
display: flex;
flex-direction: column;
text-align:center;
padding:20px;
}
.flexItem2>img{
width: 100%;
z-index:99!important;
}<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class = "flexCont">
<div class = "flexItem">
<div class = "flexItem1">
<p>Place</p>
<h3>u & d 4</h3>
<a href = "http//link/u-d/">sometext bla bla </a><br><a href = "http//link/u-d/"><i class = "x-icon x-icon-arrow-right" data-x-icon = "" aria-hidden = "true"></i></a>
</div>
<div class = "flexItem2"><img src = "https://meme.xyz/uploads/posts/t/l-1229-the-two-states-of-every-programmer.jpg"></div>
</div>
<div class = "flexItem">
<div class = "flexItem2"><img src = "https://meme.xyz/uploads/posts/t/l-1229-the-two-states-of-every-programmer.jpg"></div>
<div class = "flexItem1">
<p>Place</p>
<h3>d & u 3</h3>
<a href = "http//link/d-u/">sometext bla bla </a><br><a href = "http//link/d-u/"><i class = "x-icon x-icon-arrow-right" data-x-icon = "" aria-hidden = "true"></i></a>
</div>
</div>
<div class = "flexItem">
<div class = "flexItem1">
<p>Place</p>
<h3>d & u 2</h3>
<a href = "http//link/matrimonio-test2/">sometext bla bla </a><br><a href = "http//link/matrimonio-test2/"><i class = "x-icon x-icon-arrow-right" data-x-icon = "" aria-hidden = "true"></i></a>
</div>
<div class = "flexItem2"><img src = "https://meme.xyz/uploads/posts/t/l-1229-the-two-states-of-every-programmer.jpg"></div>
</div>
<div class = "flexItem">
<div class = "flexItem2"><img src = "https://meme.xyz/uploads/posts/t/l-1229-the-two-states-of-every-programmer.jpg"></div>
<div class = "flexItem1">
<p>Place</p>
<h3>u & d 1</h3>
<a href = "http//link/matrimonio-test/">sometext bla bla </a><br><a href = "http//link/matrimonio-test/"><i class = "x-icon x-icon-arrow-right" data-x-icon = "" aria-hidden = "true"></i></a>
</div>
</div>
</div>Здесь нет никакого фактического «наложения», вы просто устанавливаете фон элемента .flexItemсам. Так что, конечно, фоновый цвет, который вы устанавливаете, не «накладывает» изображение, потому что изображение - это содержание элемента, а фон, ну, находится сзади ...
Вместо этого вы можете просто использовать псевдоэлемент, расположенный над остальной частью элемента:
$('.flexItem').hover(
function() {
$(this).addClass( 'overlay' );
console.info('hover')
}, function() {
$(this).removeClass( 'overlay' );
console.info('no hover')
}
);.flexCont{
display: flex;
display: -ms-flex;
display: -webkit-flex;
flex-direction: row;
}
.flexContO{
display: flex;
display: -ms-flex;
display: -webkit-flex;
flex-direction: row;
}
.flexContO>div{
width:50%;
}
.flexCont .flexItem{
flex: 1 1 25%;
}
.flexItem{
display: flex;
flex-direction: column;
position: relative;
}
.overlay::after{
content: "";
position: absolute;
top:0; bottom:0; left:0; right:0;
background-color: rgba(0,0,0,.5); /*dim the background*/
}
.flexItemV{
display: flex;
flex-direction: column;
justify-content: space-between;
}
.flexItemO{
display: flex;
flex-direction: row;
}
.flexItemO>div{
width:50%;
}
.flexItem1{
height:375px;
justify-content: center;
align-items: center;
display: flex;
flex-direction: column;
text-align:center;
padding:20px;
}
.flexItem2>img{
width: 100%;z-index:99!important;
}
.flexItemV1{
}
.flexItemV2{
}
.<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class = "flexCont">
<div class = "flexItem">
<div class = "flexItem1">
<p>Place</p>
<h3>u & d 4</h3>
<a href = "http//link/u-d/">sometext bla bla </a><br><a href = "http//link/u-d/"><i class = "x-icon x-icon-arrow-right" data-x-icon = "" aria-hidden = "true"></i></a>
</div>
<div class = "flexItem2"><img src = "https://meme.xyz/uploads/posts/t/l-1229-the-two-states-of-every-programmer.jpg"></div>
</div>
<div class = "flexItem">
<div class = "flexItem2"><img src = "https://meme.xyz/uploads/posts/t/l-1229-the-two-states-of-every-programmer.jpg"></div>
<div class = "flexItem1">
<p>Place</p>
<h3>d & u 3</h3>
<a href = "http//link/d-u/">sometext bla bla </a><br><a href = "http//link/d-u/"><i class = "x-icon x-icon-arrow-right" data-x-icon = "" aria-hidden = "true"></i></a>
</div>
</div>
<div class = "flexItem">
<div class = "flexItem1">
<p>Place</p>
<h3>d & u 2</h3>
<a href = "http//link/matrimonio-test2/">sometext bla bla </a><br><a href = "http//link/matrimonio-test2/"><i class = "x-icon x-icon-arrow-right" data-x-icon = "" aria-hidden = "true"></i></a>
</div>
<div class = "flexItem2"><img src = "https://meme.xyz/uploads/posts/t/l-1229-the-two-states-of-every-programmer.jpg"></div>
</div>
<div class = "flexItem">
<div class = "flexItem2"><img src = "https://meme.xyz/uploads/posts/t/l-1229-the-two-states-of-every-programmer.jpg"></div>
<div class = "flexItem1">
<p>Place</p>
<h3>u & d 1</h3>
<a href = "http//link/matrimonio-test/">sometext bla bla </a><br><a href = "http//link/matrimonio-test/"><i class = "x-icon x-icon-arrow-right" data-x-icon = "" aria-hidden = "true"></i></a>
</div>
</div>
</div>(И если вам нужно только манипулировать самим элементом и всем, что внутри него, для этого вообще не потребуется JavaScript, но это можно сделать исключительно в CSS.)
Вам нужно определить оверлей как отдельный элемент внутри .flexItem.
$('.flexItem').hover(
function() {
$(this).find('.overlay').show();
},
function() {
$(this).find('.overlay').hide();
}
);.flexCont {
display: flex;
display: -ms-flex;
display: -webkit-flex;
flex-direction: row;
}
.flexContO {
display: flex;
display: -ms-flex;
display: -webkit-flex;
flex-direction: row;
}
.flexContO>div {
width: 50%;
}
.flexCont .flexItem {
flex: 1 1 25%;
}
.flexItem {
display: flex;
flex-direction: column;
position: relative; /* Added */
}
.overlay {
background-color: rgba(0, 0, 0, 0.5);
position: absolute; /* Changed from relative */
top: 0; /* Added */
left: 0; /* Added */
width: 100%; /* Added */
height: 100%; /* Added */
display: none; /* Added */
}
.flexItemV {
display: flex;
flex-direction: column;
justify-content: space-between;
}
.flexItemO {
display: flex;
flex-direction: row;
}
.flexItemO>div {
width: 50%;
}
.flexItem1 {
height: 375px;
justify-content: center;
align-items: center;
display: flex;
flex-direction: column;
text-align: center;
padding: 20px;
}
.flexItem2>img {
width: 100%;
}
.flexItemV1 {}
.flexItemV2 {}
.<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class = "flexCont">
<div class = "flexItem">
<div class = "flexItem1">
<p>Place</p>
<h3>u & d 4</h3>
<a href = "http//link/u-d/">sometext bla bla </a><br><a href = "http//link/u-d/"><i class = "x-icon x-icon-arrow-right" data-x-icon = "" aria-hidden = "true"></i></a>
</div>
<div class = "flexItem2"><img src = "https://meme.xyz/uploads/posts/t/l-1229-the-two-states-of-every-programmer.jpg"></div>
<div class = "overlay"></div>
</div>
<div class = "flexItem">
<div class = "flexItem2"><img src = "https://meme.xyz/uploads/posts/t/l-1229-the-two-states-of-every-programmer.jpg"></div>
<div class = "flexItem1">
<p>Place</p>
<h3>d & u 3</h3>
<a href = "http//link/d-u/">sometext bla bla </a><br><a href = "http//link/d-u/"><i class = "x-icon x-icon-arrow-right" data-x-icon = "" aria-hidden = "true"></i></a>
</div>
<div class = "overlay"></div>
</div>
<div class = "flexItem">
<div class = "flexItem1">
<p>Place</p>
<h3>d & u 2</h3>
<a href = "http//link/matrimonio-test2/">sometext bla bla </a><br><a href = "http//link/matrimonio-test2/"><i class = "x-icon x-icon-arrow-right" data-x-icon = "" aria-hidden = "true"></i></a>
</div>
<div class = "flexItem2"><img src = "https://meme.xyz/uploads/posts/t/l-1229-the-two-states-of-every-programmer.jpg"></div>
<div class = "overlay"></div>
</div>
<div class = "flexItem">
<div class = "flexItem2"><img src = "https://meme.xyz/uploads/posts/t/l-1229-the-two-states-of-every-programmer.jpg"></div>
<div class = "flexItem1">
<p>Place</p>
<h3>u & d 1</h3>
<a href = "http//link/matrimonio-test/">sometext bla bla </a><br><a href = "http//link/matrimonio-test/"><i class = "x-icon x-icon-arrow-right" data-x-icon = "" aria-hidden = "true"></i></a>
</div>
<div class = "overlay"></div>
</div>
</div>Во всех других решениях ссылка не является кликабельной, вот полное решение, в котором серый диммер появляется поверх изображения и дает фактический эффект, который вы точно хотели.
$(".flexItem").mouseover(function(){
$(".overlay-items").css("height", $(".flexItem").outerHeight());
});.flexCont{
display: flex;
display: -ms-flex;
display: -webkit-flex;
flex-direction: row;
}
.flexContO{
display: flex;
display: -ms-flex;
display: -webkit-flex;
flex-direction: row;
}
.flexContO>div{
width:50%;
}
.flexCont .flexItem{
flex: 1 1 25%;
}
.flexItem{
display: flex;
flex-direction: column;
position: relative;
}
.overlay-items{
background-color: rgba(0,0,0,0.5); /*dim the background*/
position: relative;
z-index:999!important;
display: none;
width: 100%;
position: absolute;
}
.flexItemV{
display: flex;
flex-direction: column;
justify-content: space-between;
}
.flexItemO{
display: flex;
flex-direction: row;
}
.flexItemO>div{
width:50%;
}
.flexItem1{
height:375px;
justify-content: center;
align-items: center;
display: flex;
flex-direction: column;
text-align:center;
padding:20px;
z-index: 9999999;
}
.flexItem2>img{
width: 100%;z-index:99!important;
}
.flexItem:hover > .overlay-items {
display: block;
}<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class = "flexCont">
<div class = "flexItem">
<div class = "overlay-items"></div>
<div class = "flexItem1">
<p>Place</p>
<h3>u & d 4</h3>
<a href = "http//link/u-d/">sometext bla bla </a><br><a href = "http//link/u-d/"><i class = "x-icon x-icon-arrow-right" data-x-icon = "" aria-hidden = "true"></i></a>
</div>
<div class = "flexItem2"><img src = "https://meme.xyz/uploads/posts/t/l-1229-the-two-states-of-every-programmer.jpg"></div>
</div>
<div class = "flexItem">
<div class = "overlay-items"></div>
<div class = "flexItem2"><img src = "https://meme.xyz/uploads/posts/t/l-1229-the-two-states-of-every-programmer.jpg"></div>
<div class = "flexItem1">
<p>Place</p>
<h3>d & u 3</h3>
<a href = "http//link/d-u/">sometext bla bla </a><br><a href = "http//link/d-u/"><i class = "x-icon x-icon-arrow-right" data-x-icon = "" aria-hidden = "true"></i></a>
</div>
</div>
<div class = "flexItem">
<div class = "overlay-items"></div>
<div class = "flexItem1">
<p>Place</p>
<h3>d & u 2</h3>
<a href = "http//link/matrimonio-test2/">sometext bla bla </a><br><a href = "http//link/matrimonio-test2/"><i class = "x-icon x-icon-arrow-right" data-x-icon = "" aria-hidden = "true"></i></a>
</div>
<div class = "flexItem2"><img src = "https://meme.xyz/uploads/posts/t/l-1229-the-two-states-of-every-programmer.jpg"></div>
</div>
<div class = "flexItem">
<div class = "overlay-items"></div>
<div class = "flexItem2"><img src = "https://meme.xyz/uploads/posts/t/l-1229-the-two-states-of-every-programmer.jpg"></div>
<div class = "flexItem1">
<p>Place</p>
<h3>u & d 1</h3>
<a href = "http//link/matrimonio-test/">sometext bla bla </a><br><a href = "http//link/matrimonio-test/"><i class = "x-icon x-icon-arrow-right" data-x-icon = "" aria-hidden = "true"></i></a>
</div>
</div>
</div>
Вы можете добавить
z-indexв тег<img>и класс.overlay.