在Flex4 中提供了两套样式,一个是经典的Halo ,另外就是新加的Spark 。新的Spark 组件比Halo 更容易自定义样式,这对设计者来说是非常有益的,他们不必再为实现一个样式而写大量的代码了。下面来看一个实例,如有以下代码的一个mxml 文件:
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" > <fx:Style > @namespace s "library://ns.adobe.com/flex/spark"; @namespace mx "library://ns.adobe.com/flex/mx"; s|Button { color: #0000FF; } mx|Button { color: #FF0000; } .myStyle{ font-style: italic; } #myId{ font-size: 18; } </fx:Style > <s:Panel title="JuLabs.me Flex4 CSS Demo" styleName="myStyle" width="100%" height="100%" > <s:layout > <s:VerticalLayout /> </s:layout > <s:Button label="蓝色 spark 18号" id="myId" /> <mx:Button label="红色 halo 斜体" styleName="myStyle" /> </s:Panel > </s:Application >
在此例中CSS 代码写在fx:Style 标签里,CSS 代码首先要申明命名空间,如下:
@namespace s "library://ns.adobe .com /flex/spark"; @namespace mx "library://ns.adobe .com /flex/mx";
上面的代码把s 指向了Spark ,把mx 指向了Halo 。然后就可以写相应的CSS 代码了,但在每个样式前面也要加上命名空间名称,子选择符也要加上。如:
?
s |Button { color : #0000FF ; } mx|Button { color : #FF0000 ; }
上面的代码一个定义了Spark 样式的蓝色Button
,第二个定义了Halo 样式的红色Button
。如果在项目中只使用一种样式,那么也可以将这个样式定为默认样式。比如要将Spark 定为默认样式,可以用下面的语句:
@namespace "library://ns.adobe .com /flex/spark";
这样,在写CSS 样式时就不用在每个选择符前面加s| 了。
如果是自定义的组件,可以用下面的语句:
@namespace theme “me.julabs .theme .*”; theme|Button { padding-left : 20 ; }
上面的代码把theme 指向自己定义的组件,这样就可以用theme| 引用自定义的组件了。
也完全可以使用组件的styleName 和id 属性来设置它们的样式,这样也不需要在选择符前面加s| 之类的命名空间名称。如下:
.myStyle { font-style : italic ; } #myId { font-size : 18 ; }
这个例子里的CSS 代码都是直接写在mxml 文件中的fx:Style 标签里的,这其实不符合大项目应用的。可以直接把CSS 代码单独保存为一个文件,比如:style.css ,用fx:Style 的source 属性来指向这个文件,这样就可以实现结构和样式分离的原则。如:
<fx:Style source="style.css" />