0

这个想法是我使用一些 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?

4

2 回答 2

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

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

于 2013-06-22T16:23:46.000 回答
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;
}

@cimmonon 是绝对正确的。这种负载平衡方法是业余的和糟糕的实践。

于 2013-06-21T15:03:42.260 回答