importar archivo .css a archivo .less

228

¿Puedes importar archivos .css en archivos .less ...?

Estoy bastante familiarizado con menos y lo uso para todo mi desarrollo. Regularmente uso una estructura de la siguiente manera:

@import "normalize";

//styles here

@import "mixins";
@import "media-queries";
@import "print";

Todas las importaciones son otros archivos .less y todo funciona como debería.

Mi problema actual es este: quiero importar un archivo .css a .less que haga referencia a los estilos utilizados en el archivo .css de la siguiente manera:

@import "../style.css";

.small {
    font-size:60%;
    .type;
}
// other styles here

El archivo .css contiene una clase llamada .typepero cuando trato de compilar el archivo .less obtengo el errorNameError: .type is undefined

¿El archivo .less no importará archivos .css, solo otros archivos .less ...? ¿O estoy haciendo referencia equivocada ...?

Sr. Jonny Wood
fuente
55
LESS recurre a CSS, por lo que debería poder cambiar el nombre de style.css a style.less, luego importarlo como de costumbre ... a menos que, por supuesto, renombrar style.css no sea una opción
jackwanders el
3
Sí, desafortunadamente cambiar el nombre del archivo .css no es realmente posible.
Sr. Jonny Wood
1
Tiene el mismo problema Apoye
Yaroslav el
55
si no necesita hacer referencia al .css externamente, y al mismo tiempo no debe modificar (renombrar) el archivo .css, puede crear un enlace simbólico que tenga la .lessextensión. Luego consúltelo como un .lessarchivo. Al ser un enlace simbólico, se libera de la carga para sincronizarlos a medida que sus cambios .css afectan de inmediato al archivo .less que se importa. El inconveniente es que debe volver a compilar el CSS final después de los cambios posteriores. Para obtener información sobre MKLINK /?
cómo
@jackwanders, el cambio de nombre no es necesario, ya que MENOS recurre a CSS (como usted señala correctamente). Puede importar el .cssarchivo utilizando la (less)directiva en línea y aprovechar el hecho de que la .csssintaxis es una .lesssintaxis válida
ira

Respuestas:

316

Puede forzar que un archivo se interprete como un tipo particular especificando una opción, por ejemplo:

@import (css) "lib";

saldrá

@import "lib";

y

@import (less) "lib.css";

importará el lib.cssarchivo y lo tratará como menos. Si especifica que un archivo es menor y no incluye una extensión, no se agregará ninguno.

Fractalf
fuente
1
Esta es la respuesta correcta. El tercero importará + compilará el código CSS como menos código y no dejará la directiva intacta.
CMCDragonkai
1
Creo que @import (include) "lib.css" debería usarse. No me gusta la semántica de mentirle al compilador. Ciertamente, cuando sabes que no hay ningún código MENOS en el archivo.
16
Esto creará una solicitud http adicional para foo.css, por lo que la (inline)directiva (ver stackoverflow.com/a/22594082/160968 ) ahora es preferible
Urs
1
(inline)no funcionará porque no transforma referencias externas a fuentes u otros @importarchivos CSS ed. Acaba de terminar con un archivo css más grande que genera muchas solicitudes HTTP 404 ...
user3338098
Anulación de la última edición, ya que era simplemente incorrecto y no responder a la P
siete fases-max
246

Si desea que su CSS se copie en la salida sin procesarse, puede usar la (inline)directiva . p.ej,

@import (inline) '../timepicker/jquery.ui.timepicker.css';
mpen
fuente
77
Perfecto. Esto funciona bien cuando desea concatenar algunos archivos CSS (por ejemplo, en un ie7.less), pero no necesariamente procesarlos (por ejemplo, bootstrap-ie7 usa expresiones, que MENOS no maneja bien).
Joe
44
Muy útil. @import (css) "styles.css";No funcionó para mí.
ivkremer
10
Ambos abordan diferentes casos de uso. Con (css), la @importdirectiva permanecerá tal cual y, como resultado, el navegador cargará el archivo CSS en tiempo de ejecución; con (inline), los contenidos del archivo CSS se importan realmente a la hoja de estilo compilada, que es lo que desea si ese archivo está fuera de su raíz web, por ejemplo. Tenga en cuenta que el comportamiento predeterminado al @importcrear un .cssarchivo es el mismo que con el (css)indicador: lea los documentos para obtener más información :)
neemzy
así que esto obviamente no funcionará si su archivo css tiene @importdirectivas, ya que eso requeriría "procesamiento".
user3338098
¿'En línea' significa que todas sus importaciones también estarán en línea? ¿Hay alguna manera de recursivamente en línea?
farola
29

Tuve que usar lo siguiente con la versión 1.7.4

@import (less) "foo.css"

Sé que la respuesta aceptada es @import (css) "foo.css"pero no funcionó. Si desea reutilizar su clase css en su nuevo archivo less, debe usar (less)y no (css).

Revisa la documentación .

Gudradain
fuente
2
La respuesta aceptada tenía la opción correcta inicialmente (sí, (less)es la única opción si desea reutilizar algunos estilos de un archivo CSS) pero por alguna razón @Fractalf eliminó la parte correcta con su última edición.
seven-phase-max
1
Puede combinar "referencia" y "menos":@import (less, reference) "foo.css"
Skarllot
28

Cambie la extensión del archivo css a .less. No necesitas escribir MENOS en ella; todo CSS es válido MENOS (excepto las cosas de MS de las que tienes que escapar, pero ese es otro problema).

Según la respuesta de Fractalf, esto se corrige en v1.4.0

Mathletics
fuente
44
Técnicamente, eso no es importar un archivo CSS.
nilskp
@nilskp tienes razón; pero si desea usar las clases en otro archivo, necesita un archivo MENOS, no CSS.
Mathletics
1
@nilskp, ¿estás diciendo que cambiar la extensión es demasiado pedir para que el archivo se analice como MENOS?
Mathletics
23
Sí, claro que lo es. Trata de pensar fuera de algún pequeño proyecto de casa donde poseas todos los archivos. Piense en proyectos más grandes, de múltiples personas, donde no todos están usando MENOS. Hay toneladas de casos de uso en los que no se pueden cambiar los nombres de los archivos.
nilskp
1
Debes preocuparte si tu css contiene algo como: calc (100% - 45px); y quieres eso en el navegador. Si menos procesa el archivo como menos, el resultado final será: calc (55%); porque menos lo hace el calc.
Christof Aenderl
8

Desde el sitio web LESS :

Si desea importar un archivo CSS y no quiere que LESS lo procese, simplemente use la extensión .css:

@import "lib.css"; La directiva se dejará tal cual y terminará en la salida CSS.

Como jitbit señala en los comentarios a continuación, esto realmente solo es útil para fines de desarrollo, ya que no querría tener un @importancho de banda precioso que consume innecesariamente .

webdevkit
fuente
14
Esto no IMPORTARÁ el archivo, dejará la directiva @import intacta. Todavía funcionará, pero debe evitar la importación de CSS - mire este developers.google.com/speed/docs/best-practices/…
Alex
55
Gracias por la información @jitbit. Personalmente, me resulta más fácil de usar @importdurante el desarrollo, luego combino y minimizo los archivos importados en una sola hoja de estilo cuando paso a producción.
webdevkit
1
Si lee la pregunta cuidadosamente (y no solo la línea del encabezado), verá que el OP quiere hacer referencia a una clase en el archivo css como un mixin, lo que no es posible si se analiza como una simple importación css.
asombro
7

Prueba esto :

@import "lib.css";

De la documentación oficial:

Puede importar css y menos archivos. Solo se procesan menos declaraciones de importación de archivos, las declaraciones de importación de archivos css se mantienen como están. Si desea importar un archivo CSS y no quiere que LESS lo procese, simplemente use la extensión .css:


Fuente: http://lesscss.org/

Dr. Kameleon
fuente
2
Si lee la pregunta cuidadosamente (y no solo la línea del encabezado), verá que el OP quiere hacer referencia a una clase en el archivo css como un mixin, lo que no es posible si se analiza como una simple importación css.
asombro
6

Si solo desea importar un archivo CSS como referencia (por ejemplo, para usar las clases en Mixins) pero no incluye el archivo CSS completo en el resultado, puede usar @import (less,reference) "reference.css";:

my.less

 @import (less,reference) "reference.css";
 .my-class{
     background-color:black;
     .reference-class;
     color:blue;
 }

referencia.css

.reference-class{
    border: 1px solid red;
}

* Resultado (my.css) con lessc my.less out/my.css*

.my-class {
  background-color: black;
  border: 1px solid red;
  color: blue;
}

Estoy usando lessc 2.5.3

hinneLinks
fuente
Esto era lo que necesitaba. Sin embargo, tuve que usar la sintaxis se extienden: &:extend(.reference-class all);. Hacer referencia directa a la clase resultó en un error de compilación.
Jens Neubauer
4

Si desea importar un archivo CSS que debe tratarse como menos, use esta línea:

.ie {
  @import (less) 'ie.css';
}
Charles
fuente
3

desde 1.5.0 puede usar la palabra clave 'en línea'.

Ejemplo: @import (en línea) "not-less-compatible.css";

Lo usará cuando un archivo CSS no sea menos compatible; Esto se debe a que aunque Less admite la mayoría de los estándares CSS conocidos, no admite comentarios en algunos lugares y no admite todos los hacks CSS conocidos sin modificar el CSS. Por lo tanto, puede usar esto para incluir el archivo en la salida para que todos los CSS estén en un archivo.

(fuente: http://lesscss.org/features/#import-directives-feature )

Pieter-Jan
fuente