CSS 命名空间 提上W3C候选提议

Author:David | 【转载时请务必以超链接形式标明文章原始出处和作者信息及本声明
URL:

CSS Namespace Module 被w3c作为候选提议"W3C Candidate Recommendation"

新提出的命名空间方案很简单:

定义前缀的语法:用@namespace方法定义命名空间,并且把命名空间绑定到一个变量或前缀;

例如:

@namespace toto http://toto.example.org;

@namespace http://example.com/foo;

使用命名空间的语法:

toto|A:
表示"A"的作用域是http://toto.example.org

|B:
表示"B"作用域没有定义的域

*|C:
表示C可以作用在任何域,包括没有被定义的域

D:
D作用在http://example.com/foo.

这个方案的作用在于:在同一个css中给不同的网页或网站定义不同的式样,之前我们可能需要用多个css文件解决,现在只需要一个文件就可以了。我觉得意义在于清晰的划分客户端结构,对于小网站作用并不是很大。要使用这个特性,还需等待主要浏览器加上这个特性。

我在做Clicki的widget时曾经提到,css的作用域问题很是令人头疼

我说的作用域指的是DOM级别的作用域,其实css本身有dom级别的绑定,但是css的作用域只能指定,不可排除是个很棘手的问题。或者叫css污染。

举个例子:

div{border:1px solid #000000;}

上面这个css的范作用域是页面上所有的div,所有的div默认都有一个黑色边框。这时候如果我在某个区域想去掉边框,就必须对这个区域进行二次定义。对于自己网站来说不是什么问题,但是对于第三方的内容嵌入,比如widget,这个问题就很麻烦。

  1. 第三方的widget可能有多种dom元素
  2. 第三方无法确定网站定义了多少可能对widget造成入侵的或污染的css属性

这时候,第三方只能将widget的每种dom元素的所有css属性进行初始化,过滤掉所有可能的外部定义,组合起来可能有上百个属性,代码非常冗长。这些代码绝大部分是没用的,而且给浏览器渲染带来更大压力。一旦漏了某个属性没有初始化,就可能造成widget变形。

如果能有一种方法,在某个区域屏蔽全局css的作用就好了。

评论:

你好厉害啊。用过西米客的统计吗。

(选填)

(必填)

(选填)


Clicki