【问题标题】:filter: gradient and background: fixed过滤器:渐变和背景:固定
【发布时间】:2011-02-17 01:21:53
【问题描述】:

代码:

body { background-attachment: fixed !important; filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#000000,endColorStr=#3d3c3c); }

渐变在 IE8 中不会保持固定,而是滚动到纯白色背景中。渐变在 Firefox 和 Chrome 中保持固定并随页面滚动。

有没有办法在 IE8 中也有 fixed ?我什至不知道这是一个问题(根据 Google 找不到任何东西)。

编辑:我使用上面的代码(以及相当多的 Lorem Ipsum)创建了一个测试页面,并且背景已按应有的方式固定。所以它一定是我的布局中的东西。

【问题讨论】:

  • 我有 IE 8.0.6001.18702,使用你的代码,滚动内容,渐变对我来说是固定的。我从来没有见过白色背景。由于使用的过滤器只能在 IE 中使用,我认为您用于 Firefox 和 Chrome 的方法不相关。你能提供一个小提琴来证明你的问题吗?
  • 可能不相关,但非常烦人,因为 Moz 和 Webkit 的样式按照我想要的方式工作。 jsfiddle.net/g83DW 小提琴,但我真的不确定我上面发布的代码和那个代码之间有什么区别。虽然我会说即使是小提琴也是一个很好的例子,因为渐变从预览的顶部到底部,并且滚动而不是在“窗口”中显示整个渐变并保持固定。
  • 我的布局中的所有内容都是绝对定位或固定定位,即使主体高度为 100% 也会导致问题吗?

标签: css internet-explorer-8


【解决方案1】:

看起来你所缺少的只是在身体上设置一个高度。在 IE 8 中添加这种样式对我有用:

html, body {height: 100%}

所以,使用你的小提琴风格,它看起来像这样:

html, body {height: 100%}
body {
    background-attachment: fixed !important;
    filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr=#000000, endColorstr=#ffffff);
}

这就是跨浏览器版本的样子:

html, body {height: 100%}
body {
    background-attachment: fixed !important;
    filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr=#000000, endColorstr=#ffffff);
    background-image: -moz-linear-gradient(center top -90deg, #000000, #ffffff);
    background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#000000), to(#ffffff));
}

显然,您可以将 IE 特定代码放在其他地方并有条件地加载它,等等。

这在 IE 8、Firefox 3.6、Chrome 9 和 Safari 5 (Webkit) 中测试良好,但在 Opera 中不起作用。对于 Opera、SVG 还是实际背景图片?

【讨论】:

  • body 实际上将其高度设置为 100% 以及代码中其他地方的 html。很抱歉当时没有包括它,但在过去的几天里我一直在编码,我的和其他人的。 :) 正如我上面所说,它似乎确实适用于我的主要风格以外的风格。我不确定为什么会这样,我已经拆开我的 CSS 试图弄清楚它,但我真的没有找到它的运气。有趣的是,在此过程中我发现 IE 拒绝允许对带有display: none; 的元素进行过滤,这些元素当然会在以后使用 jQuery 调用。继续 。 . .
  • 我最终的结论是它只是拒绝工作,需要 something 本身有问题,所以我将背景颜色设置为底部渐变并简单地允许身体背景与内容一起滚动。对于display: none; 问题,我使用了透明背景图像。我讨厌诉诸于此(该死的!),但是如果以另一种方式解决问题,尽管不太理想,但它并没有被破坏。它只是 IE。
  • 我的代码确实产生了想要的结果。但是,正如您所说,问题出在您的 CSS 的其他地方,没有看到它,我不知道还有什么建议。 display: none 问题很糟糕,但它是 IE;你还能说什么?
  • 老实说,我认为这与正文没有扩展页面的整个高度有关,但这是我遇到的另一个问题的相同布局,所以嗯。无论如何,这个特定项目的用户群不是使用 IE 的类型,因此“解决方法”比反汇编在他们将使用的浏览器中完美运行的 CSS 更快、更方便。正如我所说,我讨厌在其中留下一个错误,但是其他一切都在工作并且看起来并不“丑陋”,我说去他妈的,它是 IE,某些事情会不像预期的那样运行,让它正常工作 98% .
  • 作为记录,我不确定您为什么必须声明您的代码有效。显然是的。我会将您的答案标记为正确答案,因为在大多数情况下,这将是正确答案。碰巧 IE 讨厌这种特殊的布局。 ;)