2012-02-11 7 views
11

Intro:Posso usare i parametri url in LESS css?

sto cercando di meno in un ambiente mvc asp.net.

Io uso senza punti per l'elaborazione lato server (e non vorrei utilizzare l'elaborazione lato client, specialmente prima di pubblicare il progetto completo).

Devo applicare un disegno in cui ci sono schemi di colore diversi a seconda di cose diverse (ad esempio l'ora del giorno).

In questo caso, meno sentivo molto potente come progettare un css parametrizzato e solo cambiando come 10 variabili all'inizio del file per ogni tema era davvero edificante.

Problema:

Ma avrei bisogno di cambiare in qualche modo i temi di colore da un parametro esterno.

Idee:

primo momento ho pensato che un parametro URL come style.less theme = fucsia sarebbe bene, ma ho trovato alcun modo per analizzare qualcosa di simile?.

poi ho pensato che fare un blue.less molto breve, green.less, orange.less composto da variabili a colori solo dichiarate, compreso il main.less in ognuno di loro sarebbe una soluzione solida.

Non ho avuto la possibilità di provare la seconda soluzione, ma ho pensato che sarebbe stato un buon momento per chiedere consigli sul modo più efficace per farlo.

Il problema è di nuovo: voglio controllare alcune cose nel mio file meno dall'esterno.

risposta

22

Sì, è possibile (perché ho implementato quella funzione esattamente per questa ragione).

Dotless supporta i parametri dall'esterno tramite il parametro querystring.

<link rel="stylesheet" href="style.less?foo=bar" /> 

vi permetterà di utilizzare il seguente meno:

@foo = bar; 

Il parametro codice di iniezione è molto semplice. semplicemente antepone le dichiarazioni delle variabili al tuo normale file less, quindi qualsiasi cosa che viene come parametro querystring seguirà la sintassi precedente.

Il codice in questione è molto semplice: https://github.com/dotless/dotless/blob/master/src/dotless.Core/Engine/ParameterDecorator.cs

+1

Questa è la risposta che speravo! : D – SoonDead

+0

@Tigraine: come si salva? Un utente malintenzionato potrebbe facilmente inserire codice dannoso nei fogli di stile. – jor

+0

L'utilizzo di questo non è così semplice. Ho dovuto creare un '@import' theme-param-default.less ";' sopra la mia riga '@import" darkly-variables - @ {theme} .less ";' che conteneva '@theme: dark;' else lì erano problemi di compilazione. –

5

AFAIK, non è possibile passare parametri per dotnetless da utilizzare per eseguire la compilazione.

Come suggerimento, perché non basta chiamare diversi file in meno? Questo sarebbe abbastanza facile da fare usando una proprietà Viewbag.

Per rendere i diversi in meno, è necessario prima creare un file meno con ciascun set di colori. Quindi importa il tuo file css di base. dotnetless unirà le definizioni di colore nel file principale con gli usi nel file di base. Quindi hai qualcosa tipo:

@baseGray: #ddd; 
@baseGrayDark: darken(@baseGray, 15%); 
@baseGrayLight: lighten(@baseGray, 10%); 
@import "baseCss.less"; 

Ho appena testato questo e il progetto MVC3 e funziona.

+0

Grazie, questo è anche qualcosa che ho bisogno. Ci sono casi in cui accetterei volentieri più di una risposta. Questo è uno. – SoonDead