Flex Styles: Utilisation des CSS et des sélecteurs (Class / Type)
Vous pouvez utiliser les CSS pour définir des styles pour vos composants. Bien que vous pouviez utiliser les CSS à l'exécution, nous allons voir comment ils sont utilisés à la compilation Flex.CSS est une méthode standard pour appliquer des styles à travers des plate-formes, langages et frameworks. La syntaxe des CSS en Flex est identique à celle utilisée pour le HTML.
Par exemple, voici un sélecteur de classe pour une application Flex, écrit en CSS:
.example {
color:red;
}
Bien que la syntaxe des CSS dans Flex soit identique à celle utilisée pour le HTML, toutes les propriétés HTML ne sont pas disponibles dans Flex.
Quand vous définissez des CSS pour une application RIA Flex, vous avez deux options de base: feuilles de styles externes ou définitions de style locales. Dans les deux cas, le CSS est compilé dans l'application donc ces options sont fonctionnellement identiques. Cependant, il y a des avantages aux deux méthodes. Les feuilles de style externes (External Stylesheets) vous permettent de faire une meilleure distinction entre la mise en page (layout MXML) et le style (documents CSS externes). De plus, quand utilisez des feuilles CSS externes, vous pouvez définir les styles à un endroit et les utiliser à l'intérieur d'un document MXML sans avoir à les redéfinir. De l'autre côté, les définitions locales sont plus pratiques quand vous voulez utiliser seulement un fichier MXML.
Une feuille CSS externe est un fichier texte que vous compilez dans une application Flex en utilisant l'attribut "source" du tag MXML Style.
La code suivant est un exemple de tag Style qui compile une CSS externe nommée styles.css. Les styles définis dans ce document sont ensuite disponibles dans le document MXML dans lequel le tag Style apparaît.
<mx:Style source="styles.css"/>
Si vous voulez utiliser des définitions locales, vous pouvez simplement placer le code CSS dans la balise Style comme ceci:
<mx:Style>
.example {
color:red;
}
</mx:Style>
Que vous utilisiez des CSS externes ou locales, vous pouvez définir les mêmes sélecteurs de style, de type ou de classe. Les sélecteurs de classe commencent toujours par un point suivi du nom de la classe comme dans l'exemple précédent. L'exemple précédent définit uniquement un style pour un sélecteur. L'exemple suivant en défini deux:
<mx:Style>
.example {
color:red;
font-style: italic;
}
</mx:Style>
Quand vous voulez appliquer un sélecteur de classe à un composant, vous devez fixer la propriété styleName du composant. La valeur de styleName devra être le nom de la classe en question sans le point. L'exemple suivant fixe la propriété styleName d'un bouton avec la classe de l'exemple précédent:
<mx:Button label="Exemple" styleName="example"/>
Si vous voulez utiliser la propriété styleName d'un composant en utilisant Action Script, utiliser cette syntaxe:
button.styleName="example";
L'autre type de sélecteur est appelé sélecteur de type, est il est automatiquement appliqué à tous les composants du type spécifié par le nom du sélecteur. Par exemple, vous pouvez définir un sélecteur de type appelé Button, et il sera automatiquement appliqué à tous les boutons:
Button {
color:red;
}
Les sélecteurs de classe sont toujours prioritaires par rapport aux sélecteur de type. L'exemple suivant définit un sélecteur de type (Button) et un sélecteur de classe. Dans ce cas, le texte sera en italique car c'est le sélecteur de type qui le définit comme tel. Cependant, puisque le sélecteur de classe définit la couleur comme vert, le bouton sera vert et non pas rouge:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
>
<mx:Style>
Button {
color: red;
font-style:italic;
}
.example {
color: green;
}
</mx:Style>
<mx:Button label="Exemple" styleName="example"/>
</mx:Application>
Ni les CSS externes, ni les CSS locales ont une priorité particulière. Si vous utilisez les deux dans un document, vous verrez que l'ordre dans lequel elle apparaissent dans le document détermine lequel prend le dessus. Si on prend par exemple pour illustrer cela, avec une CSS externe styles.css contenant uniquement ce sélecteur de classe:
.example {
color:red;
font-style: italic;
}
L'exemple suivant utilise cette feuille CSS externe mais aussi une définition locale du même sélecteur. Dans ce cas, le bouton à un label vert en italique car la définition locale prend le dessus car elle apparaît après l'inclusion de la CSS externe dans le code:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
>
<mx:Style source="styles.css"/>
<mx:Style>
.example {
color: green;
}
</mx:Style>
<mx:Button label="Exemple" styleName="example"/>
</mx:Application>
Si vous inversez l'ordre des tags Styles, vous verrez que le label du bouton est maintenant rouge.
Propriétés de Style
En Flex, tous les noms de propriétés de style doivent être capables d'être traitées comme variables. C'est pour cette raison qu'il est nécessaire pour tous les noms de propriétés de style de suivre les même règles que pour les variables. Ce qui veut dire qu'elles ne doivent contenir que des caractères alphabétiques ou numériques. Notamment, les variables de peuvent contenir de tiret. Cependant, le CSS traditionnel supporte les propriétés contenant un tiret (font-family par ex.), et pour cette raison, Flex le supporte aussi. En fait, Flex va convertir cette valeur avec tiret en une valeur normée. Par exemple, si vous voulez fixer le nom de la police, vous devez utiliser la propriété de Style font-family ou fontFamily en CSS. Cependant, vous ne pouvez pas pas utiliser de valeur avec des tirets en ActionScript quand vous utlisez setStyle() ou des style inline.
Articles similaires
- Flex Styles: Styles Global et Priorités entre les Styles
- Flex Styles: Instances de Styles et Inline Style
- Flex Styles: Utilisation du StyleManager et setStyleDeclaration
- Flex ToolTip – Appliquer des Styles aux ToolTips
- Flex Chart – Modifier les styles d'un HLOCChart (stroke, closeTickStroke, openTickStroke)






1 décembre 2009
Salut,
Est-il possible de récupérer les éléments flex comme en html avec javascript?
par la class css (avec jquery):
$(".maClasse"):array
ou bien par leur nom :
getElementByTagName('nameElement'):array
un équivalent as3 pour flex?
1 décembre 2009
Je pense que la solution que tu cherches est :
StyleManager.getStyleDeclaration(".newSelector");
Plus d'infos dans cet article:
http://www.flex-tutorial.fr/2008/05/22/flex-styles-utilisation-du-stylemanager-et-setstyledeclaration/
Fabien
1 décembre 2009
Merci pour l'information, mais j'ai l'impression que StyleManager.getStyleDeclaration(".newSelector"); ne récupère pas tous les éléments, dans un tableau, qui porte la class ".newSelector" mais elle permet de modifier les styles de se selector ".newSelector". (si j'ai bien compris).
Je cherche vraiment à faire comme en javascript (si cela est possible), récupérer dans un tableau tous les éléments qui porte cette class ".selector" ou une autre solution équivalente qui me permetré de pouvoir boucler mon tableau et accèder au éléments.
merci d'avance
1 décembre 2009
Ah ok, tu veux récupérer tous les objets de ton application qui on un styleName="monSelector" et pas le style CSS "monSelector". C'est un peu tordu de passer par un style css pour récupérer des instances d'objet non ?
A mon avis, ce n'est pas aussi simple qu'en jQuery ou il faut parcourir le DOM (et ou les "class" ne servent pas qu'aux styles CSS me semble-t-il).
A mon avis, tu dois essayer d'enregistrer tes composants autrement, s'ils sont éparpillés dans ton application et que tu as besoin d'accéder aux instances et pas aux styles. La solution sale que j'ai à l'instant et qu'ils envoient un event à la création qui enregistre leur référence quelque part dans l'application. Mais bon …
Fabien
26 janvier 2010
Hello!
Cet article est très intéressant. J'allais attaquer la mise en page, et je constate que les choses sont simples.
À propos des styles, je tiens à signaler l'existence d'un outil intéressant. Il s'agit d'une interface qui permet de tester les paramètres des styles sur divers composants.
http://examples.adobe.com/flex3/consulting/styleexplorer/Flex3StyleExplorer.html#
A+
16 février 2010
Bonjour,
il y aurait une documentation (en gros comment styler les composants flex), mis à part le site 'styleexplorer' (à mon gout il manque des infos). parce que j'ai l'impression que c'est le parcour du combattan pour enlever une simple bordure au composant button
lol.
Merci d'avance
16 février 2010
Salut,
si tu regardes dans les livedocs, tu as tous les styles associés à un bouton. La plupart des noms sont assez explicites pour savoir directement sur quoi ils agissent. Au pire, tu auras le détail plus bas
Fabien
17 février 2010
Salut,
merci beaucoup effectivement la doc explique tout, je la lis pas assez souvent. Avant de poster je jetterais un oeil
merci encore
17 février 2010
Pas de souci
On sous-estime souvent les docs car celles des autres produits sont souvent incomplètes alors que les livedocs Adobe sont de très bonne facture je pense
Fabien
8 avril 2010
Salut,
Qu'en est-il des performances entre l'utilisation d'un de sélecteur de type par rapport à un selecteur de classe ?
8 avril 2010
@loop
Salut, je ne pense pas qu'il ait une différence. En tout cas, je n'ai jamais entendu parler d'une référence
Fabien