JS实现背景透明度可变,文字不透明的效果

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS实现背景透明度可变,文字不透明的效果相关的知识,希望对你有一定的参考价值。

参考技术A

  最近项目里需要实现这么个功能 类似网游中的聊天框 背景都是透明的 但是文字是不透明 所以如果简单的使用opacity(非IE)和alpha滤镜(IE)是无法实现这个效果的 会造成全部透明

  解决办法如下

   实现完全透明

  设置background为transparent即可 两个浏览器通用

   实现透明度可调节

  要求改透明度 这里IE和非IE需要分开处理

  非IE浏览器可通过支持CSS 的方式处理(不支持CSS 的这里忽略了) css的写法是

  background color:rgba( )

  前面 个参数是RGB 最后个是透明度

  IE浏览器需要使用gradient滤镜 css写法是

  filter: progid:DXImageTransform Microsoft gradient(startColorstr=# ffffff endColorstr=# ffffff)

  摘录CSS手册说明用法

  语法

  filter : progid:DXImageTransform Microsoft Gradient ( enabled= bEnabled startColorStr= iWidth endColorStr= iWidth )

  属性

  enabled  :  可选项 布尔值(Boolean) 设置或检索滤镜是否激活 true | false true  :  默认值 滤镜激活

  false  :  滤镜被禁止

  startColorStr  :  可选项 字符串(String) 设置或检索色彩渐变的开始颜色和透明度

  其格式为 #AARRGGBB AA RR GG BB 为十六进制正整数 取值范围为 – FF RR 指定红色值 GG 指定绿色值 BB 指定蓝色值 参阅 #RRGGBB 颜色单位 AA 指定透明度 是完全透明 FF 是完全不透明 超出取值范围的值将被恢复为默认值

  取值范围为 #FF – #FFFFFFFF 默认值为 #FF FF 不透明蓝色

  EndColorStr  :  可选项 字符串(String) 设置或检索色彩渐变的结束颜色和透明度 参阅 startColorStr 属性 默认值为 #FF 不透明黑色

  特性

  Enabled  :  可读写 布尔值(Boolean) 参阅 enabled 属性

  GradientType  :  可读写 整数值(Integer) 设置或检索色彩渐变的方向 |   :  默认值 水平渐变

     :  垂直渐变

  StartColorStr  :  可读写 字符串(String) 参阅 startColorStr 属性

  StartColor  :  可读写 整数值(Integer) 设置或检索色彩渐变的开始颜色 取值范围为 – 为透明 为不透明白色

  EndColorStr  :  可读写 字符串(String) 设置或检索色彩渐变的结束颜色和透明度 参阅 startColorStr 属性 默认值为 #FF 不透明黑色

  EndColor  :  可读写 整数值(Integer) 设置或检索色彩渐变的结束颜色 取值范围为 – 为透明 为不透明白色 当在脚本中使用此特性时 也可以用十六进制格式 xAARRGGBB

  说明

  在对象的背景和内容之间显示定制的色彩层

  当此效果通过转变显示时 在渐变册色彩层之上的文本程序性的初始化为透明的 当色彩渐变实现后 文本颜色会以其定义的值更新

   补充完美支持IE 和IE

  这么写在IE 和IE 中会有点小问题 原因是使用transparent的背景时 鼠标居然能点到透明层后面的内容 还会造成部分事件的实效 解决办法是在外面套个div 然后给他加个完全透明的背景图(PNG) 写法参考

  background:url( )!important;background:none;_filter:progid:DXImageTransform Microsoft AlphaImageLoader(src= sizingMethod= scale

  这样在里面被嵌套的div点击就不会点到最外面的内容了 当然非IE就不需要加这个了

  另外 对于不支持CSS 的浏览器 还有个解决办法就是把背景层和显示文字的层分开处理 放在同一级 只是通过位置上的调整做到看似有层级关系 这样使用透明效果就直接做也不会对文字有影响了

  补充

  IE 下 上述办法仍然无效 解决办法是套层iframe 在代码里可以这么写

lishixinzhi/Article/program/Java/JSP/201311/19841

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

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>
技术分享

以上是关于JS实现背景透明度可变,文字不透明的效果的主要内容,如果未能解决你的问题,请参考以下文章

CSS实现背景透明而背景上的文字不透明

怎么实现背景透明而文字不被透明

元素实现背景透明,文字不透明方法

css怎么可以只让背景透明 文字不透明

DUILIB库怎么实现背景透明,文字和图标不透明

HTML+CSS+JS实现 ❤️透明的水滴文字背景特效❤️