Html 背景图像上的透明颜色覆盖覆盖了表单字段

Html 背景图像上的透明颜色覆盖覆盖了表单字段,html,css,Html,Css,我正在玩透明的颜色覆盖的表单字段,也有指定的背景图像顶部 我遇到的问题是,颜色覆盖或背景图像位于表单顶部,并阻止对表单字段的访问 .frame { background: url(http://lorempixel.com/g/400/200) no-repeat; width: 200px; padding: 50px 80px; position: relative; } .frame:after { background: rgba(0,0,0,0.

我正在玩透明的颜色覆盖的表单字段,也有指定的背景图像顶部

我遇到的问题是,颜色覆盖或背景图像位于表单顶部,并阻止对表单字段的访问

.frame {
    background: url(http://lorempixel.com/g/400/200) no-repeat;
    width: 200px;
    padding: 50px 80px;
    position: relative;
}
.frame:after {
    background: rgba(0,0,0,0.3);
    content: '';
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    position: absolute;
}
我在这里遇到过类似的问题,关于将
背景图像
背景颜色
与透明度结合使用,但我想我的场景与使用表单字段时有点不同


如果您感兴趣,这是我的。

因为
.frame:after
是一个新元素(尽管它没有显示在HTML代码中),您实际上是在整个表单上放置了一个块级元素,它包含表单的所有单击事件。为了解决这个问题,您可以使用CSS属性,特别是将其设置为
none
。这将有效地指示所有单击通过元素并影响其下方的任何内容

.frame:after {
    background: rgba(0,0,0,0.3);
    content: '';
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    position: absolute;

    //add this!
    pointer-events: none;
}
编辑 如果您担心浏览器兼容性,只需切换应用背景图像的顺序-在伪元素上设置背景图像,并将其
z-index
设置为
-1
,并为框架提供透明的黑色背景

.frame {
    background: rgba(0,0,0,0.3);    
    width: 200px;
    padding: 50px 80px;
    position: relative;
}
.frame:after {
    background: url(http://lorempixel.com/g/400/200) no-repeat;
    content: '';
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    position: absolute;
    z-index: -1; /* put it behind the frame */
}

但是,正如所指出的,如果您的整个网站出于设计目的使用了
z-index
,并且可能需要调整一些其他
z-index
值才能正常工作,这可能会让您感到悲伤。

因为
.frame:after
是一个新元素(尽管它没有在HTML代码中显示),您实际上是在整个表单上放置了一个块级元素,它包含表单的所有单击事件。为了解决这个问题,您可以使用CSS属性,特别是将其设置为
none
。这将有效地指示所有单击通过元素并影响其下方的任何内容

.frame:after {
    background: rgba(0,0,0,0.3);
    content: '';
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    position: absolute;

    //add this!
    pointer-events: none;
}
编辑 如果您担心浏览器兼容性,只需切换应用背景图像的顺序-在伪元素上设置背景图像,并将其
z-index
设置为
-1
,并为框架提供透明的黑色背景

.frame {
    background: rgba(0,0,0,0.3);    
    width: 200px;
    padding: 50px 80px;
    position: relative;
}
.frame:after {
    background: url(http://lorempixel.com/g/400/200) no-repeat;
    content: '';
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    position: absolute;
    z-index: -1; /* put it behind the frame */
}

但是,正如所指出的,如果您的整个网站出于设计目的使用了
z-index
,并且可能需要调整一些其他
z-index
值才能正常工作,这可能会让您感到悲伤。

很明显,使用
:after
在背景上绘制alpha将失去预期效果,因为它不仅影响背景,而且影响整个元素,包括其中的一切

但是你总是可以用老式的方式来做,有多个层次,每个层次都有自己的背景。可以使用图像作为背景的元素,在其中创建一个具有透明背景的新元素,然后将字段放入其中

这就是你所拥有的:


很明显,使用
:after
在背景上绘制alpha将失去所需的效果,因为它不会单独影响背景,而是影响整个元素及其内部的所有内容

但是你总是可以用老式的方式来做,有多个层次,每个层次都有自己的背景。可以使用图像作为背景的元素,在其中创建一个具有透明背景的新元素,然后将字段放入其中

这就是你所拥有的:


浏览器兼容性是一个问题。谢谢你的意见。只是想让你们知道,我并没有否决投票……恰恰相反,@Nightfirecat,那个就是我——我确实解释过。加上你投了我的反对票,我不知道当每一个符合标准的浏览器(不包括仍在追赶的IE)都支持它的时候,这怎么会被认为几乎不受支持。另外,如果你看一下我所做的编辑,我提供了第二个完全正确的解决方案。如果这仍然值得投反对票,我不知道你对什么印象深刻。我对你的答案投反对票只是因为在两次尝试后,你还没有创建一个正确的例子。浏览器兼容性是一个问题。谢谢你的意见。只是想让你们知道,我并没有否决投票……恰恰相反,@Nightfirecat,那个就是我——我确实解释过。加上你投了我的反对票,我不知道当每一个符合标准的浏览器(不包括仍在追赶的IE)都支持它的时候,这怎么会被认为几乎不受支持。另外,如果你看一下我所做的编辑,我提供了第二个完全正确的解决方案。如果这仍然值得投反对票,我不知道你对什么印象深刻。我对你的答案投反对票只是因为在两次尝试之后,你还没有创造出一个正确的例子。非常感谢。听起来是个不错的解决方案。顺便问一下,alpha属性的兼容性如何?好吧,我只能说它在IE 10中工作,所以如果IE支持它,几乎任何东西都是。。其实还不算太坏。非常感谢。听起来是个不错的解决方案。顺便问一下,alpha属性的兼容性如何?好吧,我只能说它在IE 10中工作,所以如果IE支持它,几乎任何东西都是。。其实不算太坏。