`
hereson
  • 浏览: 1461027 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Flex中Css 的使用

    博客分类:
  • flex
阅读更多

在Flex 2提供的众多新特性中,其中之一就是constraints-based(基于约束的)布局。如果你以前没有机会研究约束(constraints)的使用,我建议你在这种方法上花一些时间。一开始我很怀疑,但是自从用了之后就真正喜欢上了这个轻量级的布局(相比之下,为了得到复杂的布局,flow-based布局方式经常让你陷入box的深层嵌套中)。constraints-based布局的核心是一系列的属性,让你可以定义控件和容器的布置和锚点。
澄清一点:flow-based布局和constraints-based布局并不是互不相容。使用Flex Builder的设计试图,通过将这二种布局结合让他们发挥各自的优势可以加快开发。
我对这些约束(constraints)属性很是好奇,所以有一天我就在语言参考中查找它们。我发现的是他们并不都是属性!一些我曾经用来内联(inline)的约束(constraints)实际上是样式(styles)。这就是说我可以扩展他们并通过一个外部CSS来控制我的用户界面的外观。以下面的代码和屏幕截图作为起点吧。

<mx:Application layout="absolute" xmlns:mx="http://www.adobe.com/2006/mxml">
  <mx:Panel 
    x="10" 
    y="10" 
    width="274" 
    height="148" 
    layout="absolute" 
    title="Login">
    <mx:Label x="10" y="12" text="Username:" />
    <mx:TextInput x="85" y="10" />
    <mx:Label x="10" y="42" text="Password:" />
    <mx:TextInput x="85" y="40" displayAsPassword="true" />
    <mx:ControlBar>
      <mx:Button label="Login" />
    </mx:ControlBar>
  </mx:Panel>
</mx:Application> 

在第一部分,当你观察屏幕和代码时,没有什么明显的错误和不足。但是当你仔细一点观察时,你会发现这个用户界面的组合方式的一些缺陷。例如,你可能发现这个登录框总是在应用程序的左上角。但是我们很可能希望通过调整屏幕使它在程序的中间。
这个登录框还被特定地设置成去适应文本框控件的大小。这里并没有文本框控件的宽度信息,所以它们的宽度是默认的150像素。如果我需要向登录框中添加另外一个域并且前面的标签比现有的“username”和“password”标签长,将会发生什么?
这可能会迫使我把文本框向右移动。为了保持对齐,然后我还要重新访问其它的对话框并且让它们向右移动。所有的这些向右移动意味着这个面板要更宽。如果面板中的内容可以在容器的边界范围内自动排列,这会不会变得容易些?
约束(constraints)使我很轻松地解决了这些类型的问题。它们还让我通过Flex Builder的设计试图全部都这样做了(使用约束(constraints))。让我们重新看一些添加了约束(constraints)的代码和屏幕截图。

<mx:Application layout="absolute" xmlns:mx="http://www.adobe.com/2006/mxml">
  <mx:Panel 
    width="275" 
    height="150" 
    horizontalCenter="0" 
    verticalCenter="0" 
    layout="absolute" 
    title="Login">
    <mx:Label left="10" top="12" text="Username:" />
    <mx:TextInput left="85" right="10" top="10" />
    <mx:Label left="10" top="42" text="Password:" />
    <mx:TextInput left="85" right="10" top="40" displayAsPassword="true" />
    <mx:ControlBar>
      <mx:Button label="Login" />
    </mx:ControlBar>
  </mx:Panel>
</mx:Application> 

 

现在不管屏幕如何调整,对话框将会一直在程序的中央。另外,不管面板本身大小如何,username和password标签和文本框控件会一直在它们和面板的相对位置上。作为一个附加的效果,我还可以对面板的宽和高的数值进行取整处理(以前是274*148,现在是275*150)。由于这些控件现在可以适当自己调整大小,所以做一些细微的变化变得很容易。
注意所有的X和Y属性现在都没了,因为用户界面的布局现在都是相对于应用程序其他部分的。
然而还有一个关于用户界面的问题在困扰着我,那就是控制栏(ControlBar)中左对齐(默认方式)的“Login”按钮。大部分操作系统将控制按钮排列在对话框的右下方。这很容易更改,对吗?ControlBar默认遵循Hbox的布局。我们可以对它使用约束(constraints),这种布局为我们工作得很好,就像像刚才,避免了讨厌的对齐工作。
幸运的是,ControlBar容器有一个“horizontalAlign”样式,我可以把这个样式内联,写在标签左边,或者我可以把它放到源代码中任何一个样式块中。大多数情况下我们把样式写到一个样式块中,但是接下来我们将更进一步。我们不喜欢把所有这些风格嵌入到应用程序本身中,所以我们会将它们写到一个外部CSS文件中。现在我们所做的所有更改都会集中在这一个文件中。
但是那些约束(constraints)怎么办?我没有提到过他们也都是样式么?他们也是样式,也可以被提取到同样的CSS中。让我们再来看一下这个应用程序的源代码和屏幕截图。

<mx:Application layout="absolute" xmlns:mx="http://www.adobe.com/2006/mxml">
  <mx:Style source="constraints3.css" />
  <mx:Panel 
    width="275" 
    height="150" 
    layout="absolute" 
    title="Login">
    <mx:Label text="Username:" styleName="userlabel" />
    <mx:TextInput styleName="userinput" />
    <mx:Label text="Password:" styleName="passlabel" />
    <mx:TextInput displayAsPassword="true" styleName="passinput" />
    <mx:ControlBar>
      <mx:Button label="Login" />
    </mx:ControlBar>
  </mx:Panel>
</mx:Application> 

 

这个屏幕截图和前面的那个几乎一样,除了“Login”按钮现在对齐到了右边—吆吼!代码只改变了很少,而且改变方式很优雅。现在在适当的地方用样式名取代了原来的约束(constraints)。所有那些讨厌的直接绑定在特定控件上的约束(constraints)现在消失了。实际上它们仍然在那里并且明显看到它们仍然在应用,但是它们现在都在外部的CSS文件中。那个CSS文件才是魔法真正上演的地方,让我们凑近看一下。

ControlBar {
  horizontal-align: right;
}
Label {
  left: 10; 
}
Panel {
  horizontal-center: 0;
  vertical-center: 0; 
}
TextInput {
  left: 85; 
  right: 10; 
}
.userlabel {
  top: 12;
}
.userinput {
  top: 10;
}
.passlabel {
  top: 42;
}
.passinput {
  top: 40; 
} 

 

首先你会发现我在适合对那些控件在块中定义样式的地方用了CSS选择器(selectors)。当你看到TextInput块时,你会发现我没有定义字体和颜色,而是定义了left和right 约束(constraints),因为我希望我的所有的文本框控件都纵向排列,并且保持同样的宽度(相对于容器的边界),定义块级风格就很有意义。文本框和容器顶部关系的约束(constraints)的控制被放在在一个CSS 类别声明中。
所有这些中最好的部分是CSS的层叠特性。TextInput 块中的“left”和“right” 约束(constraints)同样会被被用来定义“top”的类别声明所继承。虽然我们刚才只是看了TextInput,但是对于Label来说这些也一样。这些特性通过在MXML中向控件添加“styleName”属性来实现。
CSS 选择器(selector)和类别声明也可以包含字体,颜色和其他的样式信息。
对约束(constraints)使用这种样式化方式向我提供了一些印象非常深刻的性能。让我们假设一下因为一些原因,不管什么样的原因,我们选择让面板在应用程序的左上方。我可以打开CSS,把"vertical-center" 和"horizontal-center"替换为"left" 和 "top"值,然后就完成了。一个更好的例子可能是:假设我们想要重新排列Label和TextInput控件的顺序。
简单修改一下CSS我就能完全改变控件的排列顺序。当我希望“Password”出现在“Username”前面时,它会像纵向排列一样简单,我还可以把Label控件排列在TextInput空间的右边。不用去搜寻修改内联的属性,只是简单的CSS更改。在Flex Builder设计视图中通过双击修改标签来反映它们新的位置,并且其余的控件会像你想象的一样布局!!

分享到:
评论

相关推荐

    在FLEX中使用CSS样式方法

    在Flex中使用CSS样式方法是构建富互联网应用程序(RIA)的关键技术之一。Flex是一个基于ActionScript和Flash Player的开源框架,用于开发交互式、数据驱动的Web应用。它允许开发者利用CSS来控制组件的外观和布局,...

    Flex_Css完全手册

    - Flex组件库:Flex包含了一套丰富的预定义组件,如Button、Label、List等,这些组件可以直接在MXML中使用,简化了UI开发。 2. **CSS在Flex中的应用** - 样式表:在Flex中,可以使用CSS定义组件的外观和布局,...

    Flex3.0 使用CSS美化界面

    在Flex3.0中,通过使用CSS(层叠样式表)可以对用户界面进行详细的定制和美化,使得应用程序的外观与品牌风格保持一致,同时提高用户体验。 一、Flex3.0中的CSS基础 在Flex3.0中,CSS被用来定义组件的外观和布局,...

    Flex_Css完全手册.doc

    Flex布局,全称为Flexible Box布局,是CSS3中的一项重要布局模型,专门设计来解决复杂的网页和用户界面的布局问题。它允许开发者更加灵活地控制元素的排列、对齐和大小调整,特别是在响应式设计中表现出强大的适应性...

    Flex中的CSS样式

    Flex中的CSS样式 详尽的讲解

    D:\GXSKY\Flex\SDK\Flex+Css完全手册

    D:\GXSKY\Flex\SDK\Flex+Css完全手册D:\GXSKY\Flex\SDK\Flex+Css完全手册D:\GXSKY\Flex\SDK\Flex+Css完全手册D:\GXSKY\Flex\SDK\Flex+Css完全手册D:\GXSKY\Flex\SDK\Flex+Css完全手册D:\GXSKY\Flex\SDK\Flex+Css完全...

    flex css skin

    在Flex中,使用CSS皮肤的优点包括: 1. **可维护性**:将样式与代码分离,使得界面更新和维护更为便捷,减少了代码的耦合度。 2. **灵活性**:通过修改CSS,可以快速改变组件的整体外观,适应不同主题或品牌需求。 ...

    flex css设计器

    Flex CSS设计器是一款基于Flash技术的工具,专门用于帮助开发者对Flex应用程序中的用户界面控件进行CSS样式设计。这款工具提供了一个可视化的环境,使得设计师和开发者能够更直观、便捷地调整Flex控件的外观和布局,...

    关于flex 的css样式表

    - Flexbox在现代浏览器中广泛支持,但在较旧版本的IE浏览器中可能需要使用其他方法(如CSS Grid)或使用polyfill库来实现兼容。 5. **实际应用** - 导航栏:通过`justify-content`实现水平居中或两端对齐。 - ...

    Flex3 css样式代码自动生成

    在Flex3中,CSS(Cascading Style Sheets)是用于控制组件外观和布局的重要工具,通过定义样式规则,可以实现界面的定制化。 Flex3 CSS样式代码自动生成是一个非常实用的功能,它极大地简化了开发者的工作,尤其是...

    css3_flex使用示例

    本资源“css3_flex使用示例”包含了一些关于CSS3 Flexbox的实际应用案例,帮助开发者深入理解和掌握这一强大的布局工具。 1. **Flex容器与项目** - **flex容器**:设置`display`属性为`flex`或`inline-flex`的元素...

    Flex_Css完全手册.pdf

    Flex_Css完全手册.pdf

    Flex动态CSS改变整个application

    在Flex开发中,CSS(Cascading Style Sheets)是一种强大的工具,用于定义用户界面的外观和布局。通过动态地改变CSS样式,我们可以实现应用程序界面的实时更新,为用户提供更丰富的交互体验。本篇文章将深入探讨如何...

    Flex 3 CSS style 设计器

    Flex 3 CSS Style 设计器是一款专为Adobe Flex 3框架设计的强大工具,它提供了可视化的界面,使得开发者能够更加直观、便捷地编辑和管理Flex应用程序中的CSS样式。这款工具对于提升Flex应用的用户界面(UI)设计质量...

    WindowsClassic flex 皮肤 css

    在WindowsClassic flex 皮肤CSS中,主要涉及以下知识点: 1. **Flex框架**:Flex是基于Apache OpenSource的Flash Player和Adobe AIR运行时,用于构建和部署跨平台、跨浏览器的富客户端应用。它提供了丰富的UI组件库...

    使用CSS美化Flex

    1. Flex容器:在CSS中,一个拥有`display: flex`或`display: inline-flex`样式的父元素被称为Flex容器。这个容器中的子元素会按照Flex规则进行排列。 2. 主轴与侧轴:Flex布局定义了主轴(main axis)和侧轴(cross...

    Flex样式生成工具(定制各种Flex按钮网页css样式)

    在实际应用中,Flex CSS样式可以应用于各种类型的网站和应用,无论是在桌面端还是移动端,都能提供优秀的响应式表现。对于那些需要频繁调整和迭代界面设计的项目,Flex样式生成工具无疑是提高开发效率的利器。 总的...

    flex——cssLoader

    下面将详细阐述CSSLoader在Flex中的工作原理、使用方法以及它带来的优势。 1. **工作原理**: Flex CSSLoader是通过ActionScript 3.0的类`mx.styles.CSS`来实现的。这个类提供了加载和解析CSS文件的功能。当你在...

    flex+css安全手册

    《Flex + CSS安全手册》是一份详尽的指南,旨在帮助开发者更好地理解和应用Flex与CSS在构建...通过学习和实践手册中的内容,开发者可以更有效地控制Flex应用的视觉呈现,同时确保CSS的正确使用,避免潜在的安全问题。

Global site tag (gtag.js) - Google Analytics