• CSS History


    Preface

    如果只是要写程序,那的确是不需要这么麻烦,上来直接看Syntax,动手写上至少300行代码,做上3个应用程序,这门语言你也就差不多会用了,接下来不过就是模式,特殊的地方以及记住一些函数而已。但是如果你想更深刻的了解这门语言为什么这么设计,想知根知底的时候,那么回顾历史是最好的选择。而且经过这么多年对于学习本身的研究,如果想要精通一样东西,研究促使它诞生的问题会更加准确的明白它的缺点和优点,以及理解它为什么会是这个逻辑,怎么改善等等。而研究历史的时候,有时候也会发现,因为当年某些限制条件无法实现的更好的解决方案,现在正是实施的时候。

    Style Sheets’ History

    后面就像大家所知道的一样,在95年11月6-7日的W3C Workshop上面,Håkon Lie 介绍了Cascading Style Sheets,算是开启了CSS的历史。但是针对于Style Sheet Language本身来说,则早于CSS一些,这部分在我打算查阅CSS历史的时候才发现并没有多少中文资料可供查询。出于对起源的好奇以及自身的学习方法,将一些资料自己进行了汇总。

    在很久很久以前(当然,是在有了HTML之后),大家都是做学术的,因此大部分人只是用HTML来传递文档,浏览器也只是要让文档能解析的好看一些就好了。从我获得的资料来看,用户自己定义的样式好像更加受到重视。

    从1993年开始,大家相继提出了自己的Style Sheet协议提案,然而很多都很复杂。如果让现在的前端来看,部分看起来绝对是天书级别的。

    Robert Raisch : Stylesheets for HTML1

    # DEFAULT for all succeeding objects..
    
    @UL in(le=5) 
    @LI ma(pr=ro,be=4) in(le=10,ri=10)
    

    我想这个可以算是天书级别的协议了。开头定了所有object适用的标准,在这之下大部分的属性做了缩写。比如nu对应的是number,be对应的是before。key和value之间使用的是=进行连接。 从现代的角度来说,这个标准的确不怎么样,但是他提供了几个思路,应该说这个思路在后来的CSS里面有所体现。

    HTML documents would include a LINK STYLE tag which would point to a stylesheet associated with the current document. Multiple stylesheets could be used per document to include stylistic changes. Once a new stylesheet was loaded it would hide, not overwrite, the previous stylesheet. The previous stylesheet would become visible once an empty LINK STYLE tag was encountered.

    第一条是推荐如何将style载入HTML里面,在后面他提出了使用

    <LINK STYLE="{URL}"/>
    

    的方式进行载入,这个算是外链样式表的起源的。而第二条,用我4级刚过的的英语看起来是很像是今天的层叠的概念。 Robert Raisch的提案是我目前见过的提案当中比较像CSS早期的起源协议了。

    Pei-Yuan Wei:Stylesheet Language2

    (HEAD,BODY  fontSize=normal
            BGColor=white
            FGColor=black
    (H1     fontSize=largest
            BGColor=red
            FGColor=white)
    (STRONG fontWeight=bold)
            )
    

    这个感觉起来很像中国的人提出了一个看起来非常酷的提案,但是非常非常短。如果是使用过LESS和Sacss的人就会很有感觉。没错,这是早期的嵌套语法。看起来很像是子选择器和后代选择器的原型,不过就算他不是,我想在动态CSS里面基本上都包含了这个提案的概念。

    Håkon Wium Lie: Cascading HTML style sheets – a proposal3

    30%
    h1.font.family = times
     
    40%
    font.family = times
    h1.font.family = helvetica 100%
    AGE > 3d ? background.color = pale_yellow : background.color = white
    RELEVANCE > 80 ? h1.font.size *= 1.5
    h1.font.size = 18pt 100%
    h1.font.family = times;
    h1.space.above = 36pt;
    h1.space.below = 8pt;
     
    speech.*.weight = 35db
    speech.em.weight = 40db
    

    这个是最早出现Cascade概念的Style Sheet提案,首先将样式载入的方式做了规范,看起来已经很像我们现在使用的规范了,然后他将Robert Raisch的提案进行了扩展,增加了权重值。这是最早期的权重值的使用。

    首先,每个样式表当中先定义权重值是多少(而不是像今天是随着selector计算出来的),解析的时候根据之前的权重值进行overwrite。语法方面更像是lisp和js。有心的人应该看出了,这里面有三元表达式以及计算..当然也有带单位的计算方式。LESS在这个方面算是弱爆了吧?他在协议里面提到了如何计算,鉴于时间的原因,我就没在看下去了。

    另外值得关注的是他针对HTML的多平台特性,提出了多媒体的解决方案,就是上面的speech前缀,这个前缀可以让程序自动识别是针对哪个平台渲染。如果不指定前缀,默认是在所有的设备上面渲染。

    Joe English:Style Sheets for HTML (postscript)4

    <stylesheet>
          <colors>
            <color id=red rgb="#F00">
              </colors>
      <!-- Highlight all code sections in red: -->
        <style gis = "code kbd pre" fgcolor=red>
        </style>
    </stylesheet>
    

    这个是基于SGML定义了一些font的常量,看起来ms对CSS的影响不是很大。

    James Clark : DSSSL & DSSSL Lite5

    (define *heading-font* "Times New Roman")
    (define *heading-weight* 'bold)
    (define *heading-posture* 'italic)
     
    (element H1
    (make paragraph
    font-family-name: *heading-font*
    font-weight: *heading-weight*
    font-posture: *heading-posture*
    font-size: 20pt
    quadding: 'center))
     
    (element H2
    (make paragraph
    font-family-name: *heading-font*
    font-weight: *heading-weight*
    font-posture: *heading-posture*
    font-size: 18pt
    quadding: 'left))
    

    这段代码是Lisp格式的,但是如果你熟悉CSS的话,就会有一种感觉:”嘿,老兄,这看起来好像是定义样式用的。”没错,在CSS尚未成型的时候,和它算是齐名的DSSSL[ISO标准]的的样式。如果你更加熟悉LESS和SACSS的话,就会更有感觉,因为它有更加强大的语法表达式以及变量定义。假想当时人们接受的是DSSSL而不是CSS的话,现在要再去区分黑客和设计师就会有点困难。虽然从历史上,DSSSL不应该和CSS进行比较,不过那个时候Bert Bos在他的协议提案里面提到了它。

    Bert Bos:Stream-based Style sheet Proposal6

    ! Effect of `delay image loading' on FIG element
    !
    *FIG.inline: !SRC
    *FIG.hide: true
    delay_images*FIG.inline:
    delay_images*FIG.hide: false
    !
    ! Indentation and justification made dependent on window width
    !
    *DL.leftindent: 3.0
    narrow*DL.leftindent: 1.0
    wide*DL.leftindent: 5.0
    !
    narrow*P.justify: left
    !
    ! Use colours only if on colour screen
    !
    *A.textcolor: red
    *A.textbackground: yellow
    b&w*A.textcolor: white
    b&w*A.textbackground: black
    monochrome*A.textcolor: black
    monochrome*A.textbackground: gray80
    

    1995年早期,Bert Bos提出了他自己的提案,有趣的是在前面先将各个提案比较了一番。这个讲的就是后面覆盖前面的基于流的样式协议,在语法上借鉴了Håkon Wium Lie。不过这个时候采用了:去做分割,并且没有分号。而且语法也很复杂,尽管Bos当时认为这个很人性化。

    Netscape:JavaScript-Based Style Sheets(JSSS)7

    with(tags) {
      contextual(UL, LI).color = "red";
      contextual(UL, UL, LI).color = "blue";
    }
     
    ids.z098y.letterSpacing = "0.3em"
    classes.foo.H1.color = "red"
    tags.EM.color = "red";  /* red, really red!! */
    tags.B.color = "blue";  // blue, really blue
    contextual(tags.DIV, tags.P).color = "green";
    contextual(classes.reddish.all, tags.H1).color = "red";
    contextual(ids.x78y, tags.CODE).background = "blue";
    

    1996年Netscape提出了它自己的标准给W3C,使用js去写style。语法使用with来确定作用域,这个时候js可以将document解析为tags,ids,classes这些object,然后使用js来进行查找赋值。对应group selector,则使用contextual函数去做。但是相应的,它死的悄无声息,不过有传闻说Netscape4内部是将CSS解析成JSSS来执行的,因为如果禁用JS的话,CSS也不会出现。

    最后的胜利

    最终的胜利,依旧还是使用者(设计师)的胜利,因为他们获得了更加简单的语言实现。CSS没有引入上述协议当中的变量部分,它简单的计算方式,人性化的语法,算是响应的暴雪的易于上手的规则,但是它也没有难于精通,大部分的CSS只是在于你怎么控制文档流。无怪乎 Jakob Nielsen 来了一句:”Hopefully, future Web innovations will emulate the example set by the Web Consortium in its work on CSS.”

    相关资料

    UPDATE:

    • [2011-10-16]拆分History部分和变量部分到新的文章,补全相关的协议
    1. http://ksi.cpsc.ucalgary.ca/archives/WWW-TALK/www-talk-1993q2.messages/443.html

    2. http://ksi.cpsc.ucalgary.ca/archives/WWW-TALK/www-talk-1993q4.messages/263.html

    3. http://www.w3.org/People/howcome/p/cascade.html

    4. http://www.w3.org/Style/History/jenglish.ps

    5. http://www.falch.no/~pepper/DSSSL-Lite/

    6. http://www.w3.org/People/Bos/stylesheets.html

    7. http://www.w3.org/Submission/1996/1/WD-jsss-960822.html

  • 相关阅读:
    Java Thread 源码
    新的篇章,新的开始,寄没有的希望于未来。
    命名的常用关键字
    通俗易懂的TCP三次握手
    Java多态
    servlet容器工作顺序
    IOC思想
    Spring MVC工作流程
    一对一,一对多,多对多
    JDBC的步骤
  • 原文地址:https://www.cnblogs.com/html5salon/p/3375717.html
Copyright © 2020-2023  润新知