importare il file .css nel file .less


228

Puoi importare file .css in file .less ...?

Conosco meno con meno e lo uso per tutto il mio sviluppo. Uso regolarmente una struttura come segue:

@import "normalize";

//styles here

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

Tutte le importazioni sono altri file .less e tutto funziona come dovrebbe.

Il mio problema attuale è questo: voglio importare un file .css in .less che fa riferimento agli stili utilizzati nel file .css come segue:

@import "../style.css";

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

Il file .css contiene una classe chiamata .typema quando provo a compilare il file .less ottengo l'erroreNameError: .type is undefined

Il file .less non importerà i file .css, solo altri file .less ...? O sto facendo riferimento ad esso sbagliato ...?!


5
MENO ricade in CSS, quindi dovresti essere in grado di rinominare style.css in style.less, quindi importarlo come al solito ... a meno che ovviamente rinominare style.css non sia un'opzione
jackwanders

3
sì, sfortunatamente non è possibile rinominare il file .css.
Jonny Wood,

1
Hanno lo stesso problema. Sostieni
Yaroslav

5
se non è necessario fare riferimento a .css esternamente e allo stesso tempo non è necessario modificare (rinominare) il file .css, è possibile creare un collegamento simbolico ad esso con .lessestensione. Quindi fare riferimento come un .lessfile. Essendo un collegamento simbolico, elimina l'onere di sincronizzarli poiché le modifiche .css influiscono immediatamente sul file .less che viene importato. Lo svantaggio è che dovresti ricompilare il css finale dopo le successive modifiche. Per informazioni sulla creazione di collegamenti simbolici in Windows, digitare MKLINK /?una finestra di comando
Ivaylo Slavov

@jackwanders, la ridenominazione non è necessaria, dal momento che LESS ricade nel CSS (come hai sottolineato correttamente). È possibile importare il .cssfile utilizzando la (less)direttiva inline e sfruttare il fatto che la .csssintassi è una .lesssintassi valida
ira,

Risposte:


316

È possibile forzare l'interpretazione di un file come un tipo particolare specificando un'opzione, ad esempio:

@import (css) "lib";

uscirà

@import "lib";

e

@import (less) "lib.css";

importerà il lib.cssfile e lo tratterà come meno. Se si specifica un file è inferiore e non si include un'estensione, nessuno verrà aggiunto.


1
Questa è la risposta corretta Il terzo importerà + compilerà il codice CSS come meno codice e non lascerà intatta la direttiva.
CMCDragonkai,

1
Penso che dovrebbe essere usato @import (include) "lib.css". Non mi piace la semantica di mentire al compilatore. Certamente quando sai che non c'è nessun codice LESS nel file.

16
Ciò creerà una richiesta http aggiuntiva per foo.css, quindi la (inline)direttiva (vedi stackoverflow.com/a/22594082/160968 ) è ora preferibile
Urs,

1
(inline)non funzionerà perché non trasforma i riferimenti esterni in caratteri o altri @importfile "ed css". Hai appena finito con un file CSS più grande che causa molte 404 richieste HTTP ....
user3338098

Rollback dell'ultima modifica poiché era semplicemente errata e non rispondeva alla domanda
sette fasi max

246

Se vuoi che il tuo CSS venga copiato nell'output senza essere elaborato, puoi usare la (inline)direttiva . per esempio,

@import (inline) '../timepicker/jquery.ui.timepicker.css';

7
Perfetto. Funziona bene quando si desidera concatenare alcuni file CSS (ad es. In ie7.less), ma non necessariamente elaborarli (ad es. Bootstrap-ie7 usa espressioni che LESS non gestisce bene).
Joe,

4
Molto utile. @import (css) "styles.css";non ha funzionato per me.
Ivkremer,

10
Entrambi affrontano diversi casi d'uso. Con (css), la @importdirettiva rimarrà così com'è e, di conseguenza, il file CSS verrà caricato dal browser in fase di esecuzione; con (inline), il contenuto del file CSS viene effettivamente importato nel foglio di stile compilato, che è quello che vuoi se quel file è fuori dalla tua radice web per esempio. Si noti che il comportamento predefinito quando si @importinging un .cssfile è lo stesso del (css)flag - leggi i documenti per maggiori informazioni :)
neemzy il

quindi questo ovviamente non funzionerà se il tuo file css ha @importdirettive in quanto ciò richiederebbe "elaborazione".
user3338098

'Inline' significa che anche tutte le sue importazioni saranno inline? C'è un modo per ricorsivamente in linea?
lampione

29

Ho dovuto usare quanto segue con la versione 1.7.4

@import (less) "foo.css"

So che la risposta accettata è @import (css) "foo.css"ma non ha funzionato. Se vuoi riutilizzare la tua classe css nel tuo nuovo file less, devi usare (less)e non (css).

Controlla la documentazione .


2
Inizialmente la risposta accettata aveva l'opzione corretta (sì, (less)è l' unica opzione se si desidera riutilizzare alcuni stili di un file css) ma per qualche motivo @Fractalf ha rimosso la parte corretta con la sua ultima modifica.
sette fasi-max

1
Puoi combinare "riferimento" e "meno":@import (less, reference) "foo.css"
Skarllot

28

Modifica l'estensione del file css in .less. Non è necessario scrivere MENO in esso; tutto il CSS è valido MENO (ad eccezione delle cose MS che devi scappare, ma questo è un altro problema.)

Per la risposta di Fractalf questo è stato risolto nella v1.4.0


4
Tecnicamente, questo non importa un file CSS.
nilskp,

@nilskp hai ragione; ma se si desidera utilizzare le classi in un altro file, è necessario un file MENO, non CSS.
Mathletics,

1
@nilskp stai dicendo che cambiare l'estensione è troppo da chiedere per poter analizzare il file come MENO?
Mathletics,

23
Sì, certo che lo è. Prova a pensare fuori da qualche piccolo progetto domestico in cui possiedi tutti i file. Pensa a progetti più grandi e multi-persone, dove non tutti usano MENO. Ci sono tonnellate di casi d'uso in cui non è possibile modificare i nomi dei file.
nilskp,

1
Dovresti preoccuparti se il tuo CSS contiene qualcosa come: calc (100% - 45px); e lo vuoi nel browser. Se meno elabora il file come meno, l'output finale sarà: calc (55%); perché meno fa il calc.
Christof Aenderl,

8

Dal sito MENO :

Se vuoi importare un file CSS e non vuoi che MENO lo elabori, usa l'estensione .css:

@import "lib.css"; La direttiva sarà lasciata così com'è e finirà nell'output CSS.

Come sottolinea jitbit nei commenti qui sotto, questo è davvero utile solo per scopi di sviluppo, in quanto non si vorrebbe avere una @importlarghezza di banda preziosa che consuma inutilmente .


14
Questo non IMPORTERA il file, lascerà intatta la direttiva @import. Funzionerà comunque, ma dovresti evitare css-import - guarda questo developers.google.com/speed/docs/best-practices/…
Alex

5
Grazie per le informazioni @jitbit. Personalmente, trovo più facile da usare @importdurante lo sviluppo, quindi combino e minimizzo i file importati in un singolo foglio di stile quando si passa alla produzione.
webdevkit,

1
Se leggi attentamente la domanda (e non solo la riga di intestazione), vedrai che l'OP vuole fare riferimento a una classe nel file css come un mixin, il che non è possibile se viene semplicemente analizzato come una semplice importazione css.
timore re

7

Prova questo :

@import "lib.css";

Dalla documentazione ufficiale:

Puoi importare sia css che meno file. Vengono elaborate solo meno istruzioni di importazione dei file, le dichiarazioni di importazione dei file css vengono mantenute così come sono. Se vuoi importare un file CSS e non vuoi che MENO lo elabori, usa l'estensione .css:


Fonte: http://lesscss.org/


2
Se leggi attentamente la domanda (e non solo la riga di intestazione), vedrai che l'OP vuole fare riferimento a una classe nel file css come un mixin, il che non è possibile se viene semplicemente analizzato come una semplice importazione css.
timore re

6

Se desideri semplicemente importare un file CSS come riferimento (ad esempio per utilizzare le classi in Mixin) ma non includere l'intero file CSS nel risultato, puoi utilizzare @import (less,reference) "reference.css";:

my.less

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

reference.css

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

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

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

sto usando lessc 2.5.3


Questo era quello di cui avevo bisogno. Tuttavia, ho dovuto usare la sintassi si estendono: &:extend(.reference-class all);. Il riferimento diretto alla classe ha provocato un errore di compilazione.
Jens Neubauer,

4

Se vuoi importare un file CSS che dovrebbe essere calpestato meno usa questa linea:

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

3

dalla 1.5.0 puoi usare la parola chiave "inline".

Esempio: @import (inline) "not-less-compatibile.css";

Lo userete quando un file CSS potrebbe non essere meno compatibile; questo perché, sebbene Less supporti gli standard CSS più noti, non supporta i commenti in alcuni punti e non supporta tutti gli hack CSS conosciuti senza modificare il CSS. Quindi puoi usarlo per includere il file nell'output in modo che tutti i CSS siano in un unico file.

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.