显示一个CSS样式,如果IE浏览器和另一个如果FF或铬使用PHP的.css使用PHP

问题描述:

我有一些CSS样式,在IE中不起作用,并在ff和chrome上工作。我希望能够使用,如果其他人。但是PHP的ifelse可以包含在.css文件中以实现吗?显示一个CSS样式,如果IE浏览器和另一个如果FF或铬使用PHP的.css使用PHP

[编辑]

我不想为宗旨

感谢 让

+0

什么CSS在IE的作品,但不是镀铬/ FF? – cletus 2010-04-15 09:22:05

+0

Re:你的编辑(“我不想要两个.css文件”):为什么? – pinkgothic 2010-04-15 09:32:09

+3

实际上很多 - 例如所有专有的IE过滤器。 – 2010-04-15 09:32:12

您可以使用conditional comments从其他浏览器隐藏CSS文件。

如果您确实想要决定要在服务器端提供哪个CSS,那么您可以查看解析user agent string以确定正在使用哪个浏览器;但要小心,这可以毫不费力地假冒 - 一些浏览器甚至可以让你选择他们将作为开箱即可识别的东西,所以最终可能会有误报。

一般有两种.css文件说你不希望自定义您的站点为不同的浏览器。你想尽可能使所有的东西尽可能均匀。当然,有些情况下您必须以浏览器特定的方式进行操作,但根据我的经验,使用适当的技术,这些情况并不常见。

一些通用规则:

  1. 始终声明DOCTYPE所有 HTML页面。这迫使浏览器(最值得注意的是IE)成为所谓的标准兼容模式而不是怪癖模式。怪癖模式在IE中有一些不正确的盒子模型。由于这个原因,我嫌疑人你正在做的事情是错误的(古怪的)的方式,FF/Chrome实际上正确地解释它。对我而言,这是最可能的情况;和

  2. 使用重置CSS。不同的浏览器(以及同一浏览器的不同版本)对于填充,边距,边框等具有不同的默认值。最好将它全部重置为相同的起点并从那里开始。

除此之外,您可以使用conditional comments

+1

非常真@不浏览器嗅探。我喜欢链接到http://www.quirksmode.org/js/support.html来解释用户代理嗅探的真正恐怖以及到目前为止所做的工作 - 即使这是严重的以JS为中心的写作,核心要点保持不变。 – pinkgothic 2010-04-15 09:28:46

+0

Doctype已经存在,因此否定您的回答 – X10nD 2010-04-15 09:44:20

可以解释CSS文件用PHP(如果你不是太费心有关服务器负载),如果你把这个线在你的Apache配置:

addhandler application/x-httpd-php .css 

那么你可以尝试依靠$_SERVER['HTTP_USER_AGENT'],但请注意,它不保证值得信赖。

不过,也有(IMO)更好的方式来实现这一目标,其中包括使用IE的条件注释:

<!--[if IE 8]> 
<style type="text/css" ... /> 
<![endif]--> 

当然,最可取的方法将重写你的风格,以避免浏览器实现的差异,这通常是可能的,但如果您被迫支持像IE 6这样的旧浏览器,则需要一定程度的CSS guru-ness。

+1

同意,如果每个CSS请求都必须通过PHP解释器运行,您会发现性能问题。更好地使用条件注释来覆盖IE的CSS所需的位。 – Paolo 2010-04-15 09:26:51

+0

我应该可以在不改变httpd.conf的情况下选择样式 – X10nD 2010-04-15 09:46:07

Css不支持条件流控制。你应该使用不同的技术来解决: