【发布时间】:2012-01-24 10:18:07
【问题描述】:
我想将一个变量从 Coldfusion 或 php 传递给我的 sass。
在上面我声明了一个 var,我需要将它传递给 sass 以在我的 _base.sass 中设置容器大小。
有办法吗?
【问题讨论】:
-
这个的用例是什么?用户访问您的站点,您捕获他们的浏览器窗口大小,将其传递给 Sass,编译给定该值的 CSS,然后渲染页面?听起来效率很低。
我想将一个变量从 Coldfusion 或 php 传递给我的 sass。
在上面我声明了一个 var,我需要将它传递给 sass 以在我的 _base.sass 中设置容器大小。
有办法吗?
【问题讨论】:
使用变量中的 !default 标志来执行此操作。这就是我的意思
// SCSS file
@import "php-variables"; // have php write this file first before compiling
@import "variables"; // custom colors, font-sizes, etc.
// contents of php-variables
$myvar: #f00; // the value you're setting with php
// contents of variables
$myvar: #0f0 !default; // the value to use if php DOESN't override it.
这样,如果您的 php 代码不需要覆盖 var,您仍然可以有一个备用方案。您在 php 文件中写入的任何内容都将首先声明。那么只要您的变量文件在所有变量上使用 !default 标志,它就不会覆盖 php 设置的标志。
更多信息在这里:
http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#variable_defaults_
我已经在http://www.phpsass.com/ 使用 php 编译器对此进行了测试,它可以工作。
【讨论】:
我认为您应该通过 php/coldfusion 直接写入 sass 文件。我怀疑还有其他方法可以做到这一点。
一个简单的方法就是将变量放在 sass 文件或其他文件的第一行,然后使用 PHP 覆盖该值。
【讨论】:
我找到的最干净的解决方案是执行以下操作。在你的 html 文件中(我的是一个 Blade 模板)你可以注入你的变量($bodyBgColour):
<style>
:root {
--main-bg-color: {{ $bodyBgColour }}
</style>
然后在你的 scss 文件中你可以使用它:
$background-colour: var(--main-bg-color);
您随后可以在您的类中使用该 sass 变量:
body {
background-color: $background-colour;
}
【讨论】: