检测哪个webkit/moz /等.要显示的前缀

Zan*_*per 4 css php user-agent css3 vendor-prefix

我一直在为PHP做一个CSS minifier,除了一件事:

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

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

对于我的生活,我无法弄清楚一个有效的PHP实现,它可以准确地检测出使用哪个前缀(而且我已经用谷歌搜索/搜索了我能想到的任何地方).

任何帮助将非常感激!

Bol*_*ock 5

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

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

在客户端,存在像-prefix-free这样的脚本,这使得添加前缀成为一项微不足道的工作; 只为你的精缩CSS只用前缀的属性和规则,并让脚本您可以根据它所知道的浏览器(该服务器没有)加前缀.

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

"像这样的东西属于服务器端"

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

以及与其作者访谈,其链接到:

"这是在服务器上做得更好的事情.做一次而不是每次页面加载"

什么-prefix-free完全没有,在服务器中是不可能的.-prefix-free检测哪些功能需要前缀,只在需要时添加.此外,它会自动检测哪些属性可用,需要前缀.它不必保留为哪些功能添加哪些前缀的列表,所有内容都可以检测到功能,因此非常适合未来.对于预处理器,需要维护有关此类内容的列表.这些清单注定是不完整的,很快就会过时.我尝试过的每个服务器端前缀都在很多情况下失败了.

(强调我的.)