SASS生成多个静态的URL

时间:2013-06-21 13:36:19

标签: php sass compass-sass

我的想法是我使用一些mixin为图像生成域。假设我有2个具有相同图像的域,我希望能够从一个域加载一半图像,从另一个域加载一半图像。

PHP中的

类似于

$domains = array('domain1', 'domain2', 'domain3');
$domainIdx = 0;

function getDomain(){
    $rVal = $domains[$domainIdx];
    $domainIdx = $domainIdx++ >= count($domains) ? 0 : $domainIdx++;
    return $rVal;
}

我每次渲染图像时都会调用它来获取域名。我怎么能在SASS的mixin中做类似的事情所以当生成CSS时它会在域列表之间分配所有的URL?

2 个答案:

答案 0 :(得分:1)

在Compass配置文件(即config.rb)中,您可以使用asset_host功能,如下所示:

asset_host_list = ['domain.com', 'domain.org']
asset_host do |asset|
  "http://%s" % asset_host_list[asset.hash % asset_host_list.length]
end

但是,我同意@cimmanon,这种方法很弱。

答案 1 :(得分:0)

实际上,您可以直接将代码移植到SASS:

$domains:        'domain1.com' 'domain2.org' 'domain3.net'
$current-domain: 1

@function get-domain()
  $domain: nth($domains, $current-domain)
  $current-domain: $current-domain + 1
  @if $current-domain > length($domains)
    $current-domain: 1
  @return $domain

然后您可以像这样使用它:

@for $i from 1 through 10
  .element-#{$i}
    background-image: url("http://#{get-domain()}/images/foo.png")

演示:http://sassbin.com/gist/5831644/

此外,您的PHP代码段中还有一些错误。正确的代码是:

$domains = array('domain1', 'domain2', 'domain3');
$domainIdx = 0;

function getDomain(){
    global $domains, $domainIdx;
    $rVal = $domains[$domainIdx];
    $domainIdx = $domainIdx + 1>= count($domains) ? 0 : $domainIdx + 1;
    return $rVal;
}

@cimmanon是绝对正确的。负载平衡的这种方法是业余性和不良实践。