2006年3月31日星期五

Macro CSS, CSS Script or Xml CSS?

继续上次那篇Programmable CSS,我现在有三个实现方案:

1.Macro CSS

用Macro来实现简单的CSS编程,既然CSS是纯文本输出,那么可以考虑仿照ASM/C++的Macro那样,定义一些简单的文本输出Macro,例如Coo所谓的自定义颜色常量就完全可以好像C++定义常量那样定义。页面就引用一个.mcss文件,这个后缀在服务器端关联一个HttpHandler(假设在.NET环境,其他语言环境自行变通),专门负责处理.mcss文件里面的Macro输出标准css。

这样做需要对Macro CSS用正则表达式进行分析,提取指令,还要做变量存储,我觉得这是比较麻烦的事情。例如变量存储,我上次说了要实现子元素可以设定padding为父元素padding的加上1px,这就需要允许在Macro里面定义变量,然后Macro运行时这些变量是无类型的,或者说是动态类型的,要支持各种运算,烦死,简直就是要自己写一个Macro Engine。

不写Macro Engine的方法有没有?也还是有的,就是把Macro转换为对应的服务器端脚本,例如ASP.NET,然后让服务器帮你编译执行,这样会舒服很多。这和直接写个满是<% %>的CSS有什么不同?我们可以为Macro CSS编写转换到不同服务器端语言的引擎,然后同一种Macro CSS就能够运行于任意动态服务器端了。

2.CSS Script

这个东西我不确定是否可行,其实就是完全用Script实现页面CSS的操作。

CSS Script拥有类似Atlas那样的一套完整的、兼容多种浏览器的Framework,然后能够用Javascript按照类似C#的写法或者类似XML的写法那样直接操作一些Framework中的封装好的CSS对象。简而言之,这就是一个CSS版的Atlas,Atlas用于DHTML和WebService,而CSS Script则用于CSS。或许未来的Atlas将会把CSS操作也封装进去,难说呢。没看过Atlas的一定要先去看看,否则会不明白我说什么的,因为Atlas实在是太过高度封装了。

3.Xml CSS

就是直接用XML来描述一个CSS模型,然后用XSLT来生成CSS,实现起来很简单,只不过用XML来写CSS或许会让人很不习惯,因为要写多很多代码。不过如果有IDE工具支持的话,或许大家都愿意接受。

原本的CSS也是DOM的一部分,除去HTML的DOM,CSS也可以独立成DOM。能够独立成DOM自然也就能够用XML来表示。用XML来表示,就可以向这个DOM增加新的元素,例如常量、运算、条件等,而新增的这些元素都通过XSLT解释最终生成普通的CSS就行了。

没有评论:

发表评论