当我在使用CakePHP时,想让IE支持CSS3,我应该把PIE.htc文件放在哪里?

12

我正在尝试使用PIE.htc,这是一个脚本,希望能让我在IE6-8中使用CSS3的特性。同时我也在使用Cakephp框架(我越来越喜欢它了)。

根据指示,我只需要把PIE.htc文件放在任何我想要的地方,然后在CSS中添加behavior: url(path/to/PIE.htc);。所以我现在有:

input[type=text]{
    width:348px;
    height:30px;
    border:1px solid #ddd;
    padding:3px;
    background:url(../img/formfieldbg.gif) repeat-x;
    -moz-border-radius: 5px;
    -webkit-border-radius: 5px;
    border-radius: 5px;
    vertical-align:top;
    behavior: url(path/to/PIE.htc);}

还有一句话:注意:此路径是相对于正在查看的HTML文件,而不是从中调用CSS文件。

我正在使用Cakephp,无论我为路径设置什么内容,也无论我把PIE.htc文件放在哪里,都无法使其正常工作!当我在IE6中查看时,我的输入框仍然没有像在FF中那样拥有漂亮的圆角。

4个回答

14

尝试使用绝对路径:

behavior: url(/path/to/PIE.htc);

注意前导正斜杠。这样,无论当前页面是什么,到.htc文件的路径都将保持不变。

完整的URL也可以使用:

behavior: url(//example.com/path/to/PIE.htc);

如果您使用完整的url,请使用协议相对URL,这样在切换到https时就不会出现不安全内容警告。

当使用PIE时,许多元素需要position:relativezoom:1才能在IE中正常工作,请确保您查看已知问题页面并进行适当的调试,直至其正常工作。


你好,感谢回答。我尝试了加上一个斜杠,现在我的代码是这样的:behavior: url(/PIE.htc); 我也把PIE.htc文件放在了app/、app/webroot和app/views等目录下,但似乎还是没有被识别到。你有什么想法吗?谢谢。 - julia
你尝试过直接在地址栏中导航到URL以确保您可以访问它吗?尝试将其放在与CSS文件相同的目录中以确保。 - Wesley Murch
嗨,顺便说一下,非常感谢您的帮助。我已经尝试在新页面上进行测试,而不是使用输入框,而是使用普通的div,我发现当我有behavior: url(/myproject/PIE.htc);时,它会产生影响。但不幸的是,效果是完全删除边框 - 使用输入框文本框完全消失?!?但至少它必须拾取htc文件,因为它有一些效果。我想我的其他CSS肯定有问题,导致了奇怪的行为?朱莉娅 - julia
Julia,请查看我的回答中的结尾部分,并阅读PIE网站上的常见问题解答。许多元素需要一些额外的帮助才能在IE上正常显示,例如position:relativezoom:1。 PIE并不完美,仍有一些事情无法正常工作或需要额外的解决方法。 - Wesley Murch
谢谢,我重新开始了一些工作,似乎已经可以正常运行了。我想我必须再次从头开始,看看问题具体出在哪里。这可能是学习的最佳途径。感谢您的所有建议和时间。 - julia
显示剩余2条评论

1

您需要指定pie.php文件。它的内容如下:

<?php
/*
This file is a wrapper, for use in PHP environments, which serves PIE.htc using the
correct content-type, so that IE will recognize it as a behavior.  Simply specify the
behavior property to fetch this .php file instead of the .htc directly:

.myElement {
    [ ...css3 properties... ]
    behavior: url(PIE.php);
}

This is only necessary when the web server is not configured to serve .htc files with
the text/x-component content-type, and cannot easily be configured to do so (as is the
case with some shared hosting providers).
*/

header( 'Content-type: text/x-component' );
include( 'PIE.htc' );
?>

那应该解决了这个问题。


1

我使用CodeIgniter和mod_rewrite。根据Septagram的答案,我得到了以下工作结果。

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]

#if the url contains PIE.php redirect to the folder containing PIE.php
RewriteCond %{REQUEST_URI} PIE.php$
RewriteRule ^.*$ css3pie/PIE.php [NC,L]

#else just redirect to index
RewriteRule ^.*$ index.php [NC,L]

希望这可以帮助某些人。

0
如果你正在使用mod_rewrite,那么以下的小技巧可能适用于你:
RewriteRule /PIE.htc$ PIE.htc [L]

将以下代码添加到.htaccess文件中,然后就大功告成了!现在PIE.htc神奇地出现在每个文件夹中 :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接