不透明度CSS在IE8中不起作用


143

我正在使用CSS来表示jQuery向下滑动部分的触发文本:即,当您将鼠标悬停在触发文本上时,光标将变为指针,并且触发文本的不透明度降低,以指示该文本具有单击动作。

这在Firefox和Chrome中可以正常工作,但是在IE8中,不透明度不会改变。

我尝试了各种CSS设置,但均未成功。

例如

HTML:

<h3 class="slidedownTrigger">This is the trigger text</h3>

CSS:

.slidedownTrigger
{
    cursor: pointer;
    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=75)";
    filter: alpha(opacity=75);
    -khtml-opacity: 0.75;
    -moz-opacity: 0.75;
    opacity: 0.75;
}

是什么阻止IE更改不透明度?注意:我已经在各种不同的元素上进行了尝试,围绕CSS语句的顺序进行交换,并且仅使用IE本身。我也尝试过使用

-ms-filter: "alpha(opacity=75)";

但没有成功。

我已经用尽所有尝试在IE8中进行不透明度修改的功能。

有任何想法吗?


我认为这个相关/重复的问题有您的答案。 stackoverflow.com/questions/859000/opacity-in-web-pages
Jeff Martin

我看到了这个问题-麻烦是答案:<br> <br>&nbsp;&nbsp; 过滤器:alpha(opacity = 50); / *互联网浏览器/ <br>&nbsp;&nbsp; 不透明度:0.5; / fx,野生动物园,歌剧,Chrome浏览器* / <br>&nbsp;&nbsp; -ms-filter:“ progid:DXImageTransform.Microsoft.Alpha(opacity = 50)”; / * IE8 * / <br> <br>对我不起作用(我再次尝试再次进行仔细检查)。我将其应用于黑色和粗体的h3。在Firefox和Chrome中,不透明度设置如您所愿将标题变成灰色,但在IE8中,它保持黑色。

糟糕-没意识到您没有在注释中使用

如果仅在纯色div上尝试这些样式,它们是否起作用?也许还有其他正在发生冲突的CSS。
杰夫·马丁

好一个。是的-当我做一个简单的div时,给它一个高度和宽度以及红色的背景色以及这些不透明度设置,就可以在IE8中使用。它是半透明的。我正在努力寻找问题所在。我没有在样式表中修改任何其他对象的不透明度,所以我不认为仅在IE中可能与它发生冲突的地方。

Answers:


65

不知道这是否仍然适用于8,但是从历史上看,IE不会将多种样式应用于没有“具有布局”的元素。

参见:http : //www.satzansatz.de/cssd/onhavinglayout.html


9
IE不会将多种样式应用于没有“具有布局”的元素。
Azeem.Butt

4
大!谢谢。那就是问题所在。我尝试调整其不透明度的元素(例如h3)没有“具有布局”。一旦给了他们一些,不透明度就起作用了。我所做的就是增加宽度:100%;到h3。感谢您指出正确的方向。但是,Internet Explorer这样做似乎很疯狂(如果不是越野车)。

51
IE不会将大量样式应用于大量元素。
danwellman 2012年

1
@danwellman,然后它也会执行许多其他“有趣”的事情。好极了。
dudewad 2014年

有趣的是,IE7不需要“布局”。我在高度为零的元素上使用响应式背景图像,padding-bottom: 100%并且在IE8中,不透明度直到我设置了显式高度才生效。IE7不需要这个。
寇特(Kout)

158

设置这些(就像我写的一样)在需要时为我服务:

-moz-opacity: 0.70;
opacity:.70;
filter: alpha(opacity=70);

6
谢谢,我相信“过滤器:alpha(opacity = 70);” 适用于IE <8。但是,它对IE8(我刚刚检查过)不起作用(对我来说)。我相信-moz-opacity现在已经不存在了,不透明是标准的处理方式-因此,自然地,Microsoft并没有使用这种处理方式(太简单了)。

15
只需按照您描述的那样设置“不透明度”和“过滤器”就足以使其在FF4和IE8中都对我有用。-moz-opacity是不必要的。
demoncodemonkey 2011年

1
@Gabriel McAdams:过滤器:alpha(opacity = 70); 工作(但仅在IE 8中有效)
Poonam Bhatt 2012年

@Gabriel奏效了!我将在IE 7/8中不再有不透明性问题!
MJCoder

1
更具体的信息:实际上,它是使用fadeIn删除透明度的方法。
tmorell 2013年

49

您需要先为符合标准的浏览器设置“不透明度”,然后再设置各种版本的IE。参见示例:

但是此不透明度代码在ie8中不起作用

.slidedownTrigger
{
    cursor: pointer;
    opacity: .75; /* Standards Compliant Browsers */
    filter: alpha(opacity=75); /* IE 7 and Earlier */
    /* Next 2 lines IE8 */
    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=75)";
    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=75);
}

请注意,我删除了-moz,因为Firefox是符合标准的浏览器,并且不再需要该行。另外,-khtml已贬值,因此我也消除了该样式。

此外,IE的过滤器将无法验证w3c标准,因此,如果您希望页面进行验证,请使用if IE语句将标准样式表与IE样式表分开,如下所示:

<!--[if IE]>
<link rel="stylesheet" type="text/css"  href="http://www.mysite.com/css/ie.css" />
<![endif]-->

如果您将ie怪癖分开,那么您的站点将可以正常验证。


3
只需按照您描述的那样设置“不透明度”和“过滤器”就足以使其在FF4和IE8中都对我有用。标为“ / *下两行IE8 * /”的部分不是必需的。
demoncodemonkey 2011年

3
@demoncodemonkey:正确。这完全取决于您安装的版本。如果您想要最大的兼容性,我建议所有这些。
凯文·佛罗里达州

正确,但是:“为了确保Internet Explorer 7和8的用户都能使用该过滤器,您可以包括上面列出的两种语法。由于解析器的特殊性,您需要在较旧的语法之前首先包括更新的语法。为了使过滤器在“兼容性视图”中正常运行(这是一个已知的错误,将在IE8的最终版本中得到修复。)以下是CSS样式表示例:“(来源:link
zrathen 2012年

@Kevin“如果您想要最大的兼容性,我建议所有这些”。那么,您不应该删除-moz-opacity,对吗?
诡异的

-ms-filter不需要引号。
thdoan

17

显然,alpha透明仅适用于IE 8中的块级元素。设置display:block。


17

display: inline-block;在IE8上使用Works可以解决此问题。

FWIW,opacity: 0.75可在所有符合标准的浏览器上使用。


5

的CSS

我曾经使用CSS-Tricks中的以下内容:

.transparent_class {
  /* IE 8 */
  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";

  /* IE 5-7 */
  filter: alpha(opacity=50);

  /* Netscape */
  -moz-opacity: 0.5;

  /* Safari 1.x */
  -khtml-opacity: 0.5;

  /* Good browsers */
  opacity: 0.5;
}

罗盘

但是,更好的解决方案是使用Opacity Compass mixin,您所需要做的就是为@include opacity(0.1);它解决所有跨浏览器问题。您可以在此处找到示例。




1

此代码有效

filter: alpha(opacity = 50); zoom:1;

您需要添加zoom属性才能使其工作:)


1

您还可以添加polyfil以在IE6-8中启用本机不透明度用法。

https://github.com/bladeSk/internet-explorer-opacity-polyfill

这是一个独立的polyfil,不需要jQuery或其他库。它有一些小的警告,它不能用于内联样式,对于需要不透明多样式的任何样式表,它们必须遵守同源策略。

使用非常简单

<!--[if lte IE 8]>
    <script src="jquery.ie-opacity-polyfill.js"></script>
<![endif]-->

<style>
    a.transparentLink { opacity: 0.5; }
</style>

<a class="transparentLink" href="#"> foo </a>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.