CSS3 Pie 偶尔工作

Posted

技术标签:

【中文标题】CSS3 Pie 偶尔工作【英文标题】:CSS3 Pie working sporadically 【发布时间】:2014-01-08 09:47:17 【问题描述】:

我正在努力将我们公司的 Web 应用程序带入 21 世纪,并尝试使用一些新的 CSS3 功能,例如边框半径和框阴影,以获得更现代的视觉效果。但是,我们 90% 以上的用户群仍在使用 IE8,它不支持这些选项。 CSS3 Pie 似乎是完美的解决方案,但我遇到了一些奇怪的问题。

通过反复试验,我设法获得了我想在 IE8 中使用的所有 CSS 属性。使用的类的一些示例是:

    .pageTitle 
        border-radius: 12px;
        color:#fff;
        text-shadow: 1px 1px 0px #666;
        box-shadow: 5px 5px 3px #888888;

        background: -webkit-linear-gradient(blue, black); /* For Safari */
        background: -o-linear-gradient(blue, black); /* For Opera 11.1 to 12.0 */
        background: -moz-linear-gradient(blue, black); /* For Firefox 3.6 to 15 */
        background: linear-gradient(-0.5deg, black, blue); /* Standard syntax */
        -pie-background: linear-gradient(top, blue, black); /*ie 6-9 via PIE*/

        behavior: url(../../common/compatibility/PIE.htc);
    

    .headerGradient 
        background: -webkit-linear-gradient(blue, black); /* For Safari */
        background: -o-linear-gradient(blue, black); /* For Opera 11.1 to 12.0 */
        background: -moz-linear-gradient(blue, black); /* For Firefox 3.6 to 15 */
        background: linear-gradient(-0.5deg, black, blue); /* Standard syntax */
        -pie-background: linear-gradient(top, blue, black); /*ie 6-9 via PIE*/
        behavior: url(../../common/compatibility/PIE.htc);
        position:relative;
    

第一个用于页面顶部的 div,里面只有一两个单词。第二个用于我们的一些显示表格的标题。

有时,当我访问使用这些类的页面时,这些元素根本不会出现。看起来类几乎被忽略(导致元素以白色背景呈现),但元素中的文本应该显示为黑色并且仍然可见。它不是;我只看到一个空旷的空白区域(尽管这些元素内的图像仍会出现)

发生这种情况时,我只需将鼠标移到“pageTitle”div 上即可正确显示它。但是,这不适用于“headerGradient”(和类似的)表头。刷新页面有时可以解决问题,但通常需要相当多的工作才能让 CSS3 Pie 重新启动。

我无法在 CSS3 Pie 网站上重现这个问题,我也没有在其他地方看到过它的讨论,所以我认为我的实现中可能存在一些不正确的地方。如有任何想法,我将不胜感激。

更新

通过将 pie 文件移动到我的 webroot(我们的应用程序的 shell 页面所在的位置),这些问题中的一些似乎已经消失(尽管很难用零星的问题来判断)。但是,在我将鼠标移到它们上方之前,仍然存在没有样式的标题出现的情况。我应用于 CFLayoutAreas(ext-js 选项卡和手风琴)的所有样式都无法正常工作:

        /* Controls the header of the cflayout accordions. */
        .x-accordion-hd 
            background: -webkit-linear-gradient(#9999ff, #333366); /* For Safari */
            background: -o-linear-gradient(#9999ff, #333366); /* For Opera 11.1 to 12.0 */
            background: -moz-linear-gradient(#9999ff, #333366); /* For Firefox 3.6 to 15 */
            background: linear-gradient(-0.5deg, #333366, #9999ff); /* Standard syntax */
            -pie-background: linear-gradient(top, #9999ff, #333366); /*ie 6-9 via PIE*/
            behavior: url(PIE.htc);
            position:relative;
        

        .x-tab-strip,.x-tab-left,.x-tab-right 
            border-radius:5px 5px 0px 0px;

            background: -webkit-linear-gradient(#9999ff, #333366) !important; /* For Safari */
            background: -o-linear-gradient(#9999ff, #333366) !important; /* For Opera 11.1 to 12.0 */
            background: -moz-linear-gradient(#9999ff, #333366) !important; /* For Firefox 3.6 to 15 */
            background: linear-gradient(-0.5deg, #333366, #9999ff) !important; /* Standard syntax */
            -pie-background: linear-gradient(top, #9999ff, #333366) !important; /*ie 6-9 via PIE*/
            behavior: url(PIE.htc);
            position:relative;
        

事实上,标签和标签栏完全消失了。

我欢迎任何建议。

更新 2

通过将 PIE 包含移动到页面底部,大部分问题都消失了。 CFLayout 仍然表现不佳,所以我只是使用 PIE 禁用了布局区域本身的样式。

我剩下的一个问题是 PIE 似乎没有针对页面更新进行相应的调整。当我们的详细页面加载时,页面中心有一个 cfLayout,底部有 PIE 样式的按钮。按钮在页面加载时正确显示,而 cfLayout 仍然不可见。然后 cfLayout 出现并按下页面下方的按钮。但是,有时按钮的 PIE 样式将保留在它们加载的位置,而不是使用按钮本身向下移动页面。

有什么方法可以调用 PIE 来根据父元素的当前位置强制更新位置?

【问题讨论】:

我们有什么方法可以得到一个展示零星行为的演示? @ZachSaucier 感谢您的评论。我不确定我是否可以很容易地复制它,但我今天会尝试把一些东西放在一起。 @ZachSaucier 对不起;我今天不能发这个了。我已经根据我们的实时站点创建了一个更简单的示例页面,但需要为其找到服务器空间并获得批准才能发布,这可能要到下周才会发生。 挺好的,只会帮你更快得到答案 是的。如果您在正文结束标记之前加载脚本加载速度更快,但我注意到我的 IE 条件脚本在文档页脚中加载之前加载,请尝试在其他脚本之后加载 pie。 【参考方案1】:

如果消失的项目正在由脚本加载的 css 设置样式,请在 jQuery 之后将该脚本加载到头部。我注意到两个脚本在我的 IE8 工作中没有应用样式,当我在头部加载脚本时,它们又可以工作了。我在头部加载了我的 jQuery 库,但在页脚中加载了所有其他库,但是需要在头部加载两个需要脚本应用后备的脚本。

在没有看到代码的情况下,IE8 消失的列表项通常通过在 ul 或包装器上添加相对位置来修复,或两者兼而有之。如果这不起作用,请将其保留在那里并摆弄 z-index。然后重新检查好的浏览器或使用 IE8 CSS hacks。

尝试其他一些想法:

确保您的代码中有 html5 shiv 并且它正在加载(谷歌并不总是启动)。我用我的现代化器构建在本地托管它。阅读:Header disappears and lists become unstyled in IE 8 and below

如果消失的项目由脚本加载的 css 设置样式,在 jQuery 之后将该脚本加载到头部。我注意到两个脚本在我的 IE8 工作中没有应用样式,当我在头部加载脚本时,它们又可以工作了。我在头部加载了我的 jQuery 库,但在页脚中加载了所有其他库,但是需要在头部加载两个需要脚本应用后备的脚本。

【讨论】:

无论它是否作为答案,它都解决了原始问题,因此值得原始赏金:)。在一些帮助下,我重新创建了赏金,并会尽快将其奖励给这个答案。 @Nicholas 供将来参考,您可以直接奖励答案。无需为问题重新分配赏金。见Can I award a bounty to an old answer? @JSuar 我没有意识到这一点。感谢您的参考。

以上是关于CSS3 Pie 偶尔工作的主要内容,如果未能解决你的问题,请参考以下文章

css3pie 是如何工作的?

无法让 CSS3Pie 工作

CSS3 PIE 在 IE8 中无法正常工作

当我使用 cakephp 时,我在哪里放置 PIE.htc 文件(用于使 IE 与 CSS3 一起工作)

CSS3 Pie 在 IE8 中不起作用

CSS3PIE 不使用边界半径 [重复]