是否记得这样的试题?用一套一样的HTML结构,生成不一样 的视觉效果。CSS 的最大好处就是,灵活。好比一样的HTML结构,能够实现不一样的外观;又好比,一样的外观,能够用不一样的方式不实现。但灵活的同时也给咱们带来麻烦。团队 协做时,你们的编码风格各异,其余人要看懂/debug的成本也所以提升。这时,咱们须要一个规范,一个像红灯亮起咱们就不能擅闯的规范。css
在 Alipay 前端,Alice 框架有这样一套规范,让你们的协做更方便。这套规范基于 Alice,属于 Alice 的一部分。其最基本的原则是,一样的结构,产出不一样的视觉效果。html
注:全部样式的建立,都必须基于 CSS 规范 进行前端
http://blog.csdn.net/shoyer/article/details/8300442git
Alice 的设计起源于支付宝的 pa.css 文件。因为这个文件被多系统引用,没有人敢随便改动里面的内容,因此只能不断往里面添加内容,致使了这个文件体积变得很是大。因此,亟待重构。在尝试重构后,发现了重构不是咱们真正想要的,因些主要从两个方面来构建 Alice:github
更个人设计思想,请参考:支付宝CSS架构设计模式
检出 Alice 前端解决方案的全部代码:浏览器
注意:非组件/解决方案,请不要使用.ui-/.sl-做为前缀架构
虽然视觉稿是多变的,但 Alice 模块的结构是不变的。所以,咱们拿到视觉稿的第一时间(交互白板的时候,其实已经能够开始寻找),就是分析视觉稿。确认哪些资源是咱们相要的。而 Alice 方面,咱们要分析的是,全局设置的有那些,可使用 Alice 模块的有哪些。一般,须要肯定的全局设置包括:app
通常,咱们为全局设置建立一个单独的 global.css框架
而那些应该作为组件?通常状况下 TPL(下详)中的 14 个通用组件是必要的。另外须要根据页面使用的实际状况抽象。越多的组件,咱们的编码就越统1、能建立越多的代码片断,这不管是对咱们的协做,仍是效率的提 升,都是很是有益的。下面这个 CheckList 能够做为你规范样式库的参考:
至于如何规划一个 CSS 文件,请参考《CSS 规范》
tpl.css 是一套 CSS 模板。若是你要构建新的组件。那么,你能够直接使用它。而不是引入+覆盖她。TPL 中包括了,全局设置/ 布局 / 列表 / 标题 / 切换 / 表单 / 表格 / 按钮 / 对话框。从 checklist 中能够看出已有组件列表。若是你的组件是已经有的,那么,参照已有的结构去构建。若是你新建一个新的组件,那么,使用下图所示的方法来构建:
记住:
不一样外观的相同组件,HTML不要相互嵌套,CSS 推荐嵌套。
推荐的:
不推荐的:
推荐的:
不推荐的:(除非须要重用)
在模块化和命名上,以一个Tab组件为例,分解以下:
好比,咱们能够这样写:
但不要这样写:
语义化是什么?什么样的写法才是正确的。这里给一个建议,把你将要构建的页面当成一本书。是段落的,你就用P(aragraph);是标题的,就用 H(eader);是引用的,就用Blockquote。而不是简单的,块状的东西由块状元素包含,行内的元素用行内的标签包含。这里有点要求就是, 去深刻了解每一个 HTML 标签的用法。关于灵活。像 “在组件窗口最外一层添加状态,而非给每个内容添加状态。除非内容有独立的状态” 就是一种灵活的表现。让你更灵活去地改变状态。
关于 HTML 的语义化,能够参考:这样去写你的 HTML
尽可能让人看到名字就能知道是什么组件,比较 ui-tab,好比 ui-nav 这样的命名。全部小图标都使用 .ui-icon .ui-icon- 前缀,建议同一系统(域)人的经常使用小图标所有合成 sprite。用 HTML ENTRY 来引用,不要写空标签,应使用 HTML ENTRY 来替代,以达到语义化的要求。HTML ENTRY 请参考这个文档:https://docs.google.com/Doc?docid=0AWiI12yCmwaoZGNiemJqOGpfMTVmaHZtOWNkeg
经常使用的状态有:hover, current, selected, disabled, focus, blur, checked, success, error 等。一般你的命名应该看起来像 .ui-name-hover, .ui-name-error 这样。
经常使用模块名有:cnt(content), hd(header), text(txt), img(images/pic),item, cell 等,只要词义表达了组件要实现的功能或者要表现出来的的外观就能够了。
参照经常使用状态
拿支付宝某项目中的的 .ui-nav 为例,若是有多级,能够这样命名:
拿 ui-button 为例:
而不要用 ui-button-round,这样,就可能会有: ui-button-round-a ui-button-round-b … 了。按钮又有多个状态,命名就会太长了 ui-button-round-a-disabled
好比你比较喜欢 ui-tip-container ,另外的一个相同做用的地方,就不要写 ui-message-cnt 了,用 [ui-tip-container ui-message-container] 或 [ui-tip-cnt ui-messages-cnt] 这样会是更好的选择
通常状况下,咱们常常遇到方向须要用单独标签来做为小图标的例子。好比几乎每一个系统都会有的 ui-message 和 ui-tip,均可能会有上下两个部分。推荐这样写:
注:目前支付宝使用的样式库管理工具是架构组开发的一套 Maven 解决方案。
你的团队可能不止一个样式库,像支付宝,有`个人支付宝`、`生活助手`和`商家服务`等产品,因此须要根据样式库规范建立不一样的样式库。样式库能够是 svn 中的一个代码目录。每一个组件的 css 组件都应该有对应的 html demo。固然,若是有对应的预览截图,并造成一个展现平台,那就更好了。下面是代码目录和造成的展现平台。
像 Alice solutions 的每一个组件下,都有一个 Readme.md 说明文档,查看这个范例页面:
https://github.com/sofish/Alice/tree/master/solutions/rotate
推荐使用 YUI Compressor 来压缩你的样式。目前支付宝使用的 Maven 解决方案中,集成的压缩工具就是 YUI Compressor。下载和使用文档请看这里:http://developer.yahoo.com/yui/compressor/。这里再也不作细述。
关于 YUI Compressor 压缩版本的注释:
若是有些注释不想在压缩的时候删除,可使用标识符来告诉程序,标识符是一个感叹号 “!”,示例以下:
/*! 这是不会被压缩掉的注释 */ –> /*!这是不会被压缩掉的注释*/
但像 /*中文*/ 这样的注释,若是没有空格把注释隔开可能有问题。因此,当你不想格式化注释,并但愿上线的话,请确保注释是英文的,或者有空格把之隔开的中文注释。通常的 hack 注释是不会被压缩的,如:
压缩前:
压缩后:
能够根据团队需求,构建自身的展现平台。
组件应通过严格测试。测试规则详见:《CSS 规范》
解决方案的规范,同组件。不一样的是:
解决方案(solution)详见:http://aliceui.com/category/solutions/