在css中是否存在等同于background-image的前景?

Him*_*ors 45 html css foreground css3

我想为网页上的元素添加一些亮点.如果我不必在页面中添加额外的html,我更愿意.我希望图像出现在元素的前面而不是后面.最好的方法是什么?

Rob*_*b W 67

要获得没有额外HTML代码的"前景图像",可以使用伪元素(::before/ :before)和CSSpointer-events.需要最后一个属性,以便用户可以实际点击图层"就好像它不存在".

这是一个例子(使用alpha通道为50%的颜色,这样你就可以看到真正的元素实际上可以被聚焦):http://jsfiddle.net/JxNdT/

?<div id="cont">
Test<br>
<input type="text" placeholder="edit">
</div>??????????????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)
?#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;
}
?
Run Code Online (Sandbox Code Playgroud)

PS.我选择了::before伪元素,因为这自然会导致正确的定位.如果我选择::after,那么我必须添加position:relative;到真实的element(#cont)和top:0;left:0;伪元素(::after).


PPS.要在没有固定大小的元素上获得前景效果,需要一个额外的元素.这个包装元素需要position:relative;display:inline-block;样式.设置widthheight伪元件的100%,和伪元件将伸展到包装元素的宽度和高度.演示:http://jsfiddle.net/JxNdT/1/.

  • @RobW你不需要一个包装器,你可以拉伸绝对定位的`:after`伪元素,*trbl*属性都设置为0; 看到更新的小提琴:http://jsfiddle.net/JxNdT/2/ (4认同)
  • @KristofferNolgren你需要一个包含`position:relative;`(和`display:inline-block;`)的包装器,然后在伪元素上使用`100%`表示`width`和`height`.伪元素将延伸到包装元素的宽度和高度.演示:http://jsfiddle.net/JxNdT/1/ (2认同)