2011-11-27 9 views
21

Volevo utilizzare i CSS di bootstrap di Twitter solo in un elemento specifico nella mia pagina web.racchiude le definizioni di css .less in uno spazio dei nomi

Ho provato a farlo come nel codice qui sotto. Ma dopo averlo compilato in un file css non è stato emesso nulla. Se ho spostato @import all'esterno di #my_div, ho ottenuto tutte le definizioni CSS per Twitter Boostrap.

#my_div { 
    @import "../twitter_bootstrap/lib/bootstrap.less"; 
} 

Come posso namespace un file less css?

risposta

11

La documentazione di MENO ha una sezione su namespaces.

Così si potrebbe definire il tuo lib in un documento separato:

#ns { 
    .twitter() { 
    // Instructions to be used later 
    // Nothing will appear in compiled CSS except if called later (because of parenthesis) 
    } 
} 

importare questo file all'inizio del file CSS da compilare e utilizzare le seguenti istruzioni:

#my_div { 
    #ns > .twitter; 
} 
+2

Il problema è con '@ import'. Non funziona quando lo si utilizza in uno spazio dei nomi. –

+0

@MartinsBalodis Il codice per lib dovrebbe essere un file LESS (basta aggiungere '#ns {.anything() {' all'inizio e due '}' alla fine della lib di CSS. E il file principale deve essere anche MENO file. L'importazione dovrebbe avvenire all'inizio di '#my_div {}'. Non verrà emesso nulla dal primo file senza ulteriori istruzioni, quindi puoi importarlo ovunque prima di questo selettore. Quindi il '#ns> .twitter;' l'istruzione aggiungerà infine il codice proprio dove lo desideri. – FelipeAls

+0

La libreria di twitter può essere importata solo. Non posso modificare quei file. Sono usati come sottomoduli git. [File principale .less file Twitter] (https://github.com) /twitter/bootstrap/blob/master/lib/bootstrap.less) –

4

Ecco come L'ho fatto. Questo avviene nella directory principale della cartella bootstrap che viene scaricata o clonata da git.

## ./less/namespace.css (New file) 

#ns { 
    .twitter() { 
    @import "less/bootstrap.less"; 
    } 
} 

## ./style.less 

@import "less/namespace.less"; 

.namespace { 
    #ns > .twitter; 
} 

Quindi eseguire meno style.less> style.css

+0

cosa c'è nel file less/namespace.less? – FLX

+0

Ho provato questo, ma non posso usare mixins importati da .twitter() – FLX

+1

Questo non funziona, si finisce con selettori come: button.namespace .close {...} – Caqu

24

non sto usando less sul sito dal vivo, né sono manualmente facendo la compilazione in modo da questo è una specie di versione "semplice". Non è automatico come gli altri, ma può essere applicato ad alcuni utenti.

  1. Modifica bootstrap.css/bootstrap-responsive.css

    .tb { 
        // copy/paste the entire bootstrap.css 
    } 
    
  2. Ricompilate con meno o utilizzare un online meno compilatore - http://winless.org/online-less-compiler

  3. Modificare il file ora-compilato e cambiare body {} dichiarazioni CSS per tb {}.

  4. Utilizzare il nuovo file CSS.

  5. posto sul suo sito web "bootstrap" all'interno di un <div class='tb'></div>

+0

Come questo previene collisioni in html , ad esempio:

Quando un'altra libreria ha una definizione di classe di "pulsante grande"? Il prefisso è l'unico modo per evitare collisioni nello spazio dei nomi su entrambe le estremità. – TaylorMac

+0

Avevo provato in precedenza a utilizzare tutti i file .less nel codice sorgente e la ricompilazione con winless. Tuttavia, qualcosa mancava nel file CSS finale. Sono stato in grado di correggerlo seguendo la procedura - grazie! –

+0

Questo ha funzionato per me. Ho seguito le istruzioni in "Installazione di Grunt" all'indirizzo getbootstrap.com/getting-started. Una volta che funzionava, ho seguito questa risposta, ricompilando con 'grunt dist'. In questo modo, mantengo i prefissi dei fornitori CSS. –

3

Ecco come ho fatto, sulla base delle majgis GitHub forcella sopra:

bootstrap-ns.less:

@import "namespace.less" 
.bs { 
    #ns > .twitter; 
    } 

namespace.less:

#ns { 
    .twitter(){ 
    @import "bootstrap.less"; 
    } 
} 

Quindi fai riferimento a bootstrap-ns.less nella tua pagina html. Questo è stato testato con dotLESS.

0

se si ha il controllo sui parametri di compilazione è sufficiente impostare strictImports su falso e il lavoro come previsto per tutto dovrebbe andare bene. considerare l'acquisto di less-strictimports o questo numero issue.

Problemi correlati