¿Hay alguna forma de importar un archivo CSS normal con el @import
comando de Sass ? Si bien no estoy usando toda la sintaxis SCSS de sass, todavía disfruto de sus funciones de combinación / compresión, y me gustaría poder usarla sin renombrar todos mis archivos a * .scss
509
@import
en un archivo CSS normal debería generar un CSS @import regular . Eso significa una solicitud HTTP más y no combinar ni comprimir. Si algunas implementaciones se comportan de manera diferente, diría que es una característica no estándar que difiere de la especificación del lenguaje.Respuestas:
Parece que esto no está implementado, al momento de escribir esto:https://github.com/sass/sass/issues/193Para libsass (implementación de C / C ++), la importación funciona de
*.css
la misma manera que para los*.scss
archivos, solo omita la extensión:Esto importará
path/to/file.css
.Vea esta respuesta para más detalles.
Vea esta respuesta para la implementación de Ruby (sass gem)
fuente
@import
declaración no cambia en absoluto y aparece en el archivo CSS resultante, Sass no incluye el archivo CSS referenciado como @GSto está pidiendo. Parece que se implementará en Sass 3.4 o 4.0libsass
al menos. Vea la respuesta stackoverflow.com/questions/7111610/… y PR github.com/sass/libsass/pull/754*.css
la misma manera que para los*.css
archivos" es una tautología. Querías decir que uno de esos es*.scss
, ¿verdad?Después de tener el mismo problema, me confundí con todas las respuestas aquí y los comentarios sobre el repositorio de sass en github.
Solo quiero señalar que, en diciembre de 2014, este problema se ha resuelto. Ahora es posible importar
css
archivos directamente en su archivo sass. El siguiente PR en github resuelve el problema.La sintaxis es la misma que ahora
@import "your/path/to/the/file"
, sin una extensión después del nombre del archivo. Esto importará su archivo directamente. Si agrega*.css
al final, se traducirá en lacss
regla@import url(...)
.En caso de que esté utilizando algunos de los paquetes de módulos nuevos "sofisticados", como el paquete web , es probable que necesite usarlos
~
al comienzo de la ruta. Entonces, si desea importar la siguiente rutanode_modules/bootstrap/src/core.scss
, escribiría algo así@import "~bootstrap/src/core"
.NOTA:
Parece que esto no funciona para todos. Si su intérprete se basa en
libsass
él, debería estar funcionando bien (verifique esto ). Lo probé usando@import
node-sass y está funcionando bien. Desafortunadamente, esto funciona y no funciona en algunas instancias de ruby.fuente
libsass
pero cuando se usa la implementación ruby de sass, parece que esta sintaxis funciona, pero solo si essass-css-importer
necesario. Al menos eso es lo que estoy viendo. ¿Alguien más puede confirmar esto?ruby
enodejs
intérpretes. ¿Ha verificado si no está colocando una extensión después del nombre del archivo? La sintaxis correcta es@import "path/to/style/file
(sin la.css
extensión)Error: File to import not found or unreadable: cssdep/cssfile
. Si creo uncssdep/cssfile.scss
, de repente funciona. Entonces, no es un problema de ruta, por alguna razón todavía no puedo incluir archivos '.css' de SASS :(ruby -v
:ruby 2.2.2p95 (2015-04-13 revision 50295) [x64-mingw32]
sass -v
:Sass 3.4.17 (Selective Steve)
No trabajar aquí@import "node_modules/normalize.css/normalize";
Debe anteponer un guión bajo al archivo css que se incluirá y cambiar su extensión a scss (ej
_yourfile.scss
. :) . Entonces solo tienes que llamarlo así:E incluirá el contenido del archivo, en lugar de utilizar la directiva estándar @import de CSS.
fuente
Esto se implementó y se fusionó a partir de la versión
3.2
( pull # 754 se fusionó el 2 de enero de 2015 paralibsass
, los problemas originalmente se definieron aquí:sass
# 193 # 556 ,libsass
# 318 ).Para abreviar la larga historia, la sintaxis siguiente:
importar (incluir) el archivo CSS sin procesar
la sintaxis es sin.css
extensión en el extremo (resultados en lectura real de parcials[ac]ss|css
e incluyen de ella en línea para SCSS / SASS):@import "path/to/file";
importar el archivo CSS de forma tradicional
La sintaxis va de la manera tradicional, con.css
extensión al final (resultados@import url("path/to/file.css");
en su CSS compilado):@import "path/to/file.css";
Y es muy bueno: ¡esta sintaxis es elegante y lacónica, además de compatible con versiones anteriores! Funciona excelentemente con
libsass
ynode-sass
.__
Para evitar más especulaciones en los comentarios, escribir esto explícitamente: Sass basado en Ruby todavía tiene esta característica sin implementar después de 7 años de discusiones. Al momento de escribir esta respuesta, se promete que en 4.0 habrá una manera simple de lograr esto, probablemente con la ayuda de . Parece que habrá una implementación muy pronto, se asignó la nueva etiqueta
"planificada""Propuesta aceptada" para el problema # 556 y la nueva función.@use
@use
la respuesta puede actualizarse tan pronto como algo cambie .
fuente
Node-sass
es una biblioteca de Node.js LibSass (la versión C de Sass). Ni una sola mención de esolibsass
onode-sass
está basado en Ruby, ni una sola mención sobre la versión RUBY solo en la pregunta original. Por favor, lea atentamente antes de escribir 3 comentarios seguidos la próxima vez. Tengo todas las referencias: según el número 193 todavía no está implementado después de 5 años de discusión para la versión de Ruby, prometen esta funcionalidad solo cuando ver. 4.0 estará disponible.Buenas noticias para todos, Chris Eppstein creó un complemento de brújula con funcionalidad de importación de CSS en línea:
https://github.com/chriseppstein/sass-css-importer
Ahora, importar un archivo CSS es tan fácil como:
fuente
Si tiene un
.css
archivo que no desea modificar, ni cambie su extensión a.scss
( por ejemplo, este archivo es de un proyecto bifurcado que no mantiene ), siempre puede crear un enlace simbólico y luego importarlo a su archivo.scss
.Crea un enlace simbólico:
Importa el archivo de enlace simbólico en un destino
.scss
:Su
.css
archivo de salida de destino contendrá contenido del.scss
archivo de enlace simbólico importado , no una regla de importación CSS ( mencionada por @yaz con el mayor número de votos ). Y no tiene archivos duplicados con diferentes extensiones, lo que significa que cualquier actualización realizada dentro del.css
archivo inicial se importa inmediatamente a su salida de destino.fuente
.css
y el enlace simbólico creado) están disponibles para todos a través de un repositorio compartido, por ejemplo.mklink /H <link> <target>
, y se llama hard link @mrsafraz.Puede usar un tercero
importer
para personalizar la@import
semántica.node-sass-import-once , que funciona con node-sass (para Node.js) puede importar en línea archivos CSS.
Ejemplo de uso directo:
Ejemplo de configuración de grunt-sass :
Tenga en cuenta que node-sass-import-once no puede importar parciales Sass actualmente sin un guión bajo explícito. Por ejemplo con el archivo
partials/_partial.scss
:@import partials/_partial.scss
tiene éxito@import * partials/partial.scss
fallaEn general, tenga en cuenta que un importador personalizado podría cambiar cualquier semántica de importación. Lea los documentos antes de comenzar a usarlo.
fuente
Si estoy en lo cierto, css es compatible con scss para que pueda cambiar la extensión de un css a scss y debería seguir funcionando. Una vez que cambie la extensión, puede importarla y se incluirá en el archivo.
Si no lo haces, sass usará css @import, que es algo que no quieres.
fuente
Descubrí una forma elegante, similar a Rails, de hacerlo. Primero, cambie el nombre de su
.scss
archivo a.scss.erb
, luego use una sintaxis como esta (ejemplo para el recurso CSS CSS Jewellery_js-rails4 ):Por qué no puede alojar el archivo directamente a través de SCSS :
Hacer un
@import
SCSS funciona bien para archivos CSS siempre y cuando explícitamente uses la ruta completa de una forma u otra. En modo de desarrollo,rails s
sirve activos sin compilarlos, por lo que un camino como este funciona ...... porque la ruta alojada es literalmente
/assets/highlight_js/github.css
. Si hace clic con el botón derecho en la página y "ver fuente", luego hace clic en el enlace de la hoja de estilo con lo anterior@import
, verá una línea allí que se parece a:El motor SCSS se traduce
"highlight_js/github.css"
enurl(highlight_js/github.css)
. Esto funcionará a la perfección hasta que decida intentar ejecutarlo en producción donde los activos están precompilados e inyectar un hash en el nombre del archivo. El archivo SCSS seguirá resolviéndose en una estática/assets/highlight_js/github.css
que no fue precompilada y que no existe en producción.Cómo funciona esta solución:
En primer lugar, al mover el
.scss
archivo a.scss.erb
, hemos convertido efectivamente el SCSS en una plantilla para Rails. Ahora, siempre que usemos<%= ... %>
etiquetas de plantilla, el procesador de plantillas de Rails reemplazará estos fragmentos con la salida del código (como cualquier otra plantilla).Establecer
asset_path("highlight_js/github")
en el.scss.erb
archivo hace dos cosas:rake assets:precompile
tarea para precompilar el archivo CSS apropiado.Esto también significa que el motor SCSS ni siquiera analiza el archivo CSS; ¡solo está alojando un enlace! Por lo tanto, no hay parches de mono hokey o soluciones brutas. Servimos un activo CSS a través de SCSS según lo previsto, y usamos una URL para dicho activo CSS como Rails pretendía. ¡Dulce!
fuente
Solución simple:
Todos o casi todos los archivos css también pueden interpretarse como si fueran scss. También permite importarlos dentro de un bloque. Cambie el nombre de css a scss e impórtelo así.
En mi configuración real hago lo siguiente:
Primero copio el archivo .css en uno temporal, esta vez con la extensión .scss. Configuración de ejemplo de Grunt:
Luego puede importar el archivo .scss desde su scss principal (en mi ejemplo, incluso se importa en un bloque):
Nota: esto podría ser peligroso, ya que efectivamente dará como resultado que el CSS se analice varias veces. Verifique su css original para ver si contiene algún artefacto interpretable de scss (es improbable, pero si sucede, el resultado será difícil de depurar y peligroso).
fuente
Ahora es posible usar:
fuente
sass-css-importer
está instalada, se llama a sass con el interruptor-r sass-css-importer
y.css
se omite de la ruta del archivoPuedo confirmar que esto funciona:
Crédito a Chriss Epstein: https://github.com/sass/sass/issues/193
fuente
Simple.
@import "ruta / a / archivo.css";
fuente