Libsass: @import url (http: // ...) Falha para URLs de fonte

Criado em 14 fev. 2014  ·  6Comentários  ·  Fonte: sass/libsass

No meu arquivo Scss, tenho esta linha:
<strong i="6">@import</strong> url(http://fonts.googleapis.com/css?family=Titillium+Web:400,300,200,600);

Resultados reais:

Quando o arquivo é compilado com libsass, a linha @import é completamente apagada e não aparece no arquivo de saída.

Resultados esperados:

A linha @import deve ser copiada, literalmente, para o arquivo CSS final porque ela não tem como destino um arquivo local. Ele precisa aparecer no arquivo CSS para que minha fonte seja carregada corretamente.

Ruby Sass se comporta corretamente. Ele move a instrução @import , literalmente, para o arquivo CSS compilado.

Nota técnica:

Ao consertar isso, não é suficiente testar a presença de http:// . Muitas vezes, as pessoas usarão uma URL sem protocolo para que a importação funcione nas páginas HTTP e HTTPS. Um exemplo disso seria:

<strong i="20">@import</strong> url(//path/to/some/file.css);

As barras duplas que precedem a instrução precisam ser tratadas como uma URL para um recurso remoto na Internet e, portanto, essa instrução @import precisa ser colocada, literalmente, no arquivo CSS compilado.

Dev - Test Written

Comentários muito úteis

Um caso de teste simplificado:

.test {
    content: '';
}
<strong i="6">@import</strong> url('test.css');

Ruby Sass reestrutura corretamente o CSS de forma que @import (s) fiquem no topo:

<strong i="11">@import</strong> url("test.css");
.test {
  content: ''; }

Libsass produz incorretamente:

.test {
  content: ''; }

<strong i="15">@import</strong> url('test.css');

Conforme observado acima, a especificação CSS diz: "quaisquer regras @import devem preceder todas as outras regras (exceto a regra @charset , se houver)."

Dependendo de como o Sass está estruturado, este bug pode e irá produzir código onde @import regras não são inseridas na saída CSS corretamente e são subsequentemente ignoradas.


Um pequeno bug / diferença relacionado em Libsass e Ruby Sass é o resultado do seguinte teste:

<strong i="26">@import</strong> "//example.com/test.css";

Ruby Sass:

<strong i="30">@import</strong> "//example.com/test.css";

Libsass:

<strong i="34">@import</strong> url("//example.com/test.css");

Não prevejo nenhum problema decorrente desse bug em particular, porém é uma diferença interessante a se notar.

Todos 6 comentários

Boa pegada. Você também pode @import a .css arquivo, mas parece que está verificando explicitamente por uma extensão .css . O seguinte pode servir como uma solução alternativa:

<strong i="9">@import</strong> "http://fonts.googleapis.com/css?family=Titillium+Web:400,300,200,600.css";

Mas, realmente, isso deve funcionar também:

<strong i="13">@import</strong> "http://fonts.googleapis.com/css?family=Titillium+Web:400,300,200,600";

O Libsass não deve "validar" importações que visam um arquivo remoto (um na Internet). Se o URI dentro da instrução de importação for remoto (o que pode ser verificado verificando se contém uma sequência // ), então a libsass deve simplesmente lançar toda a instrução @import no CSS.

Tentei seu exemplo no branch master e a importação aparece na saída (embora o LibSass não o mova para o início do arquivo da maneira que o Ruby Sass faz) ... você puxou nas últimas semanas?

A importação deve estar no início do arquivo. Isso está claramente na especificação CSS: @import deve estar no topo.

Enviado do meu iPhone

Em 14 de fevereiro de 2014, às 15h02, Aaron Leung [email protected] escreveu:

Tentei seu exemplo no branch master e a importação aparece na saída (embora o LibSass não o mova para o início do arquivo da maneira que o Ruby Sass faz) ... você puxou nas últimas semanas?

-
Responda a este e-mail diretamente ou visualize-o no GitHub.

Um caso de teste simplificado:

.test {
    content: '';
}
<strong i="6">@import</strong> url('test.css');

Ruby Sass reestrutura corretamente o CSS de forma que @import (s) fiquem no topo:

<strong i="11">@import</strong> url("test.css");
.test {
  content: ''; }

Libsass produz incorretamente:

.test {
  content: ''; }

<strong i="15">@import</strong> url('test.css');

Conforme observado acima, a especificação CSS diz: "quaisquer regras @import devem preceder todas as outras regras (exceto a regra @charset , se houver)."

Dependendo de como o Sass está estruturado, este bug pode e irá produzir código onde @import regras não são inseridas na saída CSS corretamente e são subsequentemente ignoradas.


Um pequeno bug / diferença relacionado em Libsass e Ruby Sass é o resultado do seguinte teste:

<strong i="26">@import</strong> "//example.com/test.css";

Ruby Sass:

<strong i="30">@import</strong> "//example.com/test.css";

Libsass:

<strong i="34">@import</strong> url("//example.com/test.css");

Não prevejo nenhum problema decorrente desse bug em particular, porém é uma diferença interessante a se notar.

Ok, isso deve ser consertado agora. Por favor, tente.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

xzyfer picture xzyfer  ·  9Comentários

xzyfer picture xzyfer  ·  7Comentários

nex3 picture nex3  ·  9Comentários

schneems picture schneems  ·  9Comentários

asottile picture asottile  ·  6Comentários