I want to add some shine to an element on webpage. I would prefer if I don't have to add additional html to the page. I want the image to appear in front of the element rather than behind. What's the best way to do this?
To achieve a "foreground image" without extra HTML code, you can use a pseudo-element (::before
/ :before
) plus the CSS pointer-events
. The last property is needed so that the user can actually click through the layer "as if it did not exists".
Here's an example (using a color whose alpha channel is 50% so that you can see that the real elements can actually be focused): http://jsfiddle.net/JxNdT/
<div id="cont">
Test<br>
<input type="text" placeholder="edit">
</div>
#cont {
width: 200px;
height: 200px;
border: 1px solid #aaa; /*To show the boundaries of the element*/
}
#cont:before {
position: absolute;
content: '';
background: rgba(0,0,0, 0.5); /*partially transparent image*/
width: 200px;
height: 200px;
pointer-events: none;
}
PS. I picked the ::before
pseudo-element, because that naturally leads to the correct positioning. If I pick ::after
, then I have to add position:relative;
to the real element (#cont
), and top:0;left:0;
to the pseudo-element (::after
).
PPS. To get the foreground effect on elements without a fixed size, an additional element is needed. This wrapper element requires the position:relative;display:inline-block;
styles. Set the width
and height
of the pseudo-element to 100%
, and the pseudo-element will stretch to the width and height of the wrapper element. Demo: http://jsfiddle.net/JxNdT/1/.