【问题标题】:How to make PHP variables preserved in CSS stylesheets generated by SASS / SCSS?如何使 PHP 变量保留在 SASS / SCSS 生成的 CSS 样式表中?
【发布时间】:2012-02-25 17:24:07
【问题描述】:

我正在开发一个新的大型 PHP / Symfony 2 项目,并决定使用 Sass / SCSS 和 Compass,我发现它们都非常适合以现代方式管理 CSS。但是,仍然有一个问题我找不到答案:如何将 PHP 变量放在原始 SCSS 文件中,并将它们保留在输出的 CSS 文件中?

这不是一个细节,因为没有这个功能,就无法将 Sass 生成的样式表与 PHP 接口,这在一些大型项目中可能会受到限制。

明确地说,作为一个起点,我们可以以经典的方式将 CSS 与 PHP 接口,主要如下所示:

<link type="text/css" href="layout.css.php?my_var=#CC0000" rel="stylesheet" />

然后在一个伪 CSS 文件 layout.css.php 中,如上例所示:

<?php header("Content-type: text/css");?>

.my_color {
  background-color:<?=$_GET['my_var']?>;
}

现在,我怎样才能在 SCSS / Compass 中做一些等效的事情?换句话说,如何将一些 PHP vars 放在原始的 SCSS 文件中,这些文件将在最终的 CSS 输出文件中保持原样,以便可以像上面的示例那样使用 PHP 进一步实时解析?

当我尝试这样做时,Compass 和 SASS 编译器由于 PHP 语法而失败。

Phamlp 有一些 PHP 过滤器,仅适用于 haml 模板,不适用于 SCSS 文件。

LESSphp 似乎有such functionality,但似乎很多人正在从 LESS 转向 SCSS / Compass,那么最好的方法是什么?

非常感谢。

【问题讨论】:

    标签: php sass compass-sass


    【解决方案1】:

    我真的不认为你想做你想做的事。

    Sass、LESS 和 Stylus 等语言的主要优势之一(注意:我相信 Stylus 是一种比 Sass 更强大、更灵活的语言)是它们可以预处理为裸 CSS,然后可以被浏览器缓存或由 CDN 分发。如果你然后通过 PHP 运行那些原本是静态的内容,你就完全失去了这个优势。

    我相信在当今时代,拥有像您似乎试图实现的动态样式内容的正确方法是使用 Javascript:让您的应用程序交付一个静态 JS 文件,然后用动态 数据扩充它。在此示例中,您将有一个函数询问服务器“用户首选的背景颜色是什么?” (通过 XMLHttpRequest 或通过查看与原始 PHP 编写的页面一起交付的 JSON 对象)。然后它在适当的元素或类上设置适当的属性,可能使用 jQuery 等辅助库。

    与服务器端 CSS 生成相比,这种方法具有主要优势(例如适当的缓存、更多的服务器端静态内容,这意味着更好的站点响应能力、改进的关注点分离、更容易实现替代 UI,因为服务器是't setting display properties, ...) - 唯一的缺点是它需要一个支持 JS 的浏览器。请考虑一下。

    【讨论】:

    • 你说得对,我只是使用这个基本示例来大大简化目的,我的真实上下文要复杂得多(通过 adapt.js 驱动 960.gs 流体和响应式布局,即:当右列没有 PHP 返回的记录时,body 列将使用 grid_24 样式,如果右列有内容,则使用 grid_17 样式,因此在这种情况下,这种“服务器范围”条件对于缓存来说不是问题。无论如何,你的答案非常有用,可以解决我的问题(还有另一个技术层要实现:-)。非常感谢您的详细回答。
    • 考虑将静态内容与动态内容分开。这适用于 css 和 js。对于用户属性,只需使用包含所有变量的对象 user.properties 创建另一个 js 文件。静态文件将使用此对象,因此可以缓存。
    猜你喜欢
    • 1970-01-01
    • 2011-03-12
    • 2013-08-02
    • 2013-09-12
    • 1970-01-01
    • 2014-06-04
    • 2015-04-04
    • 1970-01-01
    • 2012-02-14
    相关资源
    最近更新 更多