HTML5技术

Scoped CSS规范草案 - 【当耐特】

字号+ 作者:H5之家 来源:H5之家 2016-12-27 11:02 我要评论( )

原文链接:https://github.com/AlloyTeam/AlloyTouch/wiki/Scoped-CSS 写在前面 问:什么是Scoped CSS规范? Scoped CSS规范是Web组件产生不污染其他组件,也不被其他组件污染的CSS规范。 面对组件化的普及,组件的复用很普遍的需求,然而CSS相互污染是经常遇

原文链接:https://github.com/AlloyTeam/AlloyTouch/wiki/Scoped-CSS

写在前面

问:什么是Scoped CSS规范?

Scoped CSS规范是Web组件产生不污染其他组件,也不被其他组件污染的CSS规范。

面对组件化的普及,组件的复用很普遍的需求,然而CSS相互污染是经常遇见的问题,建立规范让开发者放心使用各种组件,甚至跨生态的组件是很有必要的一件事情。

目前业界的一些方案

方案一:
如果用webpack的话,可以参考css-loader的这个功能:

一段hash + 组件名,这个可能兼顾了辨识度 + 命名污染的问题。

方案二:

用webpack和scss,less写成模块化css就可以一定程度避免CSS污染,不能完全避免

方案三:样式规范上,使用与组件同名的嵌套命名空间

如果只用自己的生态可以这么搞,但是有的时候会引入第三方生态,第三方和自己的命名空间一样还是很有可能,比如scroller插件,社区里也有很多scroller插件loading uplader插件等等。

现有方案的局限性

这里还是会有污染的情况,因为:

所以得出:

用意念或者规范约定不然注入程序自动化避免冲突

好处:

如果把这个过程放在构建过程就是工程问题。但是组件单独抽离出来给第三方用,其实就是组件本身的问题。总之要保证:

  • 不污染第三方的项目或组件
  • 不被第三组件或项目污染(由于是层叠样式,这个无法完全保证)
  • Scoped CSS代码

    (css) ()id; css )(); css (g0)) (g1.match(/:scope/)) { g1 (h0) h1); } g1 prefix g1 (cssid() .)()idisIE = (function () { var undef, v div = document.createElement('div'), all ( (all[0] )v : undef(cssText, id) { var d = document, someThingStyles .)id)...)();

    Scoped CSS实施

    );

    scoper返回的id,在组件的JS里面赋给包裹的DOM便可以。这里详细说下生成id的过程:

    id .)()id

    通过Math.random得到随机数并经过处理,然后通过document.getElementById去查询页面上有没有同名ID,有的话则继续重新生成,没有的话就使用当前id。这里需要特别注意的是,比如一些弹出层插件,display hide的时候有的组件是直接从body里面移除,所以这就带来了CSS碰撞的可能性,所以这里Scoped CSS 规范强行约定:后插入的HTML,一定要经过scoper过程重新生成唯一id。
    最后,Scoped CSS规范已经在AlloyTouch插件里开始实施,并打算推广开来。

    你有什么好的想法可以让跨生态跨项目跨技术栈的组件复用更加惬意,可以交流交流。
    

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • 代码规范的重要性 - 夜枭

      代码规范的重要性 - 夜枭

      2016-10-04 14:00

    • Atitit WebDriver技术规范原理与概念 - attilaxAti

      Atitit WebDriver技术规范原理与概念 - attilaxAti

      2016-10-03 13:00

    • 完整的REM布局的工作流程与规范 - AlexCZL

      完整的REM布局的工作流程与规范 - AlexCZL

      2016-08-19 10:00

    • HTML邮件制作规范 - 渴望做梦

      HTML邮件制作规范 - 渴望做梦

      2016-05-09 15:00

    网友点评
    !