2014-04-28 4 views
12

Gibt es eine Open Source- oder generische Implementierung von CSS, die auf eine beliebige Anzeigehierarchie angewendet werden kann? Ich versuche, eine für die Flash-Anzeigehierarchie in AS3 zu erstellen.Wie und wann werden CSS-Regeln auf eine Anzeigehierarchie angewendet?

Ich bin neugierig auf das Verfahren zum Anwenden von CSS-Stilen auf eine Display-Hierarchie. Es scheint mir, dass einige oder alle Selektoren jedes Mal erneut auf die gesamte Anzeigeliste angewendet werden müssten, wenn ein Anzeigeobjekt hinzugefügt, entfernt oder neu positioniert wird, sowie wenn Ereignisse auftreten, wie etwa Fokusänderungen, angesichts der Existenz von Selektoren wie "first-child" und Pseudo-Selektoren wie ": focus".

Würden bei der ersten Anwendung von Stilen die gesamte Anzeigeliste Element für Element durchsucht werden, Stile angewendet werden oder würden alle Objekte vorab sortiert und bestimmten Regelkategorien zugeordnet werden? Oder etwas ähnliches.

Ich bin wirklich auf der Suche nach einer guten allgemeinen Ressource für eine echte Implementierung.

Update: Ich bin wahrscheinlich auf der Suche nach etwas auf der Ebene this, aber ich weiß nicht, ob dies Stand der Technik ist: "Hierarchische Einschränkungen bieten eine einfache, vereinheitlichende Möglichkeit, einen Großteil der CSS 2.0-Spezifikation zu verstehen Diese Sichtweise legt auch nahe, dass Constraint - Solver eine natürliche Implementierungstechnik bieten.Jede Style - Eigenschaft und die Platzierung jedes Elements im Dokument kann durch eine Variable modelliert werden.Einschränkungen dieser Variablen ergeben sich aus Browserfähigkeiten, Standardlayoutverhalten, das sich aus dem Typ von ergibt das Element aus der Dokumentenbaumstruktur und aus der Anwendung von Stilregeln. Das endgültige Aussehen des Dokuments wird bestimmt, indem eine Lösung für diese Einschränkungen gefunden wird. " Das wirft die Frage auf, wie und wann die Beschränkungen zu lösen sind.

+0

Flex verwendet CSS mit MXML, obwohl ich nicht sicher bin, ob seine CSS-Implementierung Open Source ist (es wahrscheinlich ist). – BoltClock

+0

Ich werde das untersuchen. IBM hat eine nette Beschreibung zu CSS in Flex: http://www.ibm.com/developerworks/web/library/wa-cssflex/index.html Ich habe meinen eigenen XML-Display-Listen-Parser erstellt, auf den ich CSS-Unterstützung anwenden werde zu früh. Ein Punkt, an dem sich meine Implementierung unterscheidet, ist, dass Stile sowohl auf DisplayObjects als auch auf TextFields angewendet werden. Ich dachte daran, Funktionalität von normalen Selektoren wie "Tagname" und ".classname" zu erhalten, indem sie ausschließlich auf htmlText in TextFields arbeiten, während neue Selektoren wie "#instancename" und "$ instancetype" auf Objektnamen und Objekttypen angewendet würden. – Triynko

+0

Ich habe bereits Unterstützung für intelligentes Attribut-Parsing implementiert (basierend auf bekannten Objekttyp- + Attributnamenpaaren, sowie auf Objekte für eine Implementierung einer IAttributeParser-Schnittstelle). Referenzauflösung in Attributen (z. B. andere Objekte in der Anzeigeliste) referenziert über "this.objectname", aufgeschobene Zuweisung von Referenzwerten und Textfeldtext, um sicherzustellen, dass Referenzen auflösbar sind und Text zuletzt zugewiesen wird, Datenbindung (2-Wege, 1-Weg, 1-Weg-zu-Quelle), Namespace-Importe , virtuelle Basisnamen für Referenzen, Tag-Aliase, Konstruktoren, die Parameter übernehmen usw. – Triynko

Antwort

1

@Triynko, in Bezug auf How Browsers Work bei HTML5 Rocks:

Verdammt ...

WebCore wirft einfach einen globalen Schalter, wenn ein Geschwister-Selektor auftritt und Stil Freigabe für das gesamte Dokument deaktiviert, wenn sie sind anwesend. Dazu gehören der + Selektor und Selektoren wie: first-child und: last-child.

, dass ein Weg ist es zu handhaben, sledghammer eine Fliege zu töten, ich werde mich nicht daran erinnern, diese Wähler zu verwenden, nie, lol.

Sehr nützlich:

Nachdem das Stylesheet-Parsing, werden die Regeln auf eine von mehreren Hash-Karten hinzugefügt, entsprechend dem Selektor. Es gibt Karten nach ID, nach Klassennamen, nach TAG-Namen und einer allgemeinen Karte ... Wenn der Selektor eine ID ist, wird die Regel zur ID-Map hinzugefügt, wenn es eine Klasse ist, wird sie der Klassenzuordnung usw. hinzugefügt Diese Manipulation erleichtert das Anpassen von Regeln. Es ist nicht notwendig, in jede Deklaration zu schauen: Wir können die relevanten Regeln für ein Element aus den Karten extrahieren. Diese Optimierung eliminiert 95 +% der Regeln, sodass sie beim Matching-Prozess (4.1) nicht einmal berücksichtigt werden müssen.

Und @BoltClock:

Im Allgemeinen komplexen Selektoren werden von rechts abgestimmt (Sekundär natürlich auf diese Optimierungen) nach links, wobei jede Sequenz von einfachen Selektoren Auswerte- und durch jeden Schritt Kombinator in so tun.

Referenzen

Verwandte Themen