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.”
相关资料
- CSS History
- Wikipedia:CSS History
- Web Style Sheets
- W3C Workshop on Style Sheets 1995
- Historical Style Sheet proposals
- Effective Use of Style Sheets
UPDATE:
- [2011-10-16]拆分History部分和变量部分到新的文章,补全相关的协议
http://ksi.cpsc.ucalgary.ca/archives/WWW-TALK/www-talk-1993q2.messages/443.html↩
http://ksi.cpsc.ucalgary.ca/archives/WWW-TALK/www-talk-1993q4.messages/263.html↩
http://www.w3.org/People/howcome/p/cascade.html↩
http://www.w3.org/Style/History/jenglish.ps↩
http://www.falch.no/~pepper/DSSSL-Lite/↩
http://www.w3.org/People/Bos/stylesheets.html↩
http://www.w3.org/Submission/1996/1/WD-jsss-960822.html↩
CSS History的更多相关文章
- 浅析history hack、心血漏洞、CSS欺骗、SQL注入与CSRF攻击
漏洞产生的原因主要有系统机制和编码规范两方面,由于网络协议的开放性,目前以 Web 漏洞居多 关于系统机制漏洞的典型有JavaScript/CSS history hack,而编码规范方面的漏洞典型有 ...
- 关于XSHM(Cross-Site History Manipulation)
http://blog.chinaunix.net/uid-27070210-id-3255407.html 乍一看,好像和以前 css history hack 差不多,其实原理还是不一样的.浏览器 ...
- XSS Payload知识备忘
参考资料:<白帽子讲Web安全>吴翰清 著 参见: 百度百科 http://baike.baidu.com/view/50325.htm 维基百科 http://zh.wikipedia. ...
- OWASP top10
PhishTank 是互联网上免费提供恶意网址黑名单的组织之一,它的黑名单由世界各地的志愿者提供,且更新频繁. 1.XSS 1.1. XSS简介 跨站脚本攻击,英文全称是Cross Site Scri ...
- Jquery实现的几款漂亮的时间轴
引言 最近项目中使用了很多前端的东西,对于我一个做后台开发的人员,这是一个很好的锻炼的机会.经过这段时间的学习,感觉前端的东西太多了,太强大了,做出来的东西太炫酷了.现在有很多开源的前端框架,做的都非 ...
- Web安全之跨站脚本攻击(XSS)
XSS 简介 跨站脚本攻击,英文全称是 Cross Site Script,本来缩写是CSS,但是为了和层叠样式表(Cascading Style Sheet,CSS)有所区别,所以在安全领域叫做&q ...
- web攻击之一:XSS跨站脚本
一.浏览器安全 同源策略 影响源的因素:host,子域名,端口,协议 a.com通过以下代码: <script scr=http://b.com/b.js> 加载了b.com上的b.js, ...
- xss payload
xss payload可以使用富客户端文本书写,大多数用javascript,少部分用actionscript等等. 1.盗取cookie,发起cookie劫持 使用xss漏洞插入cookie.js ...
- Evercookie
1. Evercookie Evercookie是一个Javascript API,可以在浏览器中生成极其持久的cookie. 它的目标是在客户删除标准cookie,Flash cookie(本地共享 ...
随机推荐
- 使用PS进行切图
一,设置PS 使用PS进行切图前的设置: 1,打开PS----打开PSD图片----点击窗口-----分别把:历史记录,信息,图层,三个打勾. 历史记录:可以回到之前想要的步骤,特别是不小心把图层的文 ...
- hash 算法
Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值.这种转换是一种压缩映射,也就是 ...
- Greenplum 调优--数据倾斜排查(二)
上次有个朋友咨询我一个GP数据倾斜的问题,他说查看gp_toolkit.gp_skew_coefficients表时花费了20-30分钟左右才出来结果,后来指导他分析原因并给出其他方案来查看数据倾斜. ...
- Bootstap学习的实用网站
基本CSS样式 http://v2.bootcss.com/base-css.html 93 Twitter Bootstrap HTML Templates https://shapebootstr ...
- vue报错 :NavigationDuplicated {_name: "NavigationDuplicated", name: "NavigationDuplicated"}
解决的几种办法 https://blog.csdn.net/weixin_43202608/article/details/98884620 这个适合所有vue的UI框架 在main.js下添加一下代 ...
- LA、Remember the Word (字典树, 简单dp)
传送门 题意: 给你一个初始串 S,strlen(s) <= 3e5 然后给你 n 个单词. n <= 4000, 每个单词的长度不超过 100 : 问你这个初始串,分割成若干个单词的 ...
- jQuery相关方法10
一.链式编程的原理 <script> //构造函数 function Person(age){ this.age=age; this.sayHi=function(txt){ if(txt ...
- 带你了解HTTP协议(二)
同样的,本文篇幅也比较长,先来一张思维导图,带大家过一遍. 一图看完本文 一. 计算机网络体系结构分层 计算机网络体系结构分层 计算机网络体系结构分层 不难看出,TCP/IP 与 OSI ...
- c 输出是自动显示输出类型
显示0x i= print("%#x\n",i) 显示6位有效数字 i= print("l=%.6lf\n",i)
- [bzoj 3566][SHOI 2014]概率充电器
传送门 Description SHOI 概率充电器由 n-1 条导线连通了 n 个充电元件.进行充电时,每条导线是否可以导电以概率决定,每一个充电元件自身是否直接进行充电也由概率决定. 随后电能可以 ...