图标库
  • 关于background-attachment的研究

    更新:
    Update 2008-9-12 14:59:57:
    感谢同事OneMax的提醒:
    background-attachment是在设置fixed时才是相对body定位;
    IE7是支持background-attachment:scroll的;

    我发现了很多疏漏之处,马上重新整理了一下。
    关于background-attachment,针对IE系列浏览器的特性如下:

    IE6:默认效果scroll,设置scroll效果正常,设置fixed正常。(IE6完美支持;和标准浏览器的表现却天壤之别)

    IE7:默认效果scroll,设置scroll效果正常,设置fixed背景图像位置重置。(一半像IE6一半像IE8,承上启下?)

    IE8:默认效果fixed,设置scroll后是fixed效果,设置fixed背景图像位置重置。(最接近标准浏览器的表现)

    希望通过此整理,对background-attachment会有更清晰的认识:)

    IE 系列,在这方面的表现,的的确确令人头痛。个人感觉IE7目前的状况是比上不足比下有余,食之无味弃之可惜。对用户来讲或对开发人员来讲,都是很让人别扭 的一款浏览器。希望IE高级版本能尽快取代老版本浏览器形成统一,也希望Windows7能取代XP和惨死的Vista,捆绑着最新版的IE浏览器,带着 开发人员又爱又恨的感情,在不久的未来迅速普及下去……再说就扯远了,继续工作。

    ============================================

    Update 2008-9-12 10:43:27:
    今 天测试时突然发现昨日研究过程中有个遗漏:IE7居然完全不支持元素中的fixed方式。在IE7中不设置background-attachment的 话,溢出滚动后默认居然是scroll的效果,设置background-attachment:scroll后效果不变,而设置fixed后仍然会导致 background-position问题。看来IE7对这个属性的支持是很有问题的,我会继续关注这个问题,抽空再作研究。

    ============================================

    background-attachment引发的血案……
    今天在CSS森林的群里,遇到群老大鬼-CSSForest提出的一个需求:

    引用内容 引用内容
    一,有两个div在同一页面里,都有背景,宽高一样,有y方向滚动条
    二,其中一个背景是固定的,即不滚动(fixed)
    三,这两个div是平级的,并且其内部结构可以按需更改(可以更改结构使得实现起来方便多了)

    以及一个问题:

    引用内容 引用内容
    background-attachment,是否只能用于html和body?

    =========================抓狂的分隔线===========================

    带着这些问题,我闷头苦练了将近一个上午(工作计划被打乱T.T)……
    首先针对第二个问题,得出以下结论(关于background-attachment的特性):

    1.background- attachment在标准浏览器中(即IE6以外的浏览器),仅在html和body中才起作用(html和body的background- attachment默认是scroll,可以设置成fixed;其他元素overflow:scroll滚动时的background- attachment始终是fixed,并且设置scroll无效);

    2.IE系列(IE6-8)在不指定文档类型的时候(进入quirks mode模式),元素中的background-attachment支持scroll和fixed,而FF等其他内核浏览器仍然无效。

    3.在不给元素设置background-attachment,并且该元素overflow:scroll滚动时,标准浏览器中默认是fixed效果,而在IE6中默认是scroll效果。

    4.在IE6下,不管在任何时候设置background-attachment的fixed或scroll都起作用;即,IE6支持任何元素的background-attachment的一切(IE6的无敌兼容爆发?)。

    延 伸问题:在IE6以外的标准浏览器中,设置除body、html外其他元素的background-attachment:fixed后,这些元素的 background-position将以body和html为基准进行定位,这个特性所带来的灾难是:如果页面下方两个元素都具有 background-attachment并且都没有设置background-position,那么他们的背景将重叠在页面的左上角处并且不予显 示,不管这两个元素身在何处。在页面中的表现是,两二个元素的背景离奇消失)。
    此问题详见DEMO:背景消失之谜
    http://www.smbey0nd.com/demo/20080911/background_disapear_1.html

    =========================抓狂的分隔线===========================

    得出以上结论后,再回头来看鬼提出的需求,感觉思路清晰多了:P

    解决思路如下:

    首先设置这两个DIV为#C1(fixed),#C2(scroll)。
    1. 先考虑fixed的#C1,在标准浏览器里实现fixed很简单,压根不需要考虑什么background-attachment,直接设置背景图片即 可;不过在另类的IE6下,如果不指定background-attachment,它却将是scroll的效果。怎么办,直接 hack(_background-attachment:fixed)搞定。
    注:如不用hack直接用background-attachment:fixed,将会导致上面所说的“背景消失”问题。

    2. 再考虑scroll的#C2,想要达到scroll效果其实并非易事:各大标准浏览器并不“允许”你这样设置一个内部元素(IE6在这时却表现的特别亲 切,看看这个让人反感的IE6!>.<#)。该怎么办?单单一个DIV似乎没有办法做到这个要求,那么……看来只能更改结构了。OK,再 在#C2中加入一个修补元素<div />,让#C2只负责滚动,而让patch来承载背景图片和其他内容,这样滚动的时候内部文档流就会随着滚动条,自然而然地scroll了,从而也 避免了使用这该死的background-attachment所带来的一切困扰。:P

    最终实现的DEMO如下:
    DEMO:两个div,一个fixed一个scroll
    http://www.smbey0nd.com/Demo/20080911/fixed-scroll.html

    =========================抓狂的分隔线===========================
    一点感想和猜测:
    不 知道w3c有没有在它的某些文档中提到过background-attachment的这些特性,之前也从未接触过这方面的资料。我们在这些DEMO实例 中可以明显感觉到,w3c貌似并不提倡我们在html和body以外的元素中使用background-attachment,并且拒绝让我们在这些元素 中使用background-attachment:scroll的滚动效果。这个原因目前尚不清楚,是否由于这种效果可以用一些简单的结构很轻松的做 到,抑或是由于需求量很少,还是考虑到其他我们所想不到的原因,而取消这个效果?而让我感到很意外的是,IE6中居然可以很完美地支持 background-attachment,让人感觉哭笑不得。
    最后,从这几个DEMO和实践中可以看出,background-attachment只适合用在html和body上。至于其他元素的背景,我们还是尽量让他们规矩点吧。

    归类于: WEB 评论: 8 SMbey0nd @ 2008-09-11 下午 6:07
  • Fun with Wonfu !

    Wonfu <the Shinkansen> in BeijingLive.

    I love it,I Hate it,So much!

    More Live Video >>> MOGO

    归类于: My Life 评论: 发表 SMbey0nd @ 2008-09-05 下午 10:47
  • 雷人瞬间 From CSS森林群

    1.CSS森林的群明确规定不许发大图,一旦发现立即清人;
    2.当天群主暴走阿龙正在气头上;
    3.这个可爱的家伙估计是不小心点错了,马上意识到,可是一切都晚了;
    4.这三条动作几乎是在1秒内,以迅雷不及快车盗铃之势,出现,完成……

    后续:5分钟后,这个可爱的家伙回来了,然后可怜巴巴的认错,检讨,面壁……
    简直太可爱鸟¥%……&[F25]

    归类于: My Life 评论: 10 SMbey0nd @ 上午 10:05
  • Fun with Chrome!

    I love Chrome so much!>..<~NO!

    Fun with Chrome

    归类于: My Life 评论: 发表 SMbey0nd @ 2008-09-03 下午 9:27
  • WML试验

    作为一个FE开发者,有必要了解一些WAP的知识。
    特接触了一些WML标签的应用,做了个简单的DEMO,试验用。

    ====================无线的分隔线=====================

    程序代码 程序代码
    <?xml version=”1.0″ encoding=”utf-8″ ?>
    <!DOCTYPE wml PUBLIC “-//WAPFORUM//DTD WML 1.1//EN”
    “http://www.wapforum.org/DTD/wml_1.1.xml”>
    <wml>
    <head>
    <access domain=”www.smbey0nd.com”/>
    <meta name=”keyword” content=”WAP”/>
    </head>
    <card id=”Demo1″ title=”Demo No.1″>
    <p>
    <strong>Hello Wolrd!</strong><br/>
    <em>HOHO</em><br/>
    This is a <big>Demo</big> For Testing WML in Wap, From <u>SMbey0nd.com.</u><br/>
    But, it’s without CSS…LOL<br/>
    <small>(*^__^*) 嘻嘻……</small><br/>
    <img src=”/images/Logo1.gif” alt=”SMbey0nd’s LOGO”>
    </p>
    <anchor>
    Go To Demo2
    <go href=”#Demo2″/>
    </anchor>
    </card>

    <card id=”Demo2″ title=”Demo No.2″>
    <table columns=”3″>
    <tr>
    <td>Cell 1</td>
    <td>Cell 2</td>
    <td>Cell 3</td>
    </tr>
    </table>
    <anchor>
    Back to Demo1
    <prev/>
    </anchor>
    <anchor>
    Go to Demo3
    <go href=”#Demo3″/>
    </anchor>
    </card>

    <card id=”Demo3″ title=”Demo No.3″>
    <fieldset title=”CD Info”>
    This is an input<input name=”Name” size=”15″/><br/>
    <select>
    <option value=”wap”>This is an option</option>
    </select><br/>
    <select multiple=”true”>
    <option value=”wap”>This is an option(M)</option>
    </select>
    </fieldset>
    <anchor>
    Back to Demo2
    <prev/>
    </anchor>
    <anchor>
    Go to Demo4
    <go href=”#Demo4″/>
    </anchor>
    </card>

    <card id=”Demo4″ title=”Demo No.4″>
    <do type=”accept” label=”Answer”>
    <go href=”#Demo5″/>
    </do>
    <p>
    <select name=”name”>
    <option value=”OP1″>OP1</option>
    <option value=”OP2″>OP2</option>
    <option value=”OP3″>OP3</option>
    </select>
    </p>
    <anchor>
    Go to Demo5(Final Mission)
    <go href=”#Demo5″/>
    </anchor>
    </card>

    <card id=”Demo5″ title=”Demo No.5 Answer”>
    <p>
    You selected: $(name)^_^ Cool!
    The Mission Finished!
    花夏小小 爱你!
    Bye~ Mario
    <a href=”http://www.smbey0nd.com/wap.asp”>SMbey0nd.com/wap</a>
    </p>
    </card>
    </wml>

    DEMO地址:http://www.smbey0nd.com/Demo/wap/Demo1.wml (使用手机浏览)

    ====================无线的分隔线=====================

    WML备忘:
    Tips:
    1.WML 指无线标记语言(Wireless Markup Language),用于 WAP 的标记语言。它是一种从 HTML 继承而来的标记语言,但是 WML 基于 XML,因此它较 HTML 更严格。WML 使用标签 – 类似 HTML – 但是语法更严格且遵守 XML 1.0 标准。
    2.WML 被用来创建可显示在 WAP 浏览器中的页面。用WML编写的页面被称为 DECKS。DECKS 是作为一套 CARDS 被构造的。
    3.WML 使用 WMLScript 在客户端运行简单的代码。WMLScript 是一种轻量级的 JavaScript 语言。不过,WML 脚本并不嵌在 WML 页面中。WML页面仅仅含有对脚本 URL 的引用。WML 脚本在 WAP 浏览器运行之前,需要先在服务器上被编译为字节编码。
    4.WML不支持CSS。
    5.WML 文档必须含有一个 XML 声明和一个 DTD。

    常用标签:

    1.Deck / Card 元素:

    程序代码 程序代码
    <wml> 用来定义 WML deck (WML 卡片组)。
    <card> 用来定义 deck 中的一个 card。card 元素的 “id” 属性可用作锚 (anchor)。
    <head> 可包含<access> 和 <meta>的区域。<access>访问控制,<meta>文档元信息。
    <template> 为 deck 中的所有 card 定义一个模板:该标签中的“代码(行为)”会添加到 deck 中的每个卡片。

    2.文本格式化元素:

    程序代码 程序代码
    <b> 粗体
    <strong> 强调(效果与<b>一样)
    <i> 斜体
    <em> 着重(效果与<i>一样)
    <big> 大号
    <small> 小号
    <u> 下划线

    3.锚元素:

    程序代码 程序代码
    <a> 在任何可能的情况下,使用 <a> 标签代替 <anchor> 标签。
    <anchor> 比<a>多出指定的任务<go><prev><refresh>。

    4.事件元素:

    程序代码 程序代码
    <do> 点击一个单词时激活一个任务,默认是accept类型。如果<card> 包含多个类型为 accept 的 <do> 元素,且这些 <do> 元素没有被命名,WML 会出现编译错误,而且不会显示出页面。
    <onevent> 包含了当下列事件发生时所执行的代码:onenterbackward(当 <prev> 跳转到前一个卡片时触发)、onenterforward(当 <go> 跳转到某一个卡片时触发)、onpick(当项目被选取或撤销选取时触发)、ontimer(当计时器终止时触发)。

    5.任务元素:

    程序代码 程序代码
    <go> 跳转到新卡片的动作,类似<a>。可包含 <postfield> 或 <setvar> 标签。
    <noop> 不进行任何动作,防止事件的发生。
    <prev> 返回前一个访问过的卡片。
    <refresh> 刷新指定的卡片。

    6.控件元素:

    程序代码 程序代码
    <fieldset> 分组元素。
    <input> 文本框。
    <select> 可选列表。multiple属性控制单、复选
    <option> <select>中的一个选项。
    <optgroup> <select>中的一组选项。

    还有一些细节上的东西,先不写了,下次补上。

    Update 2008-9-5 22:52:20:
    补一些要注意的
    1.不同的手机品牌、不同的型号,其微浏览器对WML解释都有微小不同。如Nokia的一些新的系列对事件元素(do标签)并没有如期的支持效果,不是像文档中提到的自动触发,而是需要选择“操作”键后才出现候选动作;同时对控件元素的交互也有区别(如单选框,操作时不是直接选中,而是会进入一个特别的选择页面进行选择后再返回原页面)。
    2.(云谦同学的提醒):较新的手机浏览器都支持XML Base(XML简化版),并支持一些简单的CSS和JS,相对于WML能做的更多。轻量级的WML应该快到了更新换代的时候了。

    归类于: WEB 评论: 发表 SMbey0nd @ 2008-09-02 下午 6:19

关于SMbey0nd

Avatar of SMbey0nd SMbey0nd
F2EDevigner 83/07/03
USE.com.cn|TaobaoUED
hangzhou china
我爱花夏小小
折叠 图标库