Est-il possible d'importer un fichier CSS normal avec la @import
commande de Sass ? Bien que je n'utilise pas toute la syntaxe SCSS de sass, j'apprécie toujours la combinaison / compression des fonctionnalités, et j'aimerais pouvoir l'utiliser sans renommer tous mes fichiers en * .scss
509
@import
dans un fichier CSS normal devrait simplement générer un CSS @import régulier . Cela signifie une demande HTTP de plus et aucune combinaison ou compression. Si certaines implémentations se comportent différemment, je dirais que c'est une fonctionnalité non standard qui diffère de la spécification du langage.Réponses:
Il semble que cela ne soit pas implémenté au moment de la rédaction de cet article:https://github.com/sass/sass/issues/193Pour libsass (implémentation C / C ++), l'importation fonctionne de
*.css
la même manière que pour les*.scss
fichiers - omettez simplement l'extension:Cela importera
path/to/file.css
.Voir cette réponse pour plus de détails.
Voir cette réponse pour l'implémentation de Ruby (sass gem)
la source
@import
instruction n'est pas modifiée du tout et apparaît dans le fichier CSS résultant, Sass n'inclut pas le fichier CSS référencé comme le demande @GSto. Il semble qu'il sera implémenté dans Sass 3.4 ou 4.0libsass
au moins. Voir la réponse stackoverflow.com/questions/7111610/… et PR github.com/sass/libsass/pull/754*.css
la même manière que pour les*.css
fichiers" est une tautologie. Vous vouliez que l'un d'entre eux soit*.scss
, non?Après avoir eu le même problème, je me suis confondu avec toutes les réponses ici et les commentaires sur le référentiel de sass dans github.
Je veux simplement souligner qu'en décembre 2014, ce problème a été résolu. Il est désormais possible d'importer des
css
fichiers directement dans votre fichier sass. Le PR suivant dans github résout le problème.La syntaxe est la même que maintenant -
@import "your/path/to/the/file"
, sans extension après le nom du fichier. Cela importera votre fichier directement. Si vous ajoutez*.css
à la fin, cela se traduira par lacss
règle@import url(...)
.Dans le cas où vous utilisez certains des nouveaux bundlers de modules "fantaisistes" tels que webpack , vous devrez probablement utiliser use
~
au début du chemin. Donc, si vous voulez importer le chemin suivant,node_modules/bootstrap/src/core.scss
vous écrirez quelque chose comme@import "~bootstrap/src/core"
.REMARQUE:
Il semble que cela ne fonctionne pas pour tout le monde. Si votre interprète est basé sur
libsass
elle devrait fonctionner correctement (consultez ceci ). J'ai testé l'utilisation@import
de node-sass et cela fonctionne bien. Malheureusement, cela fonctionne et ne fonctionne pas sur certaines instances de rubis.la source
libsass
mais lorsque vous utilisez l'implémentation ruby de sass, il semble que cette syntaxe fonctionne, mais seulement si vous en avezsass-css-importer
besoin. C'est du moins ce que je vois. Quelqu'un d'autre peut-il confirmer cela?ruby
et lesnodejs
interprètes. Avez-vous vérifié si vous ne placez pas d'extension après le nom du fichier? La syntaxe correcte est@import "path/to/style/file
(sans l'.css
extension)Error: File to import not found or unreadable: cssdep/cssfile
. Si je crée uncssdep/cssfile.scss
ça marche soudainement. Ce n'est donc pas un problème de chemin, pour une raison quelconque, je ne peux toujours pas inclure les fichiers '.css' de SASS :(ruby -v
:ruby 2.2.2p95 (2015-04-13 revision 50295) [x64-mingw32]
sass -v
:Sass 3.4.17 (Selective Steve)
Ne fonctionne pas ici@import "node_modules/normalize.css/normalize";
Vous devez ajouter un trait de soulignement au fichier css à inclure et basculer son extension sur scss (ex:)
_yourfile.scss
. Ensuite, il vous suffit de l'appeler de cette façon:Et il inclura le contenu du fichier, au lieu d'utiliser la directive CSS @import standard.
la source
Cela a été implémenté et fusionné à partir de la version
3.2
( pull # 754 fusionné le 2 janvier 2015 pourlibsass
, les problèmes étaient définis à l'origine ici:sass
# 193 # 556 ,libsass
# 318 ).Pour abréger la longue histoire, la syntaxe suivante:
importer (inclure) le fichier CSS brut
la syntaxe est sans.css
extension à la fin (entraîne une lecture réelle du partiels[ac]ss|css
et l'inclut en ligne dans SCSS / SASS):@import "path/to/file";
importer le fichier CSS de manière traditionnelle
la syntaxe va de façon traditionnelle, avec l'.css
extension à la fin (résultats@import url("path/to/file.css");
dans votre CSS compilé):@import "path/to/file.css";
Et c'est sacrément bon: cette syntaxe est élégante et laconique, plus rétrocompatible! Il fonctionne parfaitement avec
libsass
etnode-sass
.__
Pour éviter d'autres spéculations dans les commentaires, écrivez ceci explicitement: Sass basé sur Ruby a toujours cette fonctionnalité non implémentée après 7 ans de discussions. Au moment d'écrire cette réponse, il est promis qu'en 4.0, il y aura un moyen simple d'accomplir cela, probablement avec l'aide de . Il semble qu'il y aura une mise en œuvre très bientôt, la nouvelle
« prévu »tag « Proposition acceptée » a été attribué à la question # 556 et la nouvelle fonction.@use
@use
la réponse peut être mise à jour dès que quelque chose change .
la source
Node-sass
est une bibliothèque Node.js LibSass (la version C de Sass). Pas une seule mentionlibsass
ounode-sass
basée sur Ruby, pas une seule mention de la version RUBY uniquement dans la question d'origine. Veuillez lire attentivement avant d'écrire 3 commentaires d'affilée la prochaine fois. J'ai toutes les références: selon le numéro # 193, il n'est toujours pas implémenté après 5 ans de discussion pour la version Ruby, ils promettent cette fonctionnalité uniquement quand ver. 4.0 sera disponible.Bonne nouvelle à tous, Chris Eppstein a créé un plugin de boussole avec une fonctionnalité d'importation css en ligne:
https://github.com/chriseppstein/sass-css-importer
Maintenant, importer un fichier CSS est aussi simple que:
la source
Si vous avez un
.css
fichier que vous ne souhaitez pas modifier, ni ne changez son extension.scss
( par exemple, ce fichier provient d'un projet forké que vous ne gérez pas ), vous pouvez toujours créer un lien symbolique, puis l'importer dans votre.scss
.Crée un lien symbolique:
Importe un fichier de lien symbolique dans une cible
.scss
:Votre
.css
fichier de sortie cible va contenir le contenu du.scss
fichier de lien symbolique importé , pas une règle d'importation CSS ( mentionnée par @yaz avec les votes de commentaires les plus élevés ). Et vous n'avez pas de fichiers dupliqués avec des extensions différentes, ce qui signifie que toute mise à jour effectuée dans le.css
fichier initial est immédiatement importée dans votre sortie cible.la source
.css
et le lien symbolique créé) sont disponibles pour tout le monde via un référentiel partagé, par exemple.mklink /H <link> <target>
, et elle s'appelle lien dur @mrsafraz.Vous pouvez utiliser un tiers
importer
pour personnaliser la@import
sémantique.node-sass-import-once , qui fonctionne avec node-sass (pour Node.js) peut importer des fichiers CSS en ligne.
Exemple d'utilisation directe:
Exemple de configuration grunt-sass :
Notez que node-sass-import-once ne peut pas actuellement importer des partiels Sass sans un soulignement explicite. Par exemple avec le fichier
partials/_partial.scss
:@import partials/_partial.scss
réussit@import * partials/partial.scss
échoueEn général, sachez qu'un importateur personnalisé peut modifier toute sémantique d'importation. Lisez les documents avant de commencer à l'utiliser.
la source
Si je suis correct, css est compatible avec scss, vous pouvez donc changer l'extension d'un css en scss et cela devrait continuer à fonctionner. Une fois que vous avez modifié l'extension, vous pouvez l'importer et elle sera incluse dans le fichier.
Si vous ne le faites pas, sass utilisera le css @import qui est quelque chose que vous ne voulez pas.
la source
J'ai trouvé une façon élégante de faire Rails. Tout d'abord, renommez votre
.scss
fichier en.scss.erb
, puis utilisez une syntaxe comme celle-ci (exemple pour l' élément CSS CSS highlight_js-rails4 gem ):Pourquoi vous ne pouvez pas héberger le fichier directement via SCSS :
Faire un
@import
dans SCSS fonctionne très bien pour les fichiers CSS tant que vous utilisez explicitement le chemin complet d'une manière ou d'une autre. En mode développement,rails s
sert les actifs sans les compiler, donc un chemin comme celui-ci fonctionne ...... car le chemin hébergé est littéralement
/assets/highlight_js/github.css
. Si vous faites un clic droit sur la page et "voir la source", puis cliquez sur le lien pour la feuille de style avec ce qui précède@import
, vous verrez une ligne là-dedans qui ressemble à:Le moteur SCSS se traduit
"highlight_js/github.css"
parurl(highlight_js/github.css)
. Cela fonctionnera parfaitement jusqu'à ce que vous décidiez d'essayer de l'exécuter en production où les ressources sont précompilées ont un hachage injecté dans le nom du fichier. Le fichier SCSS sera toujours résolu en un état statique/assets/highlight_js/github.css
qui n'a pas été précompilé et qui n'existe pas en production.Comment fonctionne cette solution:
Premièrement, en déplaçant le
.scss
fichier vers.scss.erb
, nous avons effectivement transformé le SCSS en un modèle pour Rails. Maintenant, chaque fois que nous utilisons<%= ... %>
balises de modèle, le processeur de modèle Rails remplacera ces extraits par la sortie du code (comme tout autre modèle).La mention
asset_path("highlight_js/github")
dans le.scss.erb
fichier fait deux choses:rake assets:precompile
tâche pour précompiler le fichier CSS approprié.Cela signifie également que le moteur SCSS n'analyse même pas le fichier CSS; il s'agit simplement d'héberger un lien vers celui-ci! Il n'y a donc pas de correctifs de singe hokey ou de solutions de contournement grossières. Nous servons un actif CSS via SCSS comme prévu, et utilisons une URL vers cet actif CSS comme prévu par Rails. Doux!
la source
Solution simple:
Tout ou presque tout fichier css peut également être interprété comme s'il s'agissait de scss. Il permet également de les importer dans un bloc. Renommez le css en scss et importez-le.
Dans ma configuration actuelle, je fais ce qui suit:
Je copie d'abord le fichier .css dans un fichier temporaire, cette fois avec l'extension .scss. Exemple de configuration de Grunt:
Ensuite, vous pouvez importer le fichier .scss depuis votre scss parent (dans mon exemple, il est même importé dans un bloc):
Remarque: cela peut être dangereux, car il en résultera que le css sera analysé plusieurs fois. Vérifiez votre css d'origine pour qu'il contient tout artefact interprétable par scss (il est improbable, mais si cela se produit, le résultat sera difficile à déboguer et dangereux).
la source
Il est désormais possible d'utiliser:
la source
sass-css-importer
est installé, sass est appelé avec switch-r sass-css-importer
et.css
est omis du chemin du fichierJe peux confirmer que cela fonctionne:
Crédit à Chriss Epstein: https://github.com/sass/sass/issues/193
la source
Facile.
@import "chemin / vers / fichier.css";
la source