实现透明背景但背景上元素不透明

在PC端遇到了透明背景和透明图片的问题,其实以前也遇到过,只是没有总结起来,就忘记了,这次又撞墙了,必须记录下来,一来给自己做个小总结,提个醒,最近变懒了,再不努力就要倒挂了;二来是因为在网络上并没有完整的解决方案,希望可以帮助到遇到此类问题的朋友,今天主要讲解背景透明的解决方案,共勉~

重点内容入口:

测试浏览器:

VirtIE6、虚拟机下XP的IE6、纯正IE8、纯正IE8下QQ浏览器、WIN7下的IE 9.0.32 、WIN8下的IE 10.0.21、chrome 38.0 、QQ浏览器8.0-IE10.0.5、safari 5.1.7、opera 25.0

如何实现背景透明,文字不透明,兼容所有浏览器?

我们平时所说的调整透明度,其实在样式中是调整不透明度,如下图所示例:

打开ps,在图层面板上,可以看到设置图层整理不透明度的菜单,从 0% (完全透明)到 100%(完全不透明)。

实现透明的css方法通常有以下3种方式,以下是不透明度都为80%的写法

  • css3的opacity:x,x 的取值从 0 到 1,如opacity: 0.8
  • css3的rgba(red, green, blue, alpha),alpha的取值从 0 到 1,如rgba(255,255,255,0.8)
  • IE专属滤镜 filter:Alpha(opacity=x),x 的取值从 0 到 100,如filter:Alpha(opacity=80)

css3的opacity

兼容性:IE6、7、8不支持,IE9及以上版本和标准浏览器都支持

使用说明:设置opacity元素的所有后代元素会随着一起具有透明性,一般用于调整图片或者模块的整体不透明度

复制代码
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>opacity</title>
<style>
*{
    padding: 0;
    margin: 0;
}
body{
    padding: 50px;
    background: url(img/bg.png) 0 0 repeat;
}
.demo{
  padding: 25px;
  background-color:#000000;
  opacity: 0.2;
}
.demo p{
    color: #FFFFFF;
}
</style>
</head>
<body>    

<div class="demo">
    <p>背景透明,文字也透明</p>
</div>

</html>
复制代码

使用opacity后整个模块都透明了,展现如下:

那么使用opacity实现《背景透明,文字不透明》是不可取的。

css3的rgba

兼容性:IE6、7、8不支持,IE9及以上版本和标准浏览器都支持

使用说明:设置颜色的不透明度,一般用于调整background-color、color、box-shadow等的不透明度。

复制代码
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>css3的rgba</title>
<style>
*{
    padding: 0;
    margin: 0;
}
body{
    padding: 50px;
    background: url(img/bg.png) 0 0 repeat;
}
.demo{
  padding: 25px;
  background-color:#000000;/* IE6和部分IE7内核的浏览器(如QQ浏览器)下颜色被覆盖 */
  background-color:rgba(0,0,0,0.2); /* IE6和部分IE7内核的浏览器(如QQ浏览器)会读懂,但解析为透明 */
}
.demo p{
    color: #FFFFFF;
}
</style>
</head>
<body>    

<div class="demo">
    <p>背景透明,文字也透明</p>
</div>

</html>
复制代码

在background-color中使用rgba,标准浏览器中,背景透明,文字不透明,展现如下:

很奇葩的是,IE6和部分IE7内核的浏览器(如QQ浏览器)会读懂rgba,解析后颜色为透明,其实应该是null

那么使用opacity实现背景透明,文字不透明是可取的。

IE专属滤镜 filter:Alpha(opacity=x)

使用说明:IE浏览器专属,问题多多,本文以设置背景透明为例子,如下:

  1. 仅支持IE6、7、8、9,在IE10版本被废除
  2. 在IE6、7中,需要激活IE的haslayout属性(如:*zoom:1或者*overflow:hidden),让它读懂filter:Alpha
  3. 在IE6、7、8中,设置了filter:Alpha的元素,父元素设置position:static(默认属性),其子元素为相对定位,可让子元素不透明
复制代码
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>opacity</title>
<style>
*{
    padding: 0;
    margin: 0;
}
body{
    padding: 50px;
    background: url(img/bg.png) 0 0 repeat;
}
.demo{
  padding: 25px;
  background: #000000;
  filter:Alpha(opacity=50);/* 只支持IE6、7、8、9 */
  position:static; /* IE6、7、8只能设置position:static(默认属性) ,否则会导致子元素继承Alpha值 */
  *zoom:1; /* 激活IE6、7的haslayout属性,让它读懂Alpha */
}
.demo p{
    color: #FFFFFF;
    position: relative;/* 设置子元素为相对定位,可让子元素不继承Alpha值,保证字体颜色不透明 */
}      

</style>
</head>
<body>    

<div class="demo">
    <p>背景透明,文字不透明</p>
</div>
复制代码

全兼容的方案

上以上3点分析可知,设置透明背景文字不透明,可采用的属性有rgba和IE的专属滤镜filter:Alpha,其兼容性如下图所示:

针对IE6、7、8浏览器,我们可以采用fiter:Alpha,针对标准浏览器我们采用rgba,那么问题来了,IE9浏览器2个属性都支持,一起使用会重复降低不透明度...

那么,如何只对IE6、7、8使用fiter:Alpha如何实现呢?2年前写过《CSS hack整理》一文,最新我也做了点更新,里面有IE的相关hack,找到只支持IE 6、7、8的方案,如下:

/* 只支持IE6、7、8 */

@media \0screen\,screen\9 {...}

ok,所有问题都解决了,全部代码如下:

复制代码
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>背景透明,文字不透明</title>
<style>
*{
    padding: 0;
    margin: 0;
}

body{
  padding: 50px;
  background: url(img/bg.png) 0 0 repeat;
}

.demo{
  padding: 25px;
  background-color: rgba(0,0,0,0.5);/* IE9、标准浏览器、IE6和部分IE7内核的浏览器(如QQ浏览器)会读懂 */
}
.demo p{
  color: #FFFFFF;
}
@media \0screen\,screen\9 {/* 只支持IE6、7、8 */
  .demo{
    background-color:#000000;
    filter:Alpha(opacity=50);
    position:static; /* IE6、7、8只能设置position:static(默认属性) ,否则会导致子元素继承Alpha值 */
    *zoom:1; /* 激活IE6、7的haslayout属性,让它读懂Alpha */
  }
  .demo p{
    position: relative;/* 设置子元素为相对定位,可让子元素不继承Alpha值 */
  }  
}

</style>
</head>
<body>    

<div class="demo">
    <p>背景透明,文字不透明</p>
</div>

</html>
复制代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要实现Vue中背景图片半透明,其他元素透明的效果,可以通过以下步骤: 1. 首先,在Vue组件中定义一个样式对象,包含背景图片的URL和透明度属性。例如: ``` data() { return { backgroundImageStyle: { backgroundImage: 'url(path/to/image.jpg)', opacity: '0.5' } } } ``` 这里的背景图片URL可以根据实际情况进行修改,透明度值可根据需要进行调整。 2. 在模板中,使用`v-bind`指令将样式对象绑定到需要设置背景图片的元素上。例如: ``` <div v-bind:style="backgroundImageStyle"> <!-- 其他元素 --> </div> ``` 这样就将背景图片和透明度绑定到指定的元素上了。 3. 如果希望其他元素透明,可以在CSS样式中设置相应的不透明度。例如: ``` .div-class { background-color: rgba(255, 255, 255, 1); /* 设置背景颜色,不透明度为1 */ /* 其他样式设置 */ } ``` 这里通过设置`rgba`颜色的alpha通道值为1,确保背景色不透明。 通过以上步骤,就可以实现Vue中背景图片半透明,其他元素透明的效果了。根据实际需要,可以灵活调整背景图片URL和透明度值,以及其他元素的样式设置。 ### 回答2: 在vue中实现背景图片半透明,其他元素透明的效果可以使用CSS的rgba颜色属性和z-index属性来实现。 首先,我们在vue组件的style标签中设置背景图片,并将其作为背景图层的底层: ```css <style> .container { position: relative; background-image: url('背景图片路径'); background-size: cover; background-repeat: no-repeat; } </style> ``` 接下来,我们给背景图层添加半透明效果。可以通过在rgba颜色属性值中设置最后一位alpha值来控制透明度,范围为0到1,其中0表示完全透明,1表示完全不透明。这里我们设置为0.5表示半透明: ```css <style> .container { position: relative; background-image: url('背景图片路径'); background-size: cover; background-repeat: no-repeat; background-color: rgba(0, 0, 0, 0.5); /* 添加半透明效果 */ } </style> ``` 最后,我们给其他元素设置不透明的样式,并通过z-index属性调整它们在图层中的层级位置,让它们覆盖在背景图层之上: ```css <style> .container { position: relative; background-image: url('背景图片路径'); background-size: cover; background-repeat: no-repeat; background-color: rgba(0, 0, 0, 0.5); /* 添加半透明效果 */ } .content { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); background-color: #fff; /* 设置不透明背景颜色,例如白色 */ padding: 20px; z-index: 1; /* 调整层级位置,让其在图层上方 */ } </style> <template> <div class="container"> <div class="content"> <!-- 其他内容 --> </div> </div> </template> ``` 通过以上步骤,我们可以实现背景图片半透明,其他元素透明的效果。 ### 回答3: 可以通过CSS的opacity属性来实现背景图片半透明的效果。在Vue中,可以在对应的组件的样式中进行设置。 首先,假设要设置的组件的类名为"my-component",可以在style标签中添加如下的CSS样式: ```css .my-component { background-image: url('背景图片的路径'); background-size: cover; /* 调整背景图片的尺寸适应容器 */ opacity: 0.5; /* 背景图片的透明度设置为0.5 */ } .my-component > * { opacity: 1; /* 其他元素设置为不透明透明度为1 */ } ``` 上述样式将会将组件的背景图片设置为半透明,通过调整opacity属性的值来控制透明度的程度。同时,通过选择器`.my-component > *`,来选择所有直接子元素,并将其设置为完全不透明,即透明度为1。 在Vue组件中,将以上样式应用到我们的组件即可: ```html <template> <div class="my-component"> <!-- 这里放置组件的内容 --> </div> </template> <style> .my-component { background-image: url('背景图片的路径'); background-size: cover; opacity: 0.5; } .my-component > * { opacity: 1; } </style> ``` 以上的代码将会使用半透明背景图片作为组件的背景,其他元素将保持不透明。你可以根据实际情况,调整其中的样式属性来达到你想要的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值