JSFiddle - React, Tailwind, and code Playground
HTML
<div id="parent">
<div class="image">
<img src="http://placekitten.com/200/200" />
<div class="overlay">Description to be displayed on hover..</div>
</div>
<div class="image">
<img src="http://placekitten.com/200/200" />
<div class="overlay">Description to be displayed on hover..</div>
</div>
<div class="image">
<img src="http://placekitten.com/200/200" />
<div class="overlay">Description to be displayed on hover..</div>
</div>
<div class="image">
<img src="http://placekitten.com/200/200" />
<div class="overlay">Description to be displayed on hover..</div>
</div>
<div class="image">
<img src="http://placekitten.com/200/200" />
<div class="overlay">Description to be displayed on hover..</div>
</div>
<div class="image">
<img src="http://placekitten.com/200/200" />
<div class="overlay">Description to be displayed on hover..</div>
</div>
<div class="image">
<img src="http://placekitten.com/200/200" />
<div class="overlay">Description to be displayed on hover..</div>
</div>
<div class="image">
<img src="http://placekitten.com/200/200" />
<div class="overlay">Description to be displayed on hover..</div>
</div>
<div class="image">
<img src="http://placekitten.com/200/200" />
<div class="overlay">Description to be displayed on hover..</div>
</div>
</div>
CSS
.image {
position:relative;
display:inline-block;
margin:10px;
transition:all 2s;
-webkit-transition:all 2s;
-moz-transition:all 2s;
}
.overlay {
opacity:0;
position:absolute;
width:100%;
height:100%;
background:rgba(0, 0, 0, .5);
border:10px solid red;
top:0;
left:0;
display:inline-block;
-webkit-box-sizing:border-box;
-moz-box-sizing:border-box;
box-sizing:border-box;
text-align:center;
color:white;
padding:12px;
font-size:20px;
transition:opacity 2s;
-webkit-transition:opacity 2s;
-moz-transition:opacity 2s;
}
.image:hover .overlay {
opacity:1;
}
img {
vertical-align:top;
}
#parent {
display:inline-block;
}
#parent:hover > .image {
opacity:1;
}
#parent:hover > .image:not(:hover) {
opacity:.3;
}