Qual è il significato esatto del termine "Cascading" nei CSS? Sto ottenendo punti di vista diversi, quindi chiedo qui. Un esempio aiuterebbe.
Qual è il significato esatto del termine "Cascading" nei CSS? Sto ottenendo punti di vista diversi, quindi chiedo qui. Un esempio aiuterebbe.
Risposte:
"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 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.
Håkon Wium Lie (co-creatore CSS) definisce "cascata" nella sua tesi di dottorato sui CSS come "Il processo di combinazione di diversi fogli di stile e risoluzione dei conflitti tra loro" https://www.wiumlie.no/2006/phd/
Il seguente articolo risponde perfettamente alla tua domanda.
È l'ordine in cui le proprietà vengono applicate a un particolare elemento.
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.
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.)
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:
Dallo pseudo-codice puoi vedere che sembra piuttosto una cascata di diverse cascate.
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.
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.
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.
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.
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.
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.
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.
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.
Cascade e Specificity cosa devi sapere:
La dichiarazione CSS contrassegnata con! Important ha la massima priorità.
Ma usa solo! Important come ultima risorsa. È meglio usare specificità corrette: codice più gestibile!
Gli stili in linea avranno sempre la priorità sugli stili nei fogli di stile esterni.
Un selettore che contiene 1 ID è più specifico di uno con 1000 classi.
Un selettore che contiene 1 classe è più specifico di quello con 1000 elementi.
Il selettore universale * non ha valore di specificità (0,0,0)
Affidati più alla specificità che all'ordine dei selettori.
Ma affidati all'ordine quando usi fogli di stile di terze parti: metti sempre il foglio di stile dell'autore per ultimo.
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:
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; }
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.