`
darrenzhu
  • 浏览: 804262 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Flex程序适应不同屏幕尺寸和分辨率(滚动条)

阅读更多
FlashBuilder编译后自动生成的xx.html里面定义了浏览器如何显示滚动条。
自动生成的html页面里有如下样式定义:

        <style type="text/css" media="screen"> 
           html, body  { height:100%; }
            body { margin:0; padding:0; overflow:auto; text-align:center; 
                   background-color: #ffffff; }   
            object:focus { outline:none; }
            #flashContent { display:none; }
        </style>


当Flex Application的高度小于浏览器的高度时,会有一个灰色不可用的滚动条。
当Flex Application的高度大于浏览器的高度时,会出现两个滚动条。
为什么会有两个滚动条呢?
外层滚动条:
默认情况下html的滚动条是会出现的,只不过是灰色不可用状态。
内层滚动条:
body的overflow设为auto,当内容超过浏览器高度时,body的滚动条就会出现。

所以在这里,外层的滚动条基本上是没有意义的,应该手动隐藏,body的设为auto。
添加一行html{ overflow:hidden; }即可变成一个滚动条。当Flex的Application的高度高于浏览器的高度时,出现的滚动条是属于body的,我们只需关闭html的滚动条并设置body{margin:0,padding:0}即可保证只出现body的滚动条并且没有多余的空隙。


解释:
html, body  { height:100%; }是为了兼容各个浏览器。
IE 处于非标准模式时,body以窗口为高度参照,body设置为100%就可以使得页面和窗口一样高,body里面的嵌套div也可以扩展到窗口高度,这样的话可以使布局适应浏览器窗口大小。
窗体 》body》div  (html ,body {overflow:scroll}  一层滚动条)

但是当处于标准模式时,body以html标签为高度参照,html标签以窗口为参照,所以仅仅body 100%,并不能使它的子div100% 占据整个屏幕,还要使得 html 100%使得 html获得窗口大小才行。
窗体》html》body》div (html ,body {overflow:scroll}  两层滚动条 ,html的滚动条从来不会用到)


当Flex程序的内容高度大于浏览器的高度时,如何使浏览器出现滚动条呢?
如果Application标签下的子内容整体高度或宽度超过了浏览器的高度(浏览器最大化时则为屏幕最佳分辨率),我们期望浏览器出现滚动条来显示所有内容,那么你必须给Application的width和height属性显示赋值,当然该值应该是大于浏览器高度的,或者大于竖向分辨率。如果你设置Applicatioin的width=100%和height=100%或者不显示赋值,那么代表的意思都是Application的width和height与浏览器的窗口的width和height一致,那么当然是不会出现滚动条的,这时一个屏幕显示不了的内容就没有办法看到了。
案例:
假设你的屏幕分辨率是1024x768,浏览器全屏显示(此时768即为浏览器高度),
如果Application下有两个Panel,
Panel1 height=500,
Panel2 height=400,
因为500+400>768,
1) 如果你将Application的height设为大于等于900,则浏览器会出现body的滚动条,你可以通过滚动条看到两个Panel的所用内容;
2) 如果你将Application的height设为小于900,但大于768,则浏览器会出现滚动条,但是即使滑动滚动条,你也不能看到Panel2的所用内容,因为Application的高度小于内容的高度900;
3) 如果你将Application的高度设为小于768,那么你既看不到浏览器body的滚动条,也不可能看到所用的内容,超出Application高度的内容直接不显示,所以你没有办法看到。


如何让Flex程序友好的支持不同的屏幕尺寸或屏幕分辨率?

友好: 任何时候都能看到所有内容

问题:
如果Flex程序中的组件既有用百分比表示的,也有用绝对值pixel表示的,那么当将程序在某一特定分辨率调试好后,比如1600x1200,在另一低分辨率下浏览比如1024x768,你可能会发现有一部分内容看不到,而且也没有滚动条(包括浏览器滚动条和组件的滚动条)出现,让你滑动滚动条来浏览显示不下的内容。原因是绝对值定义的组件会保持大小不变,但是当屏幕尺寸变小时,那些用百分比设置的组件可能会没有足够剩余的空间分配,所以显示不出来。


解决方案建议:
1)Flex程序里的高度和宽度都用百分比表示,这样会自动缩放,只是当屏幕很小时,组件会变得很小,难以操作。这种方式下浏览器的滚动条是不会出现的。

2)Flex组件设置具体的宽度和高度,让浏览器在屏幕小时出现滚动条。为了能够做到这一点,你必须显示的设置具体的值给Application标签以及Flex组件(最好是所有组件,如果部分用百分比,屏幕小时,可能分配不到足够的空间,会显示不了内容)的width和height,不能设置百分比。对于Application的宽和高设置,你可用采用简单的方式,既设置最大的屏幕分辨率,这样在小屏幕上,就会出现浏览器的body的滚动条。优点是,你可以定义每个组件的绝对高度和宽度,缺点组件不会在屏幕小时自动缩放,但是每个组件不会变形。

3)禁用浏览器的滚动条,给主要的组件和容器设置绝对的宽度和高度。这样Flex容器会自动出现Flex组件的滚动条。既可以让一部分组件缩放变形,又可以让另一部分组件始终不变形。

如何使Flex组件的父容器出现滚动条
当组件的高度超过父容器的高度时,mx自动会出现滚动条,spark组件需要自己添加scroll组件。


预备知识:
正确认识html与body 文章一
标准与非标准模式

standard模式后,定义和解析将更加严格,所有定义必须从顶级标签html开始。

可以理解为传统非standard模式定义body的用法,standard模式下都必须在html上定义。

高度100%的意义

认为standard模式下定义容器高度100%无效,是错误的理论。

如果需要body内的容器有100%高度,必须先定义body高度100%。

html与body的默认值

1. IE6.0环境下html默认有2层border的内嵌效果,FF1.5环境下默认则没有,
2. IE6.0和FF1.5环境下的body都有一定的margin值
3. IE6.0环境下html默认就是100%高度,body则不是;FF1.5环境下html和body高度默认都不是100%,需要自定义。

一般情况下统一默认的方案:
html { height:100%; border:0;}body { height:100%; margin:0;}
滚动条的设置
可以这么认为,非standard模式页面的默认滚动条是body的,而standard则是html的。
standard模式下的body默认就没有滚动条,只是html下级的一个容器而已,这样定义会看的更清楚:
定位参照
html { background:#ccc; height:100%; border:0; overflow:scroll;}body { background:#f00; height:100%; margin:0; overflow:scroll;}

相同的道理,standard模式下当使用position方法的时候,其定位参照肯定是html,而不是非standard模式的body。

根据这个特性很容易把层覆盖在body上
参考文档:http://www.alixixi.com/web/a/2008040144652.shtml


正确认识html与body 文章二
1)在Firefox、Chrome中,DOCTYPE为XHTML 1.0 Strict下默认html和body的高度是根据内容定,在body下设置一个高度为height:100%的div并不会充满整个浏览器窗口,必须同时设置html和body的高度为100%方可使该div充满整个浏览器窗口

2)body的overflow默认值:ie6下overflow-y=scroll,overflow-x=auto;Firefox、Chrome默认均为auto. 因此如果不设置body的overflow,默认状态下ie6就会显示不合理的垂直滚动条,设overflow=auto或hidden均可解决

3)各种浏览器body的margin都不是0,因此要保证div100%高并且正好充满整个窗口,须将body的margin设为0

4)手动调整浏览器的高度时:

4-1)如果div的overflow=auto:该div会自动保持100%的高度。当窗口缩小到小于div内容的高度时,div就会出现滚动条, 这时不管body的overflow=auto或hidden,均不会出现body的滚动条。

4-2)如果div的overflow=hidden:该div会自动保持100%的高度。Firefox、Chrome、Safari、ie6的行为是一至的,该div内的溢出 部分内容均会隐藏掉,这时不管body的overflow=auto或hidden,也不会出现body的滚动条。

4-3)如果div的overflow=scroll:该div会自动保持100%的高度。Firefox、Chrome、Safari、ie6的行为是一至的,永远都出现滚动条, 这时不管body的overflow=auto或hidden,均不会出现body的滚动条。

4-4)如果div的overflow没有设置或设为visible:Firefox、Chrome、Safari的行为是一至的,该div会自动保持100%的高度,div内的溢出部分内 容会溢出显示,当窗口高度小于div的内容高度时,若body的overflow=auto,就会出现body的滚动条。IE6则比较怪异,在 窗口高度不小于div内容的高度时,该div会自动保持100%的高度;但当窗口高度小于div内容的高度时,该div不会自动保持 100%的高度,而是等于内容的高度不再变,内容不会出现溢出效果,此时若body的overflow=auto,就会出现body的滚动条。

总结:html和body的高度设为100%,body设margin=0、overflow=hidden,div设overflow=auto,各浏览器表现一至,效果最佳
分享到:
评论

相关推荐

    Flex开发移动设备应用程序

    - **支持多屏幕大小和 DPI 值**: 移动设备的屏幕尺寸多样,开发者需要确保应用程序能够在各种屏幕尺寸和分辨率上良好运行。 #### 六、文本处理 - **使用文本**: 移动应用程序中使用文本的方式,包括文本输入、显示...

    ADOBE FLEX 和 ADOBE FLASH BUILDER 开发手机应用程序

    - **布局管理**:Flex 4.5 提供了多种布局管理器,如 `VerticalLayout` 和 `HorizontalLayout`,它们可以帮助自动调整控件的位置和大小,以适应不同的屏幕尺寸。 - **用户输入处理**:移动应用通常依赖触摸屏进行...

    flex4.5中文文档

    - **滚动条的使用**:演示如何添加滚动条,以适应不同的屏幕尺寸和内容长度。 - **菜单定义与忙碌指示符显示**:解释如何设计菜单,并在执行耗时任务时显示进度提示。 - **过渡效果定义**:教授如何添加平滑的转换...

    Flex air中TileList控件实现相册

    考虑到不同设备的屏幕尺寸,相册应用应具备响应式设计。可以使用Flex的LayoutManager和ConditionalEmbedding来适配不同分辨率和方向。例如,可以为手机和平板设备设置不同的列数和布局。 总结,通过Flex Air中的...

    Flex 组件边框线样式

    Flex组件的边框线样式也需要根据不同的屏幕尺寸进行适配。可以使用Flex的布局管理器和媒体查询来实现不同分辨率下的样式切换。 7. 模式对话框(Modal Dialogs) 模式对话框通常需要有特殊的边框样式以突出其重要性...

    组件随窗口大小改变

    这通常需要开发者考虑用户界面的响应式设计,确保应用在不同屏幕尺寸和分辨率下都能提供良好的用户体验。 一、窗口大小改变 窗口大小改变是用户界面中常见的交互方式,允许用户根据自己的需求调整窗口的宽度和高度...

    Developing Mobile Applications with ADOBE FLEX and ADOBE FLASH BUILDER

    - **适应不同屏幕尺寸**:使用Flex的自动布局功能,使界面能够自适应各种分辨率。 - **处理用户输入**:包括触摸事件、手势识别等功能。 - **定义视图**:使用容器组件组织页面结构。 - **定义标签页**:实现多页面...

    Flex FLV播放器 + 带缩略图的 图片切换广告

    6. **响应式布局**:考虑到不同设备和屏幕尺寸,确保播放器和缩略图导航能够适应各种分辨率,可能需要使用Flex的布局管理器和CSS样式。 7. **优化性能**:对于大量图片的加载,可能需要实现异步加载策略,避免阻塞...

    developing_mobile_apps_flex_4.6.pdf

    - **支持多种屏幕尺寸和DPI值**:考虑到不同设备的屏幕尺寸和分辨率差异,设计出能够自适应各种屏幕的应用。 以上内容覆盖了使用Adobe Flex 4.6与Adobe Flash Builder 4.6进行移动应用开发的基础到高级知识点,从...

    developing_mobile_apps_flex_4.6

    - **使用滚动条**:适配各种屏幕尺寸,确保内容能够被完整展示。 - **定义菜单**:为用户提供访问应用内各项功能的入口。 - **显示忙碌指示符**:提升用户体验,在执行耗时操作时给予反馈。 - **添加切换开关**:...

    全屏响应式文章水平横向布局

    全屏响应式文章水平横向布局是一种现代网页设计技术,它主要应用于创建适应各种屏幕尺寸的网页,确保在桌面、平板电脑以及手机等不同设备上都能提供良好的阅读体验。这种布局方式充分利用了HTML5的新特性,使得内容...

    as3 arpg游戏常用组件,自定义背包,skin

    3. **响应式设计**:皮肤设计需要考虑不同屏幕尺寸和分辨率,确保在各种设备上都能良好显示。 4. **资源管理**:皮肤通常涉及大量的图片、音频和动画资源,有效的资源管理系统能优化加载速度和内存使用。 5. **兼容...

    自适应宽度的标签导航

    通过设置不同的断点,可以确保在不同屏幕尺寸下,导航栏的表现都能适应。例如,`@media screen and (max-width: 768px) {}` 可以定义在屏幕宽度小于768px时的样式。 3. **响应式框架**:Bootstrap、Foundation等...

    微信小程序整个页面的自动适应布局的实现

    本文将深入探讨如何实现这一目标,特别是在各种屏幕尺寸下保持页面元素的视觉一致性。 首先,我们需要了解微信小程序中的尺寸单位——rpx(responsive pixel)。rpx是专为微信小程序设计的一种单位,它的特点是能够...

    自适应横向宽屏幻灯片代码

    - `&lt;img&gt;`元素用于加载幻灯片图片,可以设置其`srcset`属性来提供不同分辨率的图片,以适应不同的设备和屏幕尺寸。 - `&lt;nav&gt;`元素可创建导航条,包含控制幻灯片切换的按钮。 2. **CSS3 属性**: - `display: ...

    WAP/手机网页底部悬浮图片定时翻滚广告代码特效单图带关闭按钮

    4. **响应式设计**: 考虑到手机屏幕尺寸多样,代码需具备响应式,适应不同设备的显示需求,保证在不同分辨率下的良好显示效果。 5. **性能优化**: 为了不影响网页加载速度和用户体验,可能需要对图片进行优化,例如...

Global site tag (gtag.js) - Google Analytics