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

it2022-05-08  6

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

我们平时所说的调整透明度,其实在样式中是调整不透明度

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

 

css3的opacity:x,x 的取值从 0 到 1,如opacity: 0.8css3的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及以上版本和标准浏览器都支持

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 <! 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后整个模块都透明了

css3的rgba:

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

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 <! 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浏览器专属,问题多多,本文以设置背景透明为例子,如下:

仅支持IE6、7、8、9,在IE10版本被废除在IE6、7中,需要激活IE的haslayout属性(如:*zoom:1或者*overflow:hidden),让它读懂filter:Alpha在IE6、7、8中,设置了filter:Alpha的元素,父元素设置position:static(默认属性),其子元素为相对定位,可让子元素不透明 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 <! 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,其兼容性如下图所示:

 IE6IE7IE8IE9标准浏览器rgba×××filter:Alpha×

 

 

 

 

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

那么,如何只对IE6、7、8使用fiter:Alpha如何实现呢?

只支持IE6,7,8的方案:

1 2 3 /* 只支持IE6、7、8 */   @media \0screen\,screen\9 {...}

 

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 <! 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 >

 

可能很多同学会觉得很复杂,为什么不直接用两个DIV放在同一个位置就行了,一个不透明DIV,一个文字DIV,很简单的解决问题,这也是好个方 法,但是 需要写绝对定位或负margin,并出现空内容的DIV,而且这是这种方法在有些场景下也会显得复杂,如下示例,鼠标经过商标后展现展现透明的提示文案, 就需要控制2个DIV啦~

 

 

原文地址:http://www.cnblogs.com/PeunZhang/p/4089894.html

转载于:https://www.cnblogs.com/HaiLian/p/5776796.html

相关资源:CSS实现背景透明文字不透明的可行方法(兼容各浏览器)

最新回复(0)