Skip to content
On this page

url()

数据 URI 图像内联

Stylus 捆绑了一个可选的名为 url() 的函数,它替换字面的 url() 调用(并使用 base64 有条件地内联它们,使用 数据 URI)。

示例

该函数可通过 require('stylus').url 获得。它接受一个 options 对象,返回一个当 Stylus 看到 url() 时在内部调用的函数。

.define(name, callback) 方法分配了一个可以从 Stylus 源代码调用的 JavaScript 函数。在这种情况下,由于我们的图像在 ./css/images,我们可以忽略 paths 选项(默认情况下,图像查找是相对于正在渲染的文件进行的)。但如果需要,可以更改此行为:

js
stylus(str)
  .set('filename', __dirname + '/css/test.styl')
  .define('url', stylus.url())
  .render(function(err, css){
    // 渲染它
  });
stylus(str)
  .set('filename', __dirname + '/css/test.styl')
  .define('url', stylus.url())
  .render(function(err, css){
    // 渲染它
  });

例如,假设我们的图像位于 ./public/images。我们想使用 url(images/tobi.png)。我们可以将 paths 传递给我们的公共目录,使其成为查找过程的一部分。

同样,如果我们想要 url(tobi.png),我们可以传递 paths: [__dirname + '/public/images']

js
stylus(str)
  .set('filename', __dirname + '/css/test.styl')
  .define('url', stylus.url({ paths: [__dirname + '/public'] }))
  .render(function(err, css){
    // 渲染它
  });
stylus(str)
  .set('filename', __dirname + '/css/test.styl')
  .define('url', stylus.url({ paths: [__dirname + '/public'] }))
  .render(function(err, css){
    // 渲染它
  });

SVG 的 utf8 编码

由于 base64 编码图像实际上会增加原始大小,因此在内联 SVG 时,你可以选择使用 utf8 编码。

有一个内置函数用于此目的:embedurl

css
.embed-with-utf8 {
  background-image: embedurl("circle.svg", "utf8");
}
.embed-with-utf8 {
  background-image: embedurl("circle.svg", "utf8");
}

这将生成 utf8 编码的内联 SVG,而不是 base64 编码。

如果你想使用 JS 定义以便同时使用 paths 和 utf 编码,你需要使用另一个名称定义它,而不是 url()。这是由于 Stylus 中 url() 函数的解析方式:现在无法传递额外的参数,所以你不能仅仅通过调用带第二个参数的 url 来设置编码。但如果你用另一个名称定义 url

js
stylus(str)
  .set('filename', __dirname + '/css/test.styl')
  .define('inline-url', stylus.url({ paths: [__dirname + '/public'] }))
  .render(function(err, css){
    // 渲染它
  });
stylus(str)
  .set('filename', __dirname + '/css/test.styl')
  .define('inline-url', stylus.url({ paths: [__dirname + '/public'] }))
  .render(function(err, css){
    // 渲染它
  });

然后你可以像使用 embedurl 一样使用 inline-url,但增加了 paths 功能:

css
.embed-with-utf8-at-path {
  background-image: inline-url("tobi.svg", "utf8");
}
.embed-with-utf8-at-path {
  background-image: inline-url("tobi.svg", "utf8");
}

选项

  • limit 字节大小限制,默认为 30Kb (30000),使用 false 禁用限制
  • paths 图像解析路径

Released under the MIT License.