2010-05-13 15 views
15

Ho il seguente codice HTML.In quale ordine sono applicati gli stili CSS?

<ul> 
    <li> 
    <a>asdas</a> 
    </li> 
</ul> 

Nel mio foglio di stile CSS devo impostazioni generali per il tag, e diverse hundered linee successive impostazioni per ul li a. Ti piace questa:

a:link 
{ 
color: red; 
} 
... 
ul li a 
{ 
color:blue; 
} 

Firebug mi dice, che prima il colore: blu viene caricato, e poi sovrascritto per colore: rosso
Finora ho sempre pensato, che l'ordine dei file CSS di carico e la l'ordine di stile all'interno di un singolo file css indica al browser come devono essere formattati gli elementi HTML. Purtroppo ora lo sto vivendo viceversa.

Quindi dimmi, come devo correggere il mio stile per ottenere un tag all'interno del li da rendere blu e non rosso?

+0

possibile duplicato di [Qual è il comportamento delle specifiche per due stili CSS in conflitto da un file esterno? Quanto bene i browser supportano questo?] (Http://stackoverflow.com/questions/2819410/what-is-the-spec-behavior-for-two-conflicting-css-styles-from-an-external-file) – Quentin

risposta

21

Gli stili vengono applicati in base allo stile specifico all'elemento e quindi in ordine testuale per le regole con uguale specificità. Altro qui in the spec. Perché a:link è più specifico di ul li a, che lo stile vince indipendentemente dal posizionamento.

Quindi dimmi, come devo correggere il mio stile per ottenere un tag all'interno del li da rendere blu e non rosso?

Rendere la regola blu almeno altrettanto specifica della regola rossa. In questo caso, è possibile farlo con l'aggiunta di :link ad esso:

ul li a:link 
{ 
    color:blue; 
} 
+4

Il vero motivo è che 'a: link' è più specifico di' ul li a'. – Quentin

+0

@David: Abbastanza! Sì, ho lasciato cadere l'inizio di quello, no? Fisso. –

+0

Questa risposta in realtà non risponde alla domanda "come devo correggere il mio stile per ottenere un tag all'interno del li da rendere blu e non rosso?" –

0

userei color:blue !important;

+8

Ci sono due problemi con questo. Innanzitutto, hai sbagliato la sintassi (il botto precede la parola importante). Secondo, è l'approccio della mazza e non si torna indietro. Se hai un terzo stile che vuoi mettere in cascata, allora è importante farlo cadere. – Quentin

+0

@David Dorward Grazie, l'ho corretto.Stavo solo rispondendo alla sua domanda "Allora dimmi, come devo correggere il mio stile per ottenere un tag all'interno del li per essere reso blu e non rosso?" Non è vero, non ha detto nulla sul terzo stile ora: D È molto brutto Sono d'accordo ma risponde alla sua domanda – ant

+0

Può downvoter dirmi perché il downvote, ho corretto l'errore di sintassi, cos'altro devo correggere/spiegare/o no – ant

9

Ecco un articolo su CSS Selector specificità che sembra buono: http://www.smashingmagazine.com/2007/07/27/css-specificity-things-you-should-know/

La sezione in Come misurare la specificità? ti dà la risposta:

a:link => one tag (a) + one pseudo-class (:link) = 1 + 10 = 11 points 
ul li a: => three tags (ul, li, a)     = 1 + 1 + 1 = 3 points 

Così i una: vince stile di collegamento.

Suggerimento: ordine (nei file CSS) importa solo quando due selettori di CSS hanno la stessa specificità.

Problemi correlati