【发布时间】:2016-05-28 05:39:06
【问题描述】:
注意:
我是 Web 开发和面向对象编程的新手。我是 SCSS 的新手,还没有对语法有深刻的理解。我对如何使用functions in SCSS有了基本的了解。
让我从定义我想要达到的结果开始。
_body.scss
body {
background-color: red;
}
现在我知道如果我想在 Javascript 中获得这个结果,我可以:
方案一:编写一串HTML代码,替换已有的html标签。
不打算对此进行编码,因为这是编写 Javascript 的一种混乱方式,但本质上是使用 document.write() 方法。
选项2:使用“setAttribute()”方法
// assuming <head> and <body> are the only tags within <html>
var bodyTag = document.firstElementChild.lastElementChild;
bodyTag.setAttribute( "bgcolor", "red" );
我知道在 Javascript 中还有其他方法可以做到这一点,但对于本示例,我将重点介绍这两种方法。
所以我想创建一个可以返回属性和值的 SCSS 函数。
_body.scss(伪代码字符串示例)
@function makeAttribute( $attribute, $value )
{
@return $attribute + ":" + $value + ";";
}
body {
makeAttribute( background-color, red );
}
我还没有找到解决这个问题的内置函数(类似于 Javascript 中的“setAttribute()”方法),或者上面的字符串示例。
我知道函数可以取:数字、字符串、布尔值、颜色、列表、地图或空值;但我不知道一个属性是否适合任何这些值类型(例如:字符串)。
我觉得这篇文章:Bringing Configuration Objects To Sass 可能正在解释我正在尝试做的事情,但我很难理解这篇文章(因此它可能不是对解决方案的解释)。
我的最终目标是创建一个可以编写以下 css 的函数。我之前没有提到浏览器支持,因为它增加了另一层复杂性,可能容易解释也可能不容易解释。
body {
background-color: red;
-o-background-color: red;
-ms-background-color: red;
-moz-background-color: red;
-webkit-background-color: red;
}
【问题讨论】:
-
你混淆了 CSS、Javascript 和 HTML - 它们是非常不同的语言,'setAttribute' 函数在 CSS 中没有多大意义,因为
background: red;本质上是 setAttribute。不要试图从 Javascript 或相反的方式翻译你的 CSS - 事情会很快变得混乱。 -
是的,我只是提供了 Javascript 和 HTML 的示例。我绝不建议从一种语言中获取代码并将其放入另一种语言中。我正在尝试找出 SASS / SCSS 是否具有内置方法/函数或编写自定义函数以产生所需输出的方法。
-
好吧,这是一篇很好的开始文章:thesassway.com/advanced/pure-sass-functions - 我赞成下面的答案,因为它也解释了前提。