"CSS prima" vs "HTML prima" (Bootstrap, SASS)

7

Tipo di follow-up per Devo scrivere HTML o CSS prima?

Su un sito web relativamente grande, stiamo prendendo in considerazione l'utilizzo di SASS e / o Bootstrap. Dai progetti precedenti, sembrano esserci diversi modi per farlo:

  1. Un framework (ad es. bootstrap) fornisce una serie di classi css (esp per il layout della griglia). Potremmo persino aggiungere a ciò con le nostre classi riutilizzabili. Quindi creiamo il codice html per utilizzare queste classi.
    Se vogliamo cambiare il layout, dobbiamo modificare l'HTML, non il CSS. Una classe per una barra laterale sarebbe come col-lg-3 anziché sidebar-left .
    La chiamo strategia "CSS first".
  2. Per prima cosa creiamo il nostro codice HTML, usando classi semantiche. Una barra laterale dovrebbe essere classificata sidebar-left o anche sidebar-first per non implicare nulla su come verrà visualizzata. Quindi usiamo CSS personalizzati che hanno come target questa regione.
    Probabilmente si sta utilizzando un mixin SASS per il layout della colonna della griglia.
    Se vogliamo cambiare il layout (ad esempio, rendere la barra laterale più piccola), modifichiamo il CSS, non l'HTML.
    La chiamo strategia "HTML first".
    Di solito vogliamo farlo con "componenti", in cui parti della pagina sono indipendenti l'una dall'altra ed evitiamo selettori profondi arbitrari.
  3. Tradizionalmente in Drupal (questo è ciò con cui lavoriamo), un sacco di HTML è già fornito da moduli core e di terze parti. Tradizionalmente, lasceremmo la maggior parte dell'HTML così com'è, e poi lo selezioniamo con brutti selettori profondamente annidati.
    Anche questo è "HTML first", ma senza componenti. Cerco di evitare questo schema.
    Spesso le classi fornite nell'html generato si basano sulla configurazione presente nel database e create con l'interfaccia utente. Quindi abbiamo CSS (= codice) a seconda delle cose nel database. Sarebbe più mantenibile nella direzione opposta, se le cose nel database dipendono dal CSS.
  4. Gli autori di contenuti vogliono essere in grado di aggiungere alcuni effetti speciali nel loro html creato (che viene filtrato, ovviamente). Per esempio. scatole wrapper per immagini. Forniamo alcune classi che possono usare.
    Ciò ricadrebbe nella strategia "CSS first", sebbene sia un caso di uso speciale.
  5. In un CMS, potremmo avere alcuni componenti che puoi scegliere dall'interfaccia utente, per configurare come dovrebbe essere visualizzato qualcosa. Questi componenti potrebbero avere nomi umani che mostrano come è, ad es. "cursore", "griglia", "scatola blu".
    Forse questo è di nuovo "prima CSS".

Le strategie 1. e 2. sembrano piuttosto opposte l'una all'altra. Posso pensare ad esempi in cui l'uno o l'altro approccio sarebbe preferibile. Ma mi chiedo se ci sono alcune regole generali per capire quale approccio sia migliore o dove usare quale.

Sembra che la differenza principale sia se preferisco aggiornare l'HTML o il CSS, se voglio apportare un cambio di layout / aspetto.

Questo porta anche alla domanda su quanto "semantico" dovrebbe essere il nome della tua classe.

  1. Con l'approccio "CSS first", scriverei CSS per una classe "shiny-blue-button" e un altro "shiny-red-button". Se voglio cambiare l'aspetto, cambierò l'HTML per usare il pulsante rosso invece di quello blu.
  2. Con l'approccio "HTML first", scriverei HTML con una classe "panic-button" e un altro "submit-button", e poi li modifico di conseguenza. Qui le classi sono molto più semantiche, ma molto meno riusabili.

Vedi anche argomenti cogenti per "css semantico" su 'css orientato agli oggetti'

    
posta donquixote 16.07.2015 - 12:53
fonte

2 risposte

5

Il tuo 'HTML' rappresenta gli elementi che corrispondono al DOM. Poiché il tuo CSS è applicato a questi elementi per creare il livello di presentazione, sarebbe come colorare prima di disegnare. Userei l'HTML per definire i singoli elementi della pagina, senza prima lo stile. Quando il loro comportamento funziona per superare il test, inizierei a usare i CSS. Il comportamento di solito richiede un uso dinamico delle classi, ad esempio: hover o un determinato stato o tema.

Per rispondere alla tua domanda: definire HTML prima del CSS, a mio parere.

    
risposta data 02.08.2015 - 16:09
fonte
1

Dopo aver passato più tempo a pensare a questo, arrivo alla seguente conclusione:

HTML prima o CSS prima?

Il "html prima" è un consiglio fuorviante, imo.

Il modo migliore è pensare a classi e nomi di tag come protocollo o linguaggio per comunicare con HTML o CSS. Una lingua o protocollo è un accordo tra due parti.

Anche se tecnicamente potresti scrivere il CSS per primo, o prima il codice HTML, hai sempre in mente entrambe le parti quando inventi nuovi nomi di classe. Quando scrivi i CSS per primo, contemporaneamente stai scrivendo HTML nella tua immaginazione. Quando scrivi HTML in primo luogo, stai contemporaneamente scrivendo CSS nella tua immaginazione.

O se stai scrivendo componenti CSS con una guida di stile HTML (snippet di esempio HTML), in effetti stai scrivendo entrambi allo stesso tempo, anche tecnicamente.

Anche se, con questa filosofia, fai sempre entrambe le cose contemporaneamente (solo una nella tua testa), c'è una differenza:

Da un lato può accadere che il tuo "protocollo" (classi e nomi di tag) esprima dettagli di implementazione interni, ad es. sui componenti del tuo CMS o sul framework lato server o sulla tua architettura del contenuto, invece di suggerimenti visivi o funzionali. Per definire tali elementi con i CSS, sono necessari selettori e override inutilmente complessi, che alla fine diventano dolorosi da mantenere. (Ho visto molto nei siti di Drupal 7 - anche se ci sono chiaramente modi per evitare tali problemi in Drupal).

D'altra parte, può succedere che il tuo protocollo sia troppo focalizzato su uno stile specifico, ad es. se le tue classi codificano specifici colori o caratteri.

Idealmente, il protocollo dovrebbe essere nel mezzo. Il lato HTML non dovrebbe aver bisogno di sapere troppo sui dettagli di stile, e il lato CSS non dovrebbe aver bisogno di sapere troppo sull'architettura del contenuto lato server e sui dettagli del framework.

Altre riflessioni

Quanto segue potrebbe non essere riferito al 100% alla domanda originale, ma vengono fuori quando si pensa a questa roba.

Imballaggio

A volte desideri impacchettare HTML e CSS in un modulo che puoi condividere attraverso i progetti. In questo caso, si può usare uno spazio dei nomi CSS (prefisso) per questo pacchetto.

Installando il pacchetto, ottieni HTML (o codice di generazione HTML) e CSS allo stesso tempo. Ovviamente potresti voler sostituire o sostituire il CSS per il tuo progetto specifico.

Contenuto vs CSS

Consenti agli editor di contenuti di utilizzare le classi CSS? In questo caso, la regola dovrebbe sempre essere "CSS first". O meglio, dici agli editori quali sono le classi CSS disponibili.

Non vuoi scrivere CSS per le classi target inventate dagli editor di contenuti.

Indipendentemente da cosa pensi della domanda originale, il CSS è ancora codice e il contenuto (oi dati) (non la struttura del contenuto, ma il contenuto stesso) dovrebbe sempre venire dopo il codice. Non vuoi che il codice dipenda dal contenuto o dai dati. Questa regola supera qualsiasi regola "HTML first" che potresti avere.

Ovviamente si potrebbe dire che gli editor di contenuto non stanno veramente scrivendo un nuovo HTML, stanno solo combinando componenti HTML già esistenti.

    
risposta data 17.03.2017 - 19:16
fonte

Leggi altre domande sui tag