4

我一直在为 PHP 开发一个 CSS 缩小器,除了一件事之外,它已经完成了:

我想让它检测用户的浏览器并确定用户是否需要border-radius、-webkit-border-radius、-moz-border-radius等。这样我就不必使用很长很烦人的组.

这将检测所有 -webkit、-moz 等边界半径实例并将它们合并,或者我会将 {vendor}border-radius 放入 CSS 文件中,然后将其替换为 -webkit-、-moz-、或者什么都没有。第一个是理想的,因为我希望它可以扩展到其他项目。

在我的一生中,我无法找到一个有效的 PHP 实现来准确检测要使用的前缀(我已经在我能想到的任何地方搜索/搜索)。

任何帮助将非常感激!

4

3 回答 3

5

这里的主要问题是 PHP(服务器)不会立即知道浏览器(客户端)的 CSS 功能。唯一可以远程识别发送到 PHP 的浏览器的信息是用户代理字符串。即使这样,您仍然需要根据您通过解析用户代理字符串找到的内容来研究特定浏览器或引擎的特定版本的 CSS 功能,并根据该信息硬编码一些决策代码。

我认为这是尝试使用服务器端代码来确定客户端的 CSS 功能的主要责任。可能还有其他人,但不幸的是,这似乎是最大的障碍。

在客户端,有像-prefix-free这样的脚本可以让添加前缀变得很简单;只需使用未加前缀的属性和规则为您的缩小 CSS 提供服务,并让脚本根据它对浏览器的了解(服务器不知道)为您添加前缀。

此条目的第一段在其常见问题解答中似乎也值得一读:

“这样的东西属于服务器端”</h3>

服务器端脚本需要添加所有前缀,从而使 CSS 文件的大小相当大。此外,它应该维护需要前缀的功能列表,或者将它们全部添加并不必要地使样式表膨胀。-prefix-free 自动检测哪些需要前缀,哪些不需要。

以及对其作者的采访,它链接到:

“这是在服务器上做的更好的事情。做一次而不是每次页面加载”

-prefix-free 究竟做了什么,在服务器上是不可能做到的。-prefix-free 检测哪些功能需要前缀并仅在需要时添加。此外,它会自动检测需要前缀的可用属性。它不必保留要为哪些功能添加哪些前缀的列表,所有内容都可以检测到功能,因此是非常面向未来的证明。使用预处理器,需要维护有关此类内容的列表。这样的清单注定是不完整的,很快就会过时。我曾经尝试过的每个服务器端前缀在许多情况下都会失败。

(强调我的。)

于 2012-07-23T07:16:42.927 回答
1

嗅探浏览器的用户代理,然后设置 php 条件语句。我已经快速粘贴了我用于我的 web 应用程序的脚本,因为我有点忙所以不能为你重写它,但你可以谷歌不同浏览器的用户代理并根据需要修改它。

<?php
    $iPod = stripos($_SERVER['HTTP_USER_AGENT'],"iPod");
    $iPhone = stripos($_SERVER['HTTP_USER_AGENT'],"iPhone");
    $iPad = stripos($_SERVER['HTTP_USER_AGENT'],"iPad");
    $Android = stripos($_SERVER['HTTP_USER_AGENT'],"Android");
    $Blackberry = stripos($_SERVER['HTTP_USER_AGENT'],"Blackberry");
    $Playbook = stripos($_SERVER['HTTP_USER_AGENT'],"Playbook");
    $Mango = stripos($_SERVER['HTTP_USER_AGENT'],"Mango");
    $webOS = stripos($_SERVER['HTTP_USER_AGENT'],"webOS");
?>

或者,在 css 中只需设置一个使用所有三个的类,然后将该类设置为您需要的任何元素。无论如何,这是最简单和最实用的解决方案。再次,根据需要进行修改。

.border-radius{
    -moz-border-radius: 0px 0px 0px 0px;
    -webkit-border-radius: 0px 0px 0px 0px;
    border-radius: 0px 0px 0px 0px;
}
于 2012-07-23T07:16:58.027 回答
0

这不是您问题的答案,但您可以使用 PrefixFree 而不是重新发明轮子。

在这里查看它的详细信息:

http://coding.smashingmagazine.com/2011/10/12/prefixfree-break-free-from-css-prefix-hell/

关于你的问题:

您可以使用 php get_browser() 来确定用户浏览器并根据需要进行操作。

In my experience, avoiding prefixes wouldn't decrease the css size so much. you can instead GZIP the file, it will affect css file so much and decrease the difference between all prefix or one prefix more even.

于 2012-07-23T07:19:24.237 回答