我有一个DIV,我想根据鼠标是否悬停在上面来改变背景颜色的透明度。
我知道你可以使用background: rgba(54, 25, 25, .5)
等方法,但我想单独设置颜色。有没有办法只修改透明度而不修改颜色。
我可以使用opacity: 0.3
等方法,但这会影响整个DIV,我只想影响背景颜色。
我有一个DIV,我想根据鼠标是否悬停在上面来改变背景颜色的透明度。
我知道你可以使用background: rgba(54, 25, 25, .5)
等方法,但我想单独设置颜色。有没有办法只修改透明度而不修改颜色。
我可以使用opacity: 0.3
等方法,但这会影响整个DIV,我只想影响背景颜色。
HTML/CSS本身没有这个选项,但既然您在JavaScript中访问/设置颜色,那么最好添加自己的函数来处理它。
以下是一个示例:
<script type="text/javascript">
function RGBA(red,green,blue,alpha) {
this.red = red;
this.green = green;
this.blue = blue;
this.alpha = alpha;
this.getCSS = function() {
return "rgba("+this.red+","+this.green+","+this.blue+","+this.alpha+")";
}
}
// store a copy of the color
var bgColor = new RGBA(255,0,0,0.5);
function setBgOpacity(elem, opac) {
bgColor.alpha = opac;
elem.style.backgroundColor = bgColor.getCSS();
}
</script>
onmouseover
事件来改变背景颜色的不透明度:<div onmouseover="setBgOpacity(this, '0.3');"
onmousout="setBgOpacity(this, '0.5');">Put your mouse over me</div>
div
并设置该 div
的透明度,即:<div id="container">
<div id="background"></div>
<div id="content">
<p>Lorum ipsum...</p>
</div>
</div>
#container { overflow:hidden; position:relative; }
#background {
position:absolute;
top:0;
left:0;
width:100%;
height:100%;
background:#FF0000;
}
#background:hover { opacity:0.3; }
#content { position:relative; z-index:10; }
RGBa和Opacity中的Alpha值有所不同。Opacity会影响所有子元素,而Alpha则不会。
您需要读取当前的颜色值,然后将其重新声明为具有新Alpha值的RGBa格式。您可能需要将当前的十六进制颜色值转换为十进制三元组来实现这一点。
:before
或:after
。.container {
position: relative;
&:before {
content: '';
position: absolute;
width: 100%;
height: 100%;
background-color: #000;
opacity: 1;
z-index: -1;
}
&:hover {
&:before {
opacity: 0.5;
}
}
.content {
z-index: 1;
}
}
.container
上时,只有:before
的不透明度受到影响,而不是内容本身。如果您依赖RGBA来修改背景颜色的不透明度,那么,没有办法将其与颜色本身分开设置。您必须为正常状态和悬停状态分别声明显式的RGBA值。
setBgOpacity
重命名为setBgAlpha
。 - Dave Everitt