`

Flex ConstraintColumn和constraintRows布局方式

    博客分类:
  • Flex
阅读更多

这个新特性是在beta2中就已存在,是在之前版本的基础上改进的,之前的left,right,top,bottom如今在beta2+版本中有了新的定义语法。改变是小的,但作用与意义却非凡。

  利用flex3的Enhanced Constraints,可以轻松的创建流布局。本例展示如何创建高度自动Shrink的布局,这种布局在博客系统中可以自动根据文章内容的多少调节高度。本文所附源码是用Flex3 beta3编写的,在阅读和使用本实例前,您可能需要安装flex3 beta3,如未请查看从Flex 3 Beta2升级到Beta3的相关问题。

  打开第一个链接,点击[+display post content],application高度将自动扩展。大概当您点到第四次的时候,出抛出一个Error,大意是ArgumentError: Error #2025: 提供的 DisplayObject 必须是调用者的子级。选择全部取消,可以继续。我想这可能是flex3 beta3的一个bug。开发中倘用本实例思想,需要在displayTextHandler方法中添加catch error代码。

  接下来对Enhanced Constraints的简单使用做一下简单介绍:

  Enhanced Constraints其用意旨在控制布局,在此之前我们用VBox,HBox等进行Parent-child布局。在此之后,我们可以使用EC轻松实现Sibling-relative布局。Flex Coder用ConstraintColumn和ConstraintRow实现EC应用。

<mx:Canvas backgroundColor="0x6699FF" id="c"> 
<mx:constraintColumns> 
    <mx:ConstraintColumn id="col1" width="100" /> 
    <mx:ConstraintColumn id="col2" width="100" /> 
</mx:constraintColumns> 
<mx:constraintRows> 
    <mx:ConstraintRow id="row1" height="100" /> 
    <mx:ConstraintRow id="row2" height="100" /> 
</mx:constraintRows> 

<mx:Button label="Button 1" top="row1:10" bottom="row1:10" left="10"/> 
<mx:Button label="Button 2" left="col2:10" right="col2:10" /> 
<mx:Button label="Button 3" top="row2:10" bottom="row2:10" left="col1:10" right="10" /> 
</mx:Canvas>
  恐怕以后ConstraintColumn与ConstraintRow是Flex开发者用的最多的两个Tag。在上图代码中:笔者定义了两个ConstraintColumn与两个ConstraintRow,这四者把其父容器Canvas分成四部分,如下图所示:

我们靠这个“表格”定位Cancas内的Button1,Button2,Button3。用控件的top,bottom,left,right属性定义其相对于Column或Row的位置,bottom="row2:10"代表其下边界相对row2的下边界10个单位。依此类推,top="row2:10"代表其下边界相对row2上边界10个单位。left与right类之,不述。

  在上例代码中,ConstraintColumn与ConstraintRow的width、height属性均是定值,也可以用百分比,如下:

<mx:constraintColumns> 
    <mx:ConstraintColumn id="col1" width="30%" /> 
    <mx:ConstraintColumn id="col2" width="40%" /> 
    <mx:ConstraintColumn id="col3" width="30%" /> 
</mx:constraintColumns> 
<mx:constraintRows> 
    <mx:ConstraintRow id="row1" height="35%" /> 
    <mx:ConstraintRow id="row2" height="55%" /> 
</mx:constraintRows>
  所有column的百分数之和可以不到100,也可以超出一百。也可以不定义。当最后一项column或row不定义width或height时,其并非占用余下的所有百分比。

  值得注意的是,ConstraintColumn/ConstraintRow与控件们的resize关系是相互的,换言之,column/row的长宽属性可以控制/影响控件的长宽,反之也可以。这一点很重要,本文所附实例,关于流布局的实现就是就利用这一特征。看如下代码:

<mx:constraintColumns> 
    <mx:ConstraintColumn id="col1" width="100%" /> 
</mx:constraintColumns> 
<mx:constraintRows> 
    <mx:ConstraintRow id="row1" minHeight="40" /> 
    <mx:ConstraintRow id="row2" height="50"/> 
</mx:constraintRows> 
<!--controls--> 
<mx:Text id="postText" htmlText="empty" left="col1:10"  
right="col1:10" top="row1:0" bottom="row1:10" minHeight="30"/> 
<mx:Button label="+display post content" top="row2:10"  
bottom="row2:10" click="displayTextHandler(event)"/>
  在上面代码中,没有定义row1的height,只定义一个minHeight,保证其最小高度。其row1的高度则实际由postText控制,当postText的内容变化时,会触发resize event,该event会改变row1的高度,这便是ConstraintColumn/ConstraintRow与控件的相互影响性。

分享到:
评论
1 楼 liuyuanhui0301 2011-08-22  
好用的tag  

相关推荐

    flex移动布局,极简公共样式包,附demo

    在现代Web开发中,Flex布局(Flexible Box布局)已经成为创建响应式、动态和灵活的用户界面的标准工具。这个“flex移动布局,极简公共样式包”正是为了方便开发者快速构建适应不同屏幕尺寸的移动端应用而设计的。让...

    flex布局Flex实现常见布局的汇总

    然后其所有的直接子元素就变成flex子元素了,在flex里存在两根轴,叫主轴和交叉轴,互相垂直,主轴默认水平,flex子元素默认会沿主轴排列,可以控制flex子元素在主轴上伸缩,主轴方向可以设置,相关的css属性分为两...

    基本布局_flex基本布局模板_flex_

    在前端开发中,Flex布局(Flexible Box)是一种强大的盒模型布局方式,允许开发者轻松地创建响应式和动态的用户界面。这个"基本布局_flex基本布局模板_flex_"项目旨在介绍和提供一个基础的Flex布局模板,帮助开发者...

    CSS的flex布局.ppt

    网页布局(layout)是CSS的一个重点应用。... 2009年,W3C提出了一种新的方案—-Flex布局,可以简便、完整、响应式地实现各种页面布局。目前,它已经得到了所有浏览器的支持,这意味着,现在就能很安全地使用这项功能。

    flex布局布局篇

    - Flex项目可以使用上述列出的flexbox相关属性来进一步控制布局和对齐方式。 - Flex布局的兼容性很好,主流浏览器大多支持,但某些旧版本的浏览器需要添加特定的前缀,如`-webkit-`。 #### CSS盒子模型 - CSS盒子...

    小程序源码 FlexLayout布局 (代码+截图)

    小程序源码 FlexLayout布局 (代码+截图)小程序源码 FlexLayout布局 (代码+截图)小程序源码 FlexLayout布局 (代码+截图)小程序源码 FlexLayout布局 (代码+截图)小程序源码 FlexLayout布局 (代码+截图)小程序源码 Flex...

    Flex布局让子项保持自身高度的实现

    在用了Flex布局会发现,当水平排列后,会发现所有子项的高度都变成一样的了。   这是因为Flex 布局会默认: 把所有子项变成水平排列。 默认不自动换行。 让子项与其内容等宽,并把所有子项的高度变为最高子项的...

    flex布局(自用自用自用自用自用)

    Flex布局是一种弹性布局方式,可以简便、完整、响应式地实现各种页面布局。它可以定义一个容器,并控制子盒子的位置和排列方式。在 Flex 容器中,默认存在两条轴:水平主轴(main axis)和垂直的交叉轴(cross axis...

    Flex 布局变化时的动画效果解析 简单版

    通过设置`flex-direction`、`justify-content`、`align-items`等属性,可以控制Flex项在主轴(flex-direction决定的方向)和交叉轴上的排列方式。 当Flex布局中的元素发生变化时,可以通过CSS的`transition`属性来...

    前端-flex布局案例

    在前端开发中,Flex布局(Flexible Box Layout)是一种强大的盒模型布局方式,旨在提供更为灵活的版面控制,尤其在响应式设计中扮演着至关重要的角色。本案例将深入探讨Flex布局的核心概念、属性以及如何在实际项目...

    拥抱未来的CSS布局方式flex与grid布局

    "拥抱未来的CSS布局方式flex与grid布局"这个主题将深入探讨两种主流的布局技术:Flexbox(弹性盒布局)和Grid Layout(网格布局),它们彻底改变了我们对网页布局的理解和实践。 **一、Flexbox布局** Flexbox,...

    flex弹性盒子布局实例

    Flexbox,全称为Flexible Box,是CSS3引入的一种布局模型,专为解决复杂的网页布局问题而设计,尤其在处理响应式设计和动态内容时表现出强大的灵活性。本实例将深入探讨Flexbox布局的基本概念、属性以及如何在实际...

    Flex布局学习资料

    这种布局方式特别适合处理需要动态调整的界面,比如响应式设计、自适应网格系统以及在不同设备上保持一致显示的内容。 《Flex弹性布局学习总结.docx》可能是作者对Flex布局学习过程的全面总结,包括基础概念、主要...

    弹性布局-flex布局.zip

    它旨在提供一个更加灵活、响应式的布局方式,尤其适用于多设备环境,如手机、平板电脑等移动设备。在传统布局模式下,元素的尺寸和位置往往受到固定宽度和高度的限制,而Flex布局则允许元素根据容器大小动态调整自身...

    携程网首页主要利用flex布局实现

    随着技术的发展,传统的CSS布局方式如浮动(float)和定位(position)已经无法满足复杂多变的网页设计需求。此时,Flex布局(Flexible Box布局,简称flex布局)应运而生,它提供了一种更为灵活、强大且易于控制的盒...

    微信小程序+Flex布局示例源代码

    通过改变`flex-direction`属性的值为`column`,子元素将沿垂直方向排列,实现纵向布局。同样,`justify-content`和`align-items`属性也可以在新的主轴和交叉轴上调整子元素的排列和对齐。 此外,Flex布局的灵活性还...

    flex布局分享.pptx

    Flex布局是一种现代网页和应用程序设计中的布局模式,它允许开发者更灵活地控制元素在容器内的排列方式,解决了传统布局方式(如盒模型)在处理复杂布局时的诸多不便。Flex布局于2009年由W3C提出,现在已经得到了...

    flex布局实战搭建网页页面

    Flex布局的主要目标是解决传统CSS布局(如Block和Inline)在处理复杂或响应式布局时的局限性。它允许开发者更加灵活地控制容器内元素的排列、对齐和分配空间。 1. **容器属性**:Flex布局的主体是容器,可以通过...

    flex布局实例DOM

    Flex布局,全称为“Flexible Box”,也称作弹性盒布局,是CSS3中的一种布局模式,旨在提供一种更加高效、灵活的方式来对网页或应用程序中的容器内的子元素进行排列、对齐和分配空间。这种布局模式在响应式设计、...

Global site tag (gtag.js) - Google Analytics