Is there a foreground equivalent to background-image in css?

后端 未结 4 1288
一生所求
一生所求 2020-12-13 17:02

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 rat

相关标签:
4条回答
  • 2020-12-13 17:38

    You can use this css

    #yourImage
    {
    z-index: 1; 
    }
    

    NOTE

    Set the z-index to index greater the the z-index of the element over which you are putting the image.

    If you have not specified any z-index then 1 would do the work.

    You can also set z-index to -1,in that case the image would always be at background!

    0 讨论(0)
  • 2020-12-13 17:39

    A neat solution: box-sizing + padding-left, see more at css-tricks

    Somewhere in your HTML:

    <img id="test_replacement" src="test.png" alt="test" />
    

    The CSS for replacing the image (on hovering)

    #test_replacement {
        width: 200px; //must be the size of your image (and the replacement one)
        height: 200px; //idem
        display: block;
    }
    #test_replacement:hover {
        box-sizing: border-box;
        background-image: url('somewhere/other_image.png');
        padding-left: 200px; //at least the size of the width
    }
    
    0 讨论(0)
  • 2020-12-13 17:53

    If you need a white-transparent foreground

    This is for future visitors like me who are considering adding a white-transparent foreground to an element to communicate that it's hidden / disabled for instance. You can often achieve your goal by simply lowering the opacity below 1:

    .is-hidden {
        opacity: 0.5;
    }
    visible
    <span class="is-hidden">hidden</span>
    visible

    0 讨论(0)
  • 2020-12-13 17:54

    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/.

    0 讨论(0)
提交回复
热议问题