2014-04-28 21 views
12

Esiste un open source o un'implementazione generica di CSS che può essere applicata a una gerarchia di display arbitraria? Sto provando a crearne uno per la gerarchia di visualizzazione Flash in AS3.Come e quando vengono applicate le regole CSS a una gerarchia di visualizzazione?

Sono curioso della procedura utilizzata per applicare gli stili CSS a una gerarchia di visualizzazione. Mi sembra che alcuni o tutti i selettori debbano essere riapplicati all'intero elenco di visualizzazione ogni volta che un oggetto di visualizzazione viene aggiunto, rimosso o riposizionato, così come quando si verificano eventi come cambiamenti di messa a fuoco, data l'esistenza di selettori come "first-child" e pseudo-selettori come ": focus".

L'applicazione iniziale di stili comporta la scansione dell'intero elenco di visualizzazione un elemento alla volta, l'applicazione di stili o tutti gli oggetti vengono ordinati in primo piano e associati a categorie di regole particolari? O qualcosa di simile.

Sono davvero alla ricerca di una buona risorsa generale su un'implementazione reale.

Aggiornamento: Probabilmente sto cercando qualcosa al livello di this, ma non so se questo è lo stato dell'arte: "I vincoli gerarchici forniscono un modo semplice e unificante per comprendere gran parte delle specifiche CSS 2.0 Questo punto di vista suggerisce anche che i risolutori di vincoli forniscono una tecnica di implementazione naturale: ogni proprietà di stile e il posizionamento di ciascun elemento nel documento possono essere modellati da una variabile. I vincoli su queste variabili derivano dalle funzionalità del browser, comportamento di layout predefinito derivante dal tipo di l'elemento, dalla struttura ad albero del documento e dall'applicazione delle regole di stile.L'aspetto finale del documento è determinato dalla ricerca di una soluzione a questi vincoli. " Il che pone la domanda su come e quando risolvere i vincoli.

+0

Flex utilizza CSS con MXML, anche se non sono sicuro se la sua attuazione CSS è open source (probabilmente lo è). – BoltClock

+0

Lo esaminerò. IBM ha una bella annotazione sui CSS in Flex: http://www.ibm.com/developerworks/web/library/wa-cssflex/index.html Ho creato il mio parser di elenco di visualizzazione XML, che applicherò il supporto CSS troppo presto. Un punto in cui la mia implementazione sarà diversa è che gli stili verranno applicati sia a DisplayObjects sia a TextField allo stesso modo. Stavo pensando di preservare la funzionalità dei normali selettori come "tagname" e ". Nomed" facendoli operare esclusivamente su htmlText in TextFields, mentre i nuovi selettori come "#nstancename" e "$ instancetype" si applicano ai nomi degli oggetti e ai tipi di oggetto. – Triynko

+0

Ho già implementato il supporto per l'analisi intelligente degli attributi (basata sul tipo di oggetto noto + coppie di nomi di attributi, oltre al controllo degli oggetti per l'implementazione di un'interfaccia IAttributeParser), risoluzione dei riferimenti negli attributi (ad es. Altri oggetti nell'elenco di visualizzazione possono essere referenziato tramite "this.objectname", assegnazione posticipata dei valori di riferimento e del testo del testo per garantire che i riferimenti siano risolvibili e che il testo sia assegnato per ultimo, vincolante per i dati (a 2 vie, a 1 via, 1 via per origine), importazioni di spazio dei nomi , nomi di basi virtuali per riferimenti, alias di tag, costruttori che accettano parametri e altro ancora – Triynko

risposta

1

@Triynko, per quanto riguarda How Browsers Work a HTML5 Rocks:

Dannazione ...

WebCore lancia semplicemente un interruttore globale quando si incontra ogni selettore fratello e disabilita la condivisione dello stile per l'intero documento in cui sono presenti Questo include il selettore + e selettori come: first-child e: last-child.

Questo è un modo per gestirlo, sledghammer per uccidere una mosca, mi ricorderò di non usare quei selettori, mai, lol.

Molto utile:

Dopo l'analisi del foglio di stile, le regole vengono aggiunti a una delle numerose mappe hash, secondo il selettore. Ci sono mappe per id, per nome della classe, per nome del tag e una mappa generale ... Se il selettore è un id, la regola verrà aggiunta alla mappa ID, se è una classe verrà aggiunta alla mappa della classe ecc. Questa manipolazione rende molto più facile abbinare le regole. Non è necessario consultare ogni dichiarazione: possiamo estrarre le regole pertinenti per un elemento dalle mappe. Questa ottimizzazione elimina il 95% delle regole, in modo che non debbano essere nemmeno prese in considerazione durante il processo di abbinamento (4.1).

E @BoltClock:

In generale, selettori complessi sono abbinati da destra a sinistra (secondaria a queste ottimizzazioni ovviamente), valutando ogni sequenza di selettori semplici e passando da un combinatore in così facendo.

Riferimenti