Best practice per la personalizzazione di Bootstrap di Twitter [chiuso]


285

Sto lavorando con Bootstrap 2.0.3 usando LESS. Voglio personalizzarlo ampiamente, ma voglio evitare di apportare modifiche alla fonte ogni volta che è possibile poiché le modifiche alle librerie sono frequenti. Sono nuovo di MENO, quindi non so come funzioni interamente la sua compilation. Quali sono alcune best practice per lavorare con framework basati su LESS o LESS?


Saluti dal futuro! Le "best practice" per la personalizzazione di Bootstrap sono state modificate in 3.xe 4.x basate su SASS: stackoverflow.com/a/50410667/171456
Zim,

Risposte:


180

La mia soluzione è simile a quella di jstam, ma quando possibile evito di apportare modifiche ai file di origine. Dato che le modifiche a bootstrap saranno frequenti, voglio essere in grado di eliminare l'ultima fonte e apportare modifiche minime mantenendo le mie modifiche in file separati. Certo, non è completamente a prova di proiettile.

  1. Copia bootstrap.less e variabili.less nella directory principale. Rinomina bootstrap.less in theme.less o come preferisci. La struttura della directory della directory dovrebbe apparire così:

    /Website            
         theme.less
         variables.less
         /Bootstrap
         ...
  2. Aggiorna tutti i riferimenti in theme.less per puntare alla sottodirectory bootstrap. Assicurati che il tuo variabili.less sia referenziato dal genitore e non dalla directory bootstrap in questo modo:

    ...
    // CSS Reset
    @import "bootstrap/reset.less";
    
    // Core variables and mixins
    @import "variables.less"; // Modify this for custom colors, font-sizes, etc
    @import "bootstrap/mixins.less";
    
    // Grid system and page structure
    @import "bootstrap/scaffolding.less";
    @import "bootstrap/grid.less";
    @import "bootstrap/layouts.less";

    ...

  3. Aggiungi le tue sostituzioni CSS nel file theme.less immediatamente dopo il punto in cui sono incluse.

    ...
    // Components: Nav
    @import "bootstrap/navs.less";
    @import "bootstrap/navbar.less";
    
    // overrides
    .navbar-fixed-top .navbar-inner, .navbar-fixed-bottom .navbar-inner {
        border-radius: 0 0 0 0;
        padding: 10px;
    }
    
    .nav-tabs, .nav-pills {
        text-transform: uppercase;
    }
    
    .navbar .nav > li > a {
        text-shadow: none;
    }
    
    ...
  4. Link a theme.less invece di bootstrap.less nelle tue pagine HTML.

Ogni volta che esce una nuova versione, le modifiche dovrebbero essere sicure. Dovresti anche fare una differenza tra i tuoi file bootstrap personalizzati ogni volta che esce una nuova versione. Le variabili e le importazioni possono cambiare.


C'è un motivo specifico per # 3? Cosa succede se tutti i tuoi CSS personalizzati appaiono in fondo dopo tutte le importazioni, invece di essere mescolati dopo ogni importazione?
AaronS

2
@AaronLS: dovrebbe funzionare anche quello. Penso che il numero 3 sia per mantenerlo organizzato.
Jonatan Littke,

@joelrodgers Perché mixins.less non dovrebbe essere modificato direttamente?
Joe Isaacson,

Cosa ne pensi di includere un file variabile variabile-custom.less (tramite @import) all'interno di bootstrap.less? Quindi tutti saranno in grado di personalizzare le variabili Bootstrap predefinite e aggiornarle in modo sicuro. Comunque penso che questa funzione debba assolutamente essere inclusa in Bootstrap.
adriendenat,

36

Anche questa è una cosa con cui ho lottato. Da un lato, desidero personalizzare in modo ottimale il file variabili.less con i miei colori e le mie impostazioni. D'altra parte, voglio cambiare il file Bootstrap il meno possibile per facilitare il processo di aggiornamento.

La mia soluzione (per ora) è quella di creare un file LESS aggiuntivo e inserirlo nel bootstrap.lessfile dopo l'importazione delle variabili e dei mixin. Quindi qualcosa del genere:

...

// CSS Reset
@import "reset.less";

// Core variables and mixins
@import "variables.less"; // Modify this for custom colors, font-sizes, etc
@import "mixins.less";

// Custom Addons
@import "addon-file.less"; // <--- My custom LESS addon

// Grid system and page structure
@import "scaffolding.less";

...

In questo modo, se voglio ripristinare i colori, i caratteri di Bootstrap o aggiungere altri mixin che posso. Il mio codice è separato ma verrà compilato nel resto delle importazioni Bootstrap. Non è perfetto, ma è un punto fermo che ha funzionato bene per me.


1
Buona soluzione Questo è esattamente quello che ho fatto con alcune modifiche. Guarda la mia risposta. Era troppo lungo per inserire un commento.
Joel Rodgers,

Mi piace anche la tua soluzione, Joel. Buona separazione del codice rispetto al codice del framework.
jstam

Dal momento che i mixin fanno riferimento a variabili, avrei bisogno di un'ulteriore variabile custom.less tra variabili.less e mixins.less import? In modo che io possa modificare variabili come @baseFontSize. Non so nemmeno abbastanza per sapere se mi soffocerà dichiarando di nuovo una variabile con lo stesso nome.
AaronS

Ho trovato questa la soluzione più utile perché per una nuova copia di bootstrap, dobbiamo semplicemente aggiungere di nuovo una riga bootstrap.less , afferrando il nostro file personalizzato VS potenzialmente cambiando molte linee se cambiano il core meno i nomi dei file, ecc ... Ho usato questa soluzione, ha ricompilato il mio JS minimizzato usando grugnito e tutto è buono nel cofano! Personalizzazioni funzionanti senza !importantdichiarazioni non amichevoli !
twknab,

25

Da parte mia, ho solo un file chiamato theme.lesscon un'importazione boostrap.lessin esso e appena sotto sovrascrivo (anche se sembra essere male usando LESS, ma bene, è più facile da mantenere) il valore della variabile che non voglio aggiornare .

Questo funziona bene per avere valori personalizzati per le variabili in variables.less

Dopodiché compilo theme.lessinvece il mio filebootstrap.less

Esempio theme.less:

@import "path/to/my/bootstrap.less";  
@linkColor: #MyAwesomeColor;  

1
Questo è il modo per 1) avere una copia del codice bootstrap che può essere aggiornato a piacimento mentre ancora 2) essere in grado di imporre le proprie impostazioni personalizzate. Vedere stackoverflow.com/questions/13809895/… per dettagli sulla struttura delle cartelle.
Jeromy francese

Mi sono assicurato di mettere questo prima del mio meno codice per assicurarmi che bootstrap non lo sovrascrivesse.
Aram Kocharyan,

Questo ha funzionato alla grande per me. Ho appena indicato Koala su theme.less e si compila ogni volta che lo salvo.
ow3n

Nel caso in cui qualcuno stia usando la versione SASS,
fai

5

Un approccio di gran lunga migliore (IMHO) è quello di prendere spunto dalla Bootswatch progetto github chiamato swatchmaker . Questo progetto è specificamente progettato per la creazione e la gestione di decine di temi Bootstrap sul sito Web.

Il Makefilenel progetto costruisce swatchmaker.less(puoi rinominarlo in qualcosa del genere customizations.less). Questo file contiene un sacco di importazioni:

@import "bootstrap/less/bootstrap.less";
@import "swatch/variables.less";
@import "swatch/bootswatch.less";
@import "bootstrap/less/utilities.less";

È possibile rinominare la swatchcartella ebootswatch.less file come preferisci.

Ciò ha senso poiché puoi aggiornare Bootstrap senza influire sui tuoi file. In effetti, ilMakefile contiene anche i comandi per recuperare l'ultima versione di Bootstrap. Vedi il README sulla pagina del progetto per ulteriori informazioni.

Come bonus, README suggerisce anche di installare la watchrgemma che costruirà automaticamente il progetto quando un .lessfile cambia.


4

Se (E SOLO SE) hai tempo, puoi farlo come faccio io. Conservo la mia versione modificata del / i framework / i e con ogni aggiornamento del framework leggo i documenti e controllo l'origine per eventuali modifiche.

Questa soluzione potrebbe sembrare meno ideale al primo sguardo, ma ho i miei motivi per farlo. Non lavoro con uno ma un insieme di molti framework, best practice, fogli di stile di reset / normalizzazione ecc. E sono sempre sicuro che nessun aggiornamento cambierà mai i progetti esistenti in alcun modo che non vedevo arrivare.

Sto lavorando e con il mio framework personalizzato per i seguenti motivi.

  1. Mi spoglio ogni piccola parte che non mi serve per mantenere le cose modulari e piccole
  2. Uso il mio framework per i lavori dei clienti e voglio a) sapere con cosa lavoro esattamente mentre b) possedere tutto ciò che vendo al cliente. Non copio e uso semplicemente i framework ma cerco di capirli e ricrearli
  3. Uso il mio framework in combinazione con un CMS e non posso semplicemente abbandonare e dimenticare un framework in un progetto / iniziare da zero

Sì, ho capito, ma per me le cose stanno cambiando così in fretta che tutta questa tecnologia web sta diventando un po 'schiacciante da tenere traccia.
Joel Rodgers,

1
Come accennato: il mio approccio è solo per coloro che tengono d'occhio l'attuale sviluppo di più framework. Lo faccio perché devo rimanere in cima allo sviluppo e ai diversi approcci alle sfide tecniche. Penso che questo sia più adatto agli sviluppatori di framework che ai liberi professionisti che "vogliono semplicemente fare il lavoro".
Tutti i bit equivalgono

4

Sono arrivato alla stessa soluzione di Joel:

Meno file personalizzati

Proprio come descritto sopra: creo copie locali per tutti i file Less che sto personalizzando: Ad esempio: "variabili-custom.less", "avvisi-custom.less", "buttons-custom.less". Quindi posso usare alcuni standard e avere le mie aggiunte. Il rovescio della medaglia è: quando Bootstrap verrà aggiornato è davvero difficile migrare.

Ma c'è qualcos'altro:

Sostituisci stili

Quando mi guardo intorno per i flussi di lavoro, vedo spesso persone che suggeriscono semplicemente di ignorare gli stili. Quindi importate prima i file Less standard e poi aggiungete le vostre dichiarazioni personalizzate in fondo. Il vantaggio qui è: è più facile aggiornare a una versione più recente. L'aspetto negativo è: il file CSS compilato include tutte le sostituzioni. Alcuni selettori CSS sono definiti due volte. Quindi il browser deve fare un po 'di sollevamento per scoprire cosa applicare effettivamente. Non è molto pulito.

Mi chiedo perché i preprocessori non siano abbastanza intelligenti da risolvere tali doppie dichiarazioni? C'è qualche miglior flusso di lavoro che mi manca qui?


1
Vedo che hai ragione, ma puoi sempre eseguire un'utilità di pulizia CSS online o localmente. Ecco un elenco di questi: stackoverflow.com/questions/135657/… Probabilmente non vorrai comunque un compilatore meno in esecuzione nel prodotto.
Joel Rodgers,

grazie per la risposta, non ero a conoscenza del fatto che ci sono strumenti polvere-me. bene, ci scavero dentro. In realtà utilizzo comunque un compilatore meno locale (CodeKit). Non voglio compilare il CSS due volte.
Frank Lämmer,

2

Aggiungi @import "../../styles.less";(o dovunque sia il tuo foglio di stile) a bootstrap.less in fondo. Ciò ti consente di utilizzare i mixin Bootstrap come .gradiento .border-radiusall'interno dei tuoi stili.

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.