动态CSS相当琐碎,即使其应用程序受到限制(查看带有静态样式表的动态生成的HTML如何解决大多数日常需求,而CSS本身也包含一些实现半动态的机制),我已经看过它在很多场合使用过,并且在需要时我自己使用它们。
通常,“动态”部分除了将多个样式表组合成一个样式表(以减少HTTP请求的数量)并最小化它们(以减少带宽使用量)外,只是做一些简单的事情,例如变量替换(例如,将变量用于整个颜色)。样式表)可以使您的生活更加轻松。但是,由于CSS具有相当简单的语法,没有什么警告,因此通常使用通用文本处理系统或类似PHP的脚本语言就足够了,这就是为什么看不到许多现成的CSS处理系统的原因。
也许您在野外看到了它们,却没有意识到它们。发送动态脚本的服务器通常使用URL重写,以使URL与静态提供的内容无法区分。这是必要的,因为某些浏览器(最著名的是IE)在某些情况下依赖扩展来正确检测MIME类型,而忽略(或丢弃)您可能已发送的任何Content-Type标头。
关于缓存:样式表与GET请求一起使用,使其可缓存对于体面的用户体验绝对重要。您不希望看到页面重排,因为它会根据每个请求重新下载样式表。相反,您应该将所有更改样式表处理输出的参数都放入查询字符串中。不同的查询字符串会产生不同的URL,从而导致缓存未命中,因此,只要更改了参数,即使客户端缓存了所有内容,样式表也会重新下载。如果您确实需要针对每个请求可能有所不同并且取决于副作用的CSS,请考虑将非动态部分放入静态服务的样式表中,并仅动态地提供那些绝对必须动态的内容。