二月 10th, 2010

web中的区域对齐

as、flex, 前端开发, by army8735.

说到对齐方式,一般联想到的无非四种:左对齐、右对齐、上对齐和下对齐。通过其中的两两组合,可以衍生出:左上角对齐、左下角对齐、右上角对齐和右下角对齐。在css中这些类型很常见,比如绝对定位:

.left_top {
	position: absolute;
	left: 0;
	top: 0;
}
.left_bottom {
	position: absolute;
	left: 0;
	bottom: 0;
}
.right_top {
	position: absolute;
	right: 0;
	top: 0;
}
.right_bottom {
	position: absolute;
	right: 0;
	bottom: 0;
}

我们很容易用css来作出四个角对齐或者四个方向居中对齐的效果。但是在as当中,则有一点点麻烦了。

说到对齐之前,首先要接触到StageScaleMode这个常量,它被赋给stage.scaleMode,用以指定整个swf程序的缩放模式,默认的是NO_SCALE,即不缩放。详细示例如下图:

stagealign1

当然StageScaleMode还有保持高宽比的SHOW_ALL常量以及保持高宽比并可能进行裁剪的NO_BORDER常量。上面只例举了两种对立的情形。当涉及到StageAlign的时候,我们默认为StageScaleMode就是默认的NO_SCALE,这样对齐才有意义。

在css中,也经常会遇到类似的情况。一个div区域有自己的高宽,超出区域范围之外的用overflow来控制可见度。譬如是右上角对齐的css,例子是这样:

<style>
.outer{position:relative;width:100px;height:100px;border:1px solid #f00;overflow:hidden;}
.inner{position:absolute;top:0;right:0;width:200px;height:200px;background:#000;}
</style>

<div class="outer">
	<div class="inner"></div>
</div>

在as当中,想要做到同样的效果的话,可以借助StageAlign这个常量,它被赋给stage.align属性,所起的作用就和上面说的css对齐方式一样。同样是右上角对齐,我们只要在文档类中声明一下即可达到效果:

package {
	import flash.display.*;

	public class Main extends Sprite {
		public function Main():void {
			stage.align = StageAlign.TOP_RIGHT;
		}
	}
}

用图片做示例,页面嵌入一个原始大小为50*50的swf文件,假如外部容器(object标签或者emebed标签)的高宽值被改变,swf仍然是右上角对齐:

stagealign2

依此我们便可以作出自由指定显示swf内容范围的功能,比如初始swf原始大小为100*100,但是外部容器只设定宽高为50*50。当为右上角对齐时,swf只显示右上区域的50*50部分。当某件事发生时(比如鼠标点击一个按钮),外部容器款高变成100*100,如此便能看见全部的swf了。

Back Top

回复自“web中的区域对齐”

  1. 没有任何评论。
  1. 没有任何引用。

发表回复

Back Top