Existe alguma maneira de importar um arquivo CSS regular com o @import
comando de Sass ? Embora não esteja usando toda a sintaxe SCSS do sass, ainda gosto de combinar os recursos de compactação / compactação e gostaria de poder usá-lo sem renomear todos os meus arquivos para * .scss
509
@import
em um arquivo CSS regular deve gerar apenas um CSS @import regular . Isso significa mais uma solicitação HTTP e nenhuma combinação ou compactação. Se algumas implementações se comportarem de maneira diferente, eu diria que é um recurso não padrão que diverge das especificações de idioma.Respostas:
Parece que isso não foi implementado, no momento em que este artigo foi escrito:https://github.com/sass/sass/issues/193Para libsass (implementação C / C ++), a importação funciona
*.css
da mesma maneira que para*.scss
arquivos - apenas omita a extensão:Isso será importado
path/to/file.css
.Veja esta resposta para mais detalhes.
Veja esta resposta para implementação do Ruby (sass gem)
fonte
@import
instrução não é alterada e aparece no arquivo CSS resultante. O Sass não inclui o arquivo CSS referenciado como o @GSto está perguntando. Parece que será implementado no Sass 3.4 ou 4.0libsass
pelo menos. Veja as respostas stackoverflow.com/questions/7111610/… e PR github.com/sass/libsass/pull/754*.css
da mesma maneira que para*.css
arquivos" é uma tautologia. Você queria que um deles estivesse*.scss
, certo?Depois de ter o mesmo problema, fiquei confuso com todas as respostas aqui e os comentários sobre o repositório do sass no github.
Quero apenas ressaltar que, em dezembro de 2014, esse problema foi resolvido. Agora é possível importar
css
arquivos diretamente para o seu arquivo sass. O seguinte PR no github resolve o problema.A sintaxe é a mesma de agora -
@import "your/path/to/the/file"
, sem uma extensão após o nome do arquivo. Isso importará seu arquivo diretamente. Se você anexar*.css
no final, ele será convertido nacss
regra@import url(...)
.Caso esteja usando alguns dos novos empacotadores de módulos "sofisticados", como o webpack , você provavelmente precisará usar o uso
~
no início do caminho. Portanto, se você deseja importar o caminho a seguirnode_modules/bootstrap/src/core.scss
, escreva algo parecido@import "~bootstrap/src/core"
.NOTA:
Parece que isso não está funcionando para todos. Se o seu intérprete é baseado em
libsass
que deve estar funcionando bem (check-out este ). Eu testei usando@import
no node-sass e está funcionando bem. Infelizmente, isso funciona e não funciona em algumas instâncias de ruby.fonte
libsass
mas ao usar a implementação ruby do sass, parece que essa sintaxe funciona, mas apenas se vocêsass-css-importer
precisar. Pelo menos é o que estou vendo. Mais alguém pode confirmar isso?ruby
enodejs
intérpretes. Você verificou se não está colocando uma extensão após o nome do arquivo? A sintaxe correta é@import "path/to/style/file
(sem a.css
extensão)Error: File to import not found or unreadable: cssdep/cssfile
. Se eu criar umcssdep/cssfile.scss
, de repente funciona. Portanto, não é um problema de caminho, por algum motivo ainda não consigo incluir arquivos '.css' do SASS :(ruby -v
:ruby 2.2.2p95 (2015-04-13 revision 50295) [x64-mingw32]
sass -v
:Sass 3.4.17 (Selective Steve)
Não trabalhar aqui@import "node_modules/normalize.css/normalize";
Você deve acrescentar um sublinhado ao arquivo css a ser incluído e mudar sua extensão para scss (ex:)
_yourfile.scss
. Então você só precisa chamar assim:E incluirá o conteúdo do arquivo, em vez de usar a diretiva CSS @import padrão.
fonte
Isso foi implementado e mesclado a partir da versão
3.2
( pull # 754 mesclado em 2 de janeiro de 2015 paralibsass
, os problemas originalmente foram definidos aqui:sass
# 193 # 556 ,libsass
# 318 ).Para encurtar a longa história, a sintaxe a seguir:
para importar (incluir) o arquivo CSS bruto
a sintaxe está sem.css
extensão no final (resulta em leitura real parcials[ac]ss|css
e inclui-a em linha com SCSS / SASS):@import "path/to/file";
importar o arquivo CSS de uma maneira tradicional
A sintaxe segue a maneira tradicional, com.css
extensão no final (resulta@import url("path/to/file.css");
em seu CSS compilado):@import "path/to/file.css";
E é muito bom: essa sintaxe é elegante e lacônica, além de compatível com versões anteriores! Funciona excelentemente com
libsass
enode-sass
.__
Para evitar mais especulações nos comentários, escreva isso explicitamente: O Sass baseado em Ruby ainda tem esse recurso não implementado após 7 anos de discussões. No momento em que escrevemos esta resposta, prometeu-se que na versão 4.0 haveria uma maneira simples de conseguir isso, provavelmente com a ajuda de . Parece que haverá uma implementação muito em breve, a nova tag
"planejada""Proposta Aceita" foi atribuída ao problema nº 556 e ao novo recurso.@use
@use
A resposta pode ser atualizada assim que algo mudar .
fonte
Node-sass
é uma biblioteca Node.js. LibSass (a versão C do Sass). Nem uma única menção que élibsass
ounode-sass
é baseada em Ruby, nem uma única menção sobre a versão do RUBY apenas na pergunta original. Leia com atenção antes de escrever 3 comentários consecutivos da próxima vez. Eu tenho todas as referências: de acordo com o número 193, ele ainda não foi implementado após 5 anos de discussão para a versão Ruby, eles prometem essa funcionalidade somente quando ver. 4.0 estará disponível.Boas notícias a todos, Chris Eppstein criou um plug-in de bússola com a funcionalidade de importação de CSS embutida:
https://github.com/chriseppstein/sass-css-importer
Agora, importar um arquivo CSS é tão fácil quanto:
fonte
Se você possui um
.css
arquivo que não deseja modificar, nem mude sua extensão para.scss
( por exemplo, esse arquivo é de um projeto bifurcado que você não mantém ), você sempre pode criar um link simbólico e depois importá-lo para o seu.scss
.Cria um link simbólico:
Importa o arquivo de link simbólico para um destino
.scss
:Sua saída alvo
.css
arquivo de manterá o conteúdo do.scss
arquivo de link simbólico importado , não uma regra de importação de CSS ( mencionada por @yaz com os maiores votos para comentários ). E você não possui arquivos duplicados com extensões diferentes, o que significa que qualquer atualização feita dentro do.css
arquivo inicial é importada imediatamente para a saída de destino.fonte
.css
e o link simbólico criado) estão disponíveis para todos através de um repositório compartilhado, por exemplo.mklink /H <link> <target>
e é chamada de link físico @mrsafraz.Você pode usar terceiros
importer
para personalizar a@import
semântica.node-sass-import-once , que funciona com o node-sass (para Node.js), pode importar arquivos CSS em linha.
Exemplo de uso direto:
Exemplo de configuração do grunt-sass :
Observe que o node-sass-import-once atualmente não pode importar parciais do Sass sem um sublinhado inicial explícito. Por exemplo, com o arquivo
partials/_partial.scss
:@import partials/_partial.scss
consegue@import * partials/partial.scss
falhaEm geral, esteja ciente de que um importador personalizado pode alterar qualquer semântica de importação. Leia os documentos antes de começar a usá-lo.
fonte
Se eu estiver correto, o css é compatível com o scss, portanto você pode alterar a extensão de um css para scss e ele deve continuar funcionando. Depois de alterar a extensão, você pode importá-la e ela será incluída no arquivo.
Se você não fizer isso, o sass usará o css @import, que é algo que você não deseja.
fonte
Eu descobri uma maneira elegante e parecida com o Rails de fazer isso. Primeiro, renomeie seu
.scss
arquivo para.scss.erb
, em seguida, use sintaxe como esta (exemplo para o recurso CSS de destaque_js-rails4 gem ):Por que você não pode hospedar o arquivo diretamente via SCSS :
Fazer um
@import
no SCSS funciona bem para arquivos CSS, desde que você use explicitamente o caminho completo de uma maneira ou de outra. No modo de desenvolvimento,rails s
atende ativos sem compilá-los, portanto, um caminho como esse funciona ...... porque o caminho hospedado é literalmente
/assets/highlight_js/github.css
. Se você clicar com o botão direito do mouse na página e "visualizar código-fonte" e clicar no link da folha de estilo com as opções acima@import
, verá uma linha que se parece com:O mecanismo SCSS é convertido
"highlight_js/github.css"
emurl(highlight_js/github.css)
. Isso funcionará muito bem até você decidir executá-lo na produção em que os ativos são pré-compilados com um hash injetado no nome do arquivo. O arquivo SCSS ainda resolverá uma estática/assets/highlight_js/github.css
que não foi pré-compilada e não existe na produção.Como esta solução funciona:
Primeiramente, movendo o
.scss
arquivo para.scss.erb
, transformamos efetivamente o SCSS em um modelo para o Rails. Agora, sempre que usamos<%= ... %>
tags de modelo, o processador de modelo do Rails substituirá esses trechos pela saída do código (como qualquer outro modelo).A indicação
asset_path("highlight_js/github")
no.scss.erb
arquivo faz duas coisas:rake assets:precompile
tarefa para pré-compilar o arquivo CSS apropriado.Isso também significa que o mecanismo SCSS nem está analisando o arquivo CSS; está apenas hospedando um link para ele! Portanto, não há patches de macaco hokey ou soluções grosseiras. Estamos servindo um recurso CSS via SCSS, conforme pretendido, e usando um URL para o referido recurso CSS conforme o Rails. Doce!
fonte
Solução simples:
Todo ou quase todo arquivo css também pode ser interpretado como se fosse scss. Também permite importá-los dentro de um bloco. Renomeie o css para scss e importe-o.
Na minha configuração real, faço o seguinte:
Primeiro, copio o arquivo .css para um temporário, desta vez com a extensão .scss. Exemplo de configuração do Grunt:
Então você pode importar o arquivo .scss do seu pai scss (no meu exemplo, ele é importado para um bloco):
Nota: isso pode ser perigoso, porque resultará efetivamente que o css será analisado várias vezes. Verifique se o css original contém algum artefato interpretável por scss (é improvável, mas se acontecer, o resultado será difícil de depurar e perigoso).
fonte
Agora é possível usar:
fonte
sass-css-importer
está instalado, sass é chamado com interruptor-r sass-css-importer
e.css
é omitido do caminho do arquivoPosso confirmar que funciona:
Crédito para Chriss Epstein: https://github.com/sass/sass/issues/193
fonte
Simples.
@import "caminho / para / file.css";
fonte