Flex中的CSS: (1)本质:CSS被编译器转换为AS代码
来源:互联网 发布:ubuntu 装 anaconda 编辑:程序博客网 时间:2024/05/20 09:08
进入正文前,我们先温习下什么是“CSS选择器”?
CSS层叠样式表有很多种选择器,最基本的三种选择器:类选择器、类型选择器、ID选择器。
看几个例子:
(1-1)类选择器
下例是为所有按钮类型定义CSS样式,所有按钮的文字大小都被约束为12像素。
以某类型为对象来定义CSS样式,这个“Button” 就属于“类选择器”。
Button
{
font-size:12px;
}
(1-2)类别选择器
下例定义了一组CSS样式,并为它起名为“.MyButton”。它并不能约束所有按钮的文字大小。
它只能作用在显式地声明使用它的地方。例如在某个按钮的定义中加入:<s:Button styleName=".MyStyle"/>。
这个“.MyStyle” 就属于“类别选择器”。
.MyStyle
{
font-size:12px;
}
(1-3)ID选择器
下例定义了一组CSS样式,它作用在ID为“txtName”的组件上:<s:textInput id="txtName" width="100%" height="100%"/>
这个“#txtName” 就属于“ID选择器”。
#txtName
{
font-size:12px;
}
Flex支持CSS层叠样式表。
在开发环境中定义CSS就像上面三个例子,语法非常简单。
但本质上,定义的CSS内容将被编译器转换为AS代码。
我们来证明它。
使用FlashBuilder建立Flex工程:test1。并增加编译器参数 -keep-generated-actionscript=true,以此保留编译器自动生成的中间AS代码。
test1.mxml
这是一个非常简单的程序,没有显式地定义任何CSS样式。
因为Flex框架底层定义了很多默认的CSS样式,这些样式会被编译器便已成为AS代码,我们通过下面的例子来看看这些默认的CSS的内容。
styleManager是Flex框架中专门用于管理CSS样式的单例类,通过它我们可以看到其中全部的“CSS选择器”。
<?xml version="1.0" encoding="utf-8"?><!-- styles/SelectorsTest.mxml --><s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:s="library://ns.adobe.com/flex/spark"> <s:layout><s:VerticalLayout/></s:layout><fx:Script><![CDATA[public function showSelectors():void { var selectors:Array = styleManager.selectors;msg.text = "所有的选择器列表如下(" + selectors.length + ")\n";for (var i:int = 0; i < selectors.length; i++) {msg.text += "\n" + selectors[i]; }}]]></fx:Script> <s:Button label="Show Selectors" click="showSelectors()"/> <s:TextArea id="msg" width="100%" height="100%"/></s:Application>
程序运行结果显示一共有18个“CSS选择器”被使用了。是这样吗?如何证明曾经有这18个选择器被生成了?
我们看看编译器自动生成的AS代码中有无线索。
上图中左面generated文件夹的内容就是编译器自动生成的AS文件,其中_test1_Styles.as中定义了被使用的Flex框架默认CSS样式。其内容摘录如下:
分别定义了CursorManager的样式和ToolTip的样式。类似这样的定义共有18处,恰好和test1.mxml的运行结果一一完全对应。
// // mx.managers.CursorManager // selector = null; conditions = null; conditions = null; selector = new CSSSelector(mx.managers.CursorManager, conditions, selector); mergedStyle = styleManager.getMergedStyleDeclaration("mx.managers.CursorManager"); style = new CSSStyleDeclaration(selector, styleManager, mergedStyle == null); 省略。。。 // // mx.controls.ToolTip // selector = null; conditions = null; conditions = null; selector = new CSSSelector(mx.controls.ToolTip, conditions, selector); mergedStyle = styleManager.getMergedStyleDeclaration("mx.controls.ToolTip"); style = new CSSStyleDeclaration(selector, styleManager, mergedStyle == null);
- Flex中的CSS: (1)本质:CSS被编译器转换为AS代码1
- Flex中的CSS: (1)本质:CSS被编译器转换为AS代码
- Flex中的CSS: (2)三种基本类型的CSS会被编译器转换为什么样的AS代码?
- Flex中的CSS: (3)CSS会被编译器转换为什么样的AS代码--交集:s|Button#btn
- Flex中的CSS: (3)CSS会被编译器转换为什么样的AS代码--组合:s|Button#btn, .MyStyle
- Flex中的CSS: (3)CSS会被编译器转换为什么样的AS代码--派生:s|HGroup s|TextInput
- Flex中的CSS: (3)CSS会被编译器转换为什么样的AS代码--全局选择器:global
- Flex中的CSS: (3)CSS会被编译器转换为什么样的AS代码--伪类:s|Button:up
- Flex中的CSS: (3)CSS会被编译器转换为什么样的AS代码--派生的另一种表示:#XXX s|TextInput
- flex文件中的css和.as文件引用
- Flex中的CSS: (4)内部样式和外部样式最终被编译的AS源文件完全相同
- Flex中的CSS: (4)内部样式和内联样式最终被编译的AS源文件不相同
- Flex中的样式(CSS)
- FLEX中的CSS样式
- flex中的css应用
- Flex 4中的 CSS
- css中的flex用法
- 如何使flex中的css文件转化为swf文件
- UIApplicationDelegate
- 重载函数
- 通过flashback_transaction_query查找最近运行过的所有DDL语句
- 分页sql
- libsvm
- Flex中的CSS: (1)本质:CSS被编译器转换为AS代码
- 关于TableView中图片的延时加载
- 用Apache Velocity模板引擎速造网站
- MsSqlServer 表修改监听
- 基于测试数据覆盖率的测试数据准备的手法示例
- 用Apache Velocity模板引擎速造网站
- 查看oracle 用户执行的sql语句历史记录
- 关于GMS
- JavaScript 字符串函数