2013-09-16 191 views
1

正如你可以在这里看到的:http://codepen.io/MyXoToD/pen/alkmL 我想将一些JavaScript函数转换成SASS。一切工作正常,但这一功能...SASS random()总是返回相同的值,为什么?

我想转换此:

var pallete = Math.floor(Math.random() * 210); 

$("article h2").each(function(i) { 
    var hue = pallete + (i * 15); 
    var css = 'background:hsl(' + hue + ',85%,70%); color:hsl(' + hue + ',45%,55%);'; 
    $(this).attr("style", css); 
}); 

弄成这个样子:

@for $i from 1 through $articles { 
    &:nth-child(#{$i}) { 
    $random: random(210); 
    $hue: $random + ($i * 15); 
    background-color: hsl($hue, 85%, 70%); 
    color: hsl($hue, 45%, 55%); 
    } 
} 

我在这种情况下的问题是,random(210)总是返回每个页面加载的值相同。是否有可能通过@for从每次运行中随机获得不同的值?

+1

请注意'random()'目前不是Sass或Compass的函数,它是CodePen特有的(参见https://github.com/chriseppstein/compass/issues/1154和https:// github.com/nex3/sass/pull/904) – cimmanon

回答

2

不,这在任何正确的生产环境下都是不可能的。浏览器只能理解CSS,因此SASS和几乎所有其他CSS预处理器通常只运行一次(在服务器上),而不是在每个页面加载的客户端上运行。

虽然例如LESS有一个客户端编译器(less.js),使用它会减慢页面加载过程,并且通常只适合开发。如果您真的想要动态颜色,请考虑使用JavaScript构建相关CSS或保留旧代码。

+0

不正确。你可以在客户端编译SASS,LESS等。这当然是个坏主意,但仍然有可能。 –

+0

@dragoste注意**这个词通常** – iConnor

+0

@Pinocchio请注意ThiefMaster的表达“那是不可能的。” –

相关问题