Qual è il significato di "cascata" nei CSS?


90

Qual è il significato esatto del termine "Cascading" nei CSS? Sto ottenendo punti di vista diversi, quindi chiedo qui. Un esempio aiuterebbe.


15
Se sei come me, il "Cascading" si riferisce alla quantità di tempo a cascata che impiegherai a regolare la larghezza del div in incrementi di due pixel per far sembrare le cose "giuste", piuttosto che concentrarti sulla tua logica aziendale fondamentale. (Probabilmente
otterrò

Risposte:


116

"Cascading" in questo contesto significa che poiché più di una dichiarazione del foglio di stile può essere applicata a un particolare pezzo di HTML, ci deve essere un modo noto per determinare quale regola specifica del foglio di stile si applica a quale pezzo di HTML.

La regola utilizzata viene scelta scendendo dalle dichiarazioni più generali alla regola specifica richiesta. Viene scelta la dichiarazione più specifica.


quando entrano in gioco classe / ID e ordine?
Daniel Springer

2
Gli ID @AllDani sono più specifici delle classi. Quindi immagino che tu possa dire che la regola di classe ricade sulla regola id più specifica. Se 2 regole hanno la stessa priorità (come 2 classi con regole in conflitto su un elemento), l'ultima specificata nel tuo file css ha la precedenza.
metatron

Quindi, se ID dice "A" e la classe dice "B", anche se la classe è più avanti nel foglio, ID (A) vince? IE Order entra in gioco solo se due stili hanno la stessa esatta specificità?
Daniel Springer

2
@DaniSpringer Sì, è corretto. Il selettore di id è anche uno dei selettori più specifici nei CSS. Per dimostrazione, potrebbe anche "vincere" contro selettori come "div.blubb: hover". Solo gli stili in linea e la regola! Important hanno più specificità.
marvhock

54

Quando insegno CSS, dico sempre agli studenti che "fogli di stile a cascata" significa qualcosa come " fogli di stile di combattimento ".

Una regola dice che il tuo tag H3 è rosso, un'altra regola dice che è verde: le regole sono in contraddizione tra loro, chi vincerà !? Deathmatch del foglio di stile!

OK, forse è una leggera esagerazione, ma è molto più suscettibile di persone non codificate e non programmatrici che sono appena agli inizi rispetto a qualsiasi nozione di cascata o eredità.

Ovviamente mi assicuro di dire loro che non è un problema che i fogli di stile si combattano tra loro, è così che è stato progettato il linguaggio.


5
Non sono sicuro del motivo per cui questo è stato votato. Sembra una semplice spiegazione per i nuovi studenti.
Purus

18
Probabilmente perché non spiega chi vincerà e perché.
Andreas

16
Sembri essere confuso sulla domanda. Non è "cosa è specificità / ereditarietà", o su quali regole vengono applicate, ecc. È "cosa significa cascata SIGNIFICA?".
AmbroseChapel

5
So che questo è un vecchio post, ma comunque: penso che l'esempio di fogli di stile e / o regole CSS "combattimenti" sia cattivo. Molto più istruttivo per i nuovi studenti (nella mia esperienza di insegnamento) è spiegare la gerarchia di una regola che prevale su una precedente. Ad esempio, un dipendente dipinge un tag H3 di rosso (prima regola), quindi lo passa al suo QA manager che lo sostituisce e decide di dipingerlo di verde (seconda regola). Nessun incontro mortale, solo gerarchia aziendale. Le regole CSS non "combattono", vengono eseguite (a cascata) attraverso un sistema gerarchico rigorosamente definito di decisioni successive che annullano quelle precedenti.
Frank van Wensveen

questa è davvero una buona risposta per favore spiega ulteriormente di più! Chi vincerà dando un semplice esempio! @AmbroseChapel
eirenaios



4

Devi pensarci dall'esterno verso l'interno. Se hai una regola che è sul tag body, "ricaderà" attraverso ogni tag figlio. Se metti una regola su qualsiasi tag all'interno del corpo, adotterà quella regola e così via. Quindi la regola si estende a cascata su tutto il contenuto a meno che non venga interrotta da una regola da un tag incorporato.


Questo non implica ciò che ha la precedenza. Ambiguo?
Daniel Springer

2

Puoi trattare l'elaborazione CSS come una cascata che contiene diverse cascate. Ecco le cascate dall'alto verso il basso in ordine: (Quella inferiore può sovrascrivere la stessa proprietà in quella superiore.)

  1. dichiarazioni del programma utente
  2. dichiarazioni normali dell'utente
  3. dichiarazioni normali dell'autore
  4. autore di importanti dichiarazioni
  5. dichiarazioni importanti dell'utente

Vedi di più nelle specifiche

La cascata consiste nello scegliere il valore giusto da più origini. Ma è diverso dall'ordinamento . Solo qualcosa che non è in ordine dobbiamo ordinare. Ma nei CSS queste origini hanno la precedenza fissa. E quindi lo pseudo-codice potrebbe apparire come il seguente:

  1. inizializza l'array di valori;
  2. applicare i valori dalla 1a origine;
  3. applica i valori dalla 2a origine, sovrascrivi se il valore esiste;
  4. ...
  5. applica i valori dall'ennesima origine, sovrascrivi se i valori esistono;

Dallo pseudo-codice puoi vedere che sembra piuttosto una cascata di diverse cascate.


2

Un chiarimento che può aiutare. Se includi due fogli di stile e c'è una regola con la stessa specificità in ciascuno, vince quello incluso per ultimo. Ad esempio, l'ultimo della cascata ha la maggiore influenza.

(Questa è solo una variazione dell'avere le due regole nello stesso foglio: l'ultima vince se tutte le altre cose sono uguali.)

Ad esempio, dato

body {
    background:blue;
}

body {
    background:green;
}

quindi lo sfondo sarà verde.


1

Questa risposta è per principianti assoluti. Se desideri una panoramica di questa risposta, leggi la mia seconda risposta.

Il Cascading è il processo di combinazione di diversi fogli di stile e risoluzione dei conflitti tra diverse regole CSS e dichiarazioni quando più di una regola si applica a un determinato elemento . Perché, come probabilmente già saprai, una dichiarazione per una determinata proprietà di stile come la dimensione del carattere può apparire in diversi fogli di stile e anche più volte all'interno di un singolo foglio di stile.

Per capire il collegamento a cascata è necessario iniziare con la fase di analisi CSS perché nella fase di analisi il primo passaggio è risolvere le dichiarazioni CSS in conflitto e il secondo passaggio è elaborare i valori CSS finali.

Ora i CSS possono anche provenire da fonti diverse. Il più comune è il CSS che scriviamo noi sviluppatori. Queste dichiarazioni che mettiamo nei nostri fogli di stile sono chiamate dichiarazioni dell'autore. Un'altra fonte può essere la dichiarazione dell'utente, che è CSS proveniente dall'utente. Ad esempio, quando l'utente modifica la dimensione del carattere predefinito nel browser, questo è il CSS dell'utente e, ultimo ma non meno importante, ci sono le dichiarazioni del browser predefinito.

Ad esempio, se inseriamo un tag di ancoraggio nel nostro HTML per un collegamento e poi non lo stile affatto, di solito verrà visualizzato con testo blu e sottolineato, a destra. Si chiama CSS dell'agente utente perché è impostato dal browser. Quindi la cascata combina le dichiarazioni CSS provenienti da tutte queste diverse fonti, ma come fa la cascata a risolvere effettivamente i conflitti quando si applica più di una regola?

Bene, quello che fa è guardare all'importanza, alla specificità del selettore e all'ordine di origine delle dichiarazioni in conflitto per determinare quale ha la precedenza, ed ecco come funziona. Prima di tutto, la cascata inizia dando le dichiarazioni contrastanti di diversa importanza in base a dove sono dichiarate sulla loro fonte. Le dichiarazioni più importanti sono dichiarazioni utente contrassegnate con la parola chiave important.

Le seconde dichiarazioni più importanti sono le dichiarazioni dell'autore contrassegnate da importante. Terzo, le normali dichiarazioni dell'autore, quindi le normali dichiarazioni dell'utente e infine quelle meno importanti sono le dichiarazioni del browser predefinito, il che in realtà ha molto senso che possiamo facilmente sovrascrivere queste dichiarazioni provenienti per impostazione predefinita dal browser.

inserisci qui la descrizione dell'immagine

Ora molte volte avremo solo un mucchio di regole in conflitto nei nostri fogli di stile dell'autore senza alcuna parola chiave importante. Questo è in realtà lo scenario più comune e in questo caso tutte le dichiarazioni hanno la stessa identica importanza. Ora, cosa succede in questo caso? Quello che fa la cascata se questo è il caso è calcolare e confrontare le specificità dei selettori di dichiarazione, ed è così che funziona.

inserisci qui la descrizione dell'immagine

Gli stili inline hanno la specificità più alta seguita da ID, quindi classi, pseudo-classi e selettori di attributi e infine l'elemento meno specifico e il selettore di pseudo-elementi. Quindi, quando abbiamo dichiarazioni contrastanti con la stessa importanza che abbiamo visto nell'ultima diapositiva, calcoliamo la loro specificità del selettore in base alle priorità che ti ho appena mostrato, ma vediamo come calcoliamo effettivamente le specificità con un piccolo esempio, è sempre meglio, giusto.

inserisci qui la descrizione dell'immagine

Dall'esempio precedente, tutte queste dichiarazioni hanno la stessa importanza, perché sono tutte dichiarazioni dell'autore. Quindi calcoliamo le loro specificità del selettore per scoprire se il colore di sfondo sarà blu, verde, viola o giallo, ed è così che lo facciamo. La specificità in realtà non è solo un numero, ma un numero per ciascuna delle quattro categorie che ti ho mostrato prima. Stili, ID, classi, pseudo-elementi e attributi incorporati e infine elementi e per ciascuno di questi contiamo il numero di occorrenze nel selettore.

Quindi qui nel selettore uno, ovviamente non abbiamo stili in linea, perché uno stile in linea deve essere scritto nell'HTML, che non è il caso qui, quindi è uno zero. Anche qui non abbiamo ID, quindi è di nuovo uno zero, ma abbiamo una classe, la classe dei pulsanti. Quindi per la categoria delle classi, ne abbiamo uno e, infine, non c'è un selettore di elementi qui, quindi zero anche per quello, e basta. La specificità del selettore è zero, zero, uno, zero.

Ora confrontiamolo con gli altri. Anche il prossimo non è uno stile in linea, quindi zero per il primo. Ora qui abbiamo effettivamente un selettore ID per l'ID di navigazione, giusto, quindi è uno per l'ID. Abbiamo anche due classi pull right e button, quindi sono due per la categoria classes e, infine, ci sono anche due selettori di elementi qui. L'elemento nav e l'elemento div, il che significa che sono anche due per la categoria degli elementi. Quindi, alla fine, la specificità del selettore è zero, uno, due, due, che in realtà è un selettore altamente specifico.

Il selettore numero tre è molto semplice. È solo un selettore di elementi e quindi la specificità è zero, zero, zero, uno.

Adesso l'ultimo, il selettore numero quattro. Per prima cosa abbiamo di nuovo l'ID di navigazione, quindi è uno per l'ID. Successivamente, abbiamo una classe, la classe del pulsante e anche una pseudo-classe, che è hover, il che la rende due per la categoria delle classi in totale. Poiché esiste anche un selettore di elementi, la specificità finale è zero, uno, due, uno.

Ora sappiamo come utilizziamo effettivamente questi numeri per scoprire quale dei selettori si applica. Iniziamo a guardare i numeri da sinistra a destra iniziando dalla categoria più specifica, gli stili in linea. Se c'è un selettore con uno per gli stili in linea, vince contro tutti gli altri selettori, perché questa è la categoria più specifica. Bene, questo non è il caso qui, quindi passiamo agli ID. Vediamo che i selettori due e quattro hanno uno qui mentre gli altri hanno zero quindi quelli con zero sono fuori dal gioco perché sono meno specifici dei selettori due e quattro quelli con gli ID.

Ora poiché entrambi i selettori ne hanno uno nella categoria ID, dobbiamo andare avanti e controllare le classi. Entrambi hanno un due in questa categoria è ancora un pareggio tra loro, e infine, nella categoria degli elementi, il selettore due ha un due mentre il selettore quattro ne ha solo uno e quindi abbiamo un vincitore qui. Il selettore numero due è il selettore più specifico di tutti e quindi darà al nostro pulsante uno sfondo verde.34 Il valore della dichiarazione vincente è chiamato valore a cascata perché è il risultato della cascata.

Quindi iniziamo con un gruppo di valori dichiarati in questo caso blu, verde, viola e giallo, uno di essi vince e diventa il valore a cascata, che nel nostro esempio è verde.

Ora immagina che anche il settore quattro avesse due elementi, quindi entrambi i selettori due e quattro avrebbero la stessa identica specificità, giusto. Quindi cosa succede in questo caso e ti prometto che ora è quasi finita, ok. Ebbene, se c'è ancora un pareggio a questo punto, l'ultima dichiarazione CSS scritta nel codice è quella che verrà applicata. Quindi, ancora una volta, se tutto è uguale, se tutti i selettori di dichiarazioni hanno la stessa specificità, allora è semplicemente l'ultima dichiarazione che verrà utilizzata per modellare l'elemento selezionato.


0

È un processo utilizzato per risolvere i conflitti nella specifica del foglio di stile.

Questo è principalmente il processo di risoluzione dei conflitti eseguito secondo la precedente menzione nei CSS.


0

CSS è l'acronimo di Cascading Style Sheet. Per loro stessa natura gli stili più in basso in un foglio di stile a cascata sovrascrivono gli stili equivalenti più in alto (a meno che gli stili più in alto non siano più specifici). Possiamo quindi impostare gli stili di base all'inizio di un foglio di stile, applicabili a tutte le versioni del nostro progetto, e quindi sovrascrivere le sezioni pertinenti con le media query più avanti nel documento.


0

Cascading significa versare in gradini o aggiungere gradini. I fogli di stile contengono codici per applicare lo stile a un elemento html. E il modo in cui i codici sono scritti nel foglio di stile è a cascata. O semplicemente, codici back to back in strati per ogni elemento html di una pagina html nel foglio di stile formano il foglio di stile a cascata.


0

Il Cascading è un algoritmo che assegna un peso a ciascuna regola di stile. Quando si applicano più regole, quella con il peso maggiore ha la precedenza.


0

Quando uno o più stili vengono applicati allo stesso elemento, il CSS esegue una serie di regole chiamate cascata che valuta la forza della specificità dei due stili applicati e determina il vincitore, ovvero la regola di stile che ha più peso vince. stesso peso allora vince la regola applicata per ultima.


0

Cascade e Specificity cosa devi sapere:

  1. La dichiarazione CSS contrassegnata con! Important ha la massima priorità.

  2. Ma usa solo! Important come ultima risorsa. È meglio usare specificità corrette: codice più gestibile!

  3. Gli stili in linea avranno sempre la priorità sugli stili nei fogli di stile esterni.

  4. Un selettore che contiene 1 ID è più specifico di uno con 1000 classi.

  5. Un selettore che contiene 1 classe è più specifico di quello con 1000 elementi.

  6. Il selettore universale * non ha valore di specificità (0,0,0)

  7. Affidati più alla specificità che all'ordine dei selettori.

  8. Ma affidati all'ordine quando usi fogli di stile di terze parti: metti sempre il foglio di stile dell'autore per ultimo.


0

Nella scelta degli stili CSS da applicare a un elemento HTML, la specificità prevale sulla generalità in base a un insieme di regole a cascata che risolvono i conflitti tra gli stili:

  1. Senza CSS, l'HTML verrà visualizzato in base agli stili predefiniti del browser.
  2. I selettori di tag CSS (corrispondenti al tag HTML) sovrascrivono le impostazioni predefinite del browser.
  3. I selettori di classe CSS (con.) Sovrascrivono i riferimenti ai tag.
  4. I selettori ID CSS (con #) sovrascrivono i riferimenti alle classi.
  5. CSS in linea codificato in un tag HTML sostituisce ID, classe e tag CSS.
  6. L'aggiunta del valore ! Important a uno stile CSS sovrascrive tutto il resto.
  7. Se i selettori CSS sono identici, il browser combina le loro proprietà. Se le proprietà CSS risultanti sono in conflitto, il browser sceglie il valore della proprietà che è apparso successivamente o più di recente nel codice.

Un selettore CSS che corrisponde a una combinazione più specifica di tag, classi e / o ID avrà la priorità. Dei seguenti esempi, il primo avrà la precedenza sul secondo, indipendentemente dal loro ordine di apparizione nel CSS:

ol#identity li.firstname { color: red; }
#identity .firstname { color: blue; }

-2
CSS doc    
p{font-size: 12pt;}
p{font-size: 14pt;}

<p>My Headline<p>

renderebbe il carattere p a 14pt perché è "più vicino" all'elemento effettivo (fogli di stile esterni che vengono caricati dall'inizio alla fine del file). Se utilizzi un foglio di stile collegato e poi includi un po 'di CSS nell'intestazione del tuo documento dopo il collegamento al documento CSS esterno, la dichiarazione "in head" vincerebbe perché è ancora più vicina all'elemento definito. Questo è vero solo per selettori di uguale ponderazione. Controlla http://www.stuffandnonsense.co.uk/archives/css_specificity_wars.html per una buona descrizione del peso di un determinato selettore.

Detto questo, potresti considerare anche l '"eredità" come parte della cascata, per tutti gli scopi pratici. Le cose "cascano" giù dal contenere elementi.


Ciò implica che gli stili si inseriscano tra la materia, anche se non diretti all'elemento dato. Non è corretto, se seguo.
Daniel Springer

Sembra che sia stato modificato. In ogni caso, non capisco come questo risponda alla domanda.
Daniel Springer
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.