网易邮箱的CSS开发(一)

标签: IT技术 CSS 前端开发 | 发表时间:2012-06-02 20:40 | 作者:齐哲
出处:http://blog.jobbole.com

网易邮箱是个庞大而且细节繁多的系统,注定了前端开发中样式管理的复杂程度非常高。如果没有一个合理的体系来管理样式,开发和维护的难度是不可想象的。从极速3.5版本开始,我们就一直遵循并不断改善这套规则,现在就来分享一下~

开发思想

在错综复杂的样式面前,CSS显得过于简陋。于是我们不得不人为的加上一些思维方式和规则来帮助我们管理样式。

我们借鉴了“面向对象”中的“封装”和“继承”来开发CSS,使我们能很大程度上重用CSS代码的同时又不至于在修改CSS代码时因为过度重用而难以下手。
每个页面都由很多元素(除非特别指出,本文的“元素”都不是指 这样的HTML元素)组成,元素可以大到整个界面框架,也可以小到一个图标。元素相互嵌套、组合,形成了最终的页面。

对于任意元素,我们建立这样一种模型:

1、所有的元素内部都可以嵌套其他元素;

如:“a”里可以嵌套“a的头”、“b”等。

网易邮箱的CSS开发

2、元素内部的元素中,有的是“私有的”,只能在这个元素内使用,其样式也不会受父元素之外的CSS规则影响,有的是“公有的”,可以出现在任何位置;

如:“a的头”、“a的身体”是“a”的私有元素,“a的身体的某部分”是“a的身体”的私有元素,而“b”是公有元素,被“a”调用,“a”可以修改其内部的“b”的样式,但不能修改其他“b”的样式。

3、元素根据需要可以具备多种状态,可以给这个元素一个“参数”让它呈现不同状态;

如:设一个hasBorder=“true”可以让“a”有边框,设一个size=“big”可以让”a的身体的某部分”变大

4、可以从一类元素派生出另一类元素

如:我们需要和“a”类似的元素,但是需要对其进行扩展,这时我们新建一类“a2”元素,“a2”继承了“a”的所有样式和“私有元素”和“参数”

开发时,元素就像“类”一样被定义在CSS中,元素的“私有元素”、“参数”等也都定义在这个“类”中。

CSS类定义:

/* a类
=================================*/
/* a类的定义 */
.a {...}
/* a类的私有元素 */
.a的头{...}
.a的身体{...}
 .a的身体的某部分{...}
/* a类的参数 */
.a(hasBorder时){...}
.a(size为big时){...}

HTML中的a类元素的两个“实例”:
<div class="a" id="a1">
 <div class="a的头"></div>
</div>
<div class="a" id="a2">
 <div class="a的头"></div>
 <div class="a的身体"></div>
 <div class="b"></div>
</div>

命名和编码规则

以上所说的模型并不是CSS与生俱来的,所以需要一些命名和编码规则来加以实现,不过这个并不复杂。

1、我们使用连字符“-”从逻辑上划分class名,使用驼峰式命名区分单词;

如:.a-b-helloWorld

2、有时我们会给class加上一个命名空间前缀,命名空间与class之间也用连字符“-”连接;

如:.WB3-a-b-helloWorld,在极速4中,WB3命名空间下的class名将被压缩成1~3个字母短名称。(注:WB3是网易邮箱前端吊丝们给极速4起的开发代号……三楼水吧WaterBar3,碉堡了-。-……)

3、“私有元素”必须以父元素的class名作为前缀;

如:“a的身体的某部分”的名称是j,而它的父元素“a的身体”的名称是bd,“a”的名称是a,那么最后连起来的class就是.a-bd-j。

/* a类定义
 =================================*/
 .a{...}
 .a-bd-j{...} /* 允许在a类中定义a类的私有元素 */
/* b类定义
 =================================*/
 .b{...}
 .a-bd-j{...} /* 不允许在a类外定义a类的私有元素 */

 

4、“参数”依然使用class实现,以能表达“是否”或具体取值的方式命名:

如:.hasIcon表达有图标,.hasBorder表达有边框,.sizeBig表达大尺寸的,.sizeSmall表达小尺寸的

***这里是一个理想状态(无IE6)下的命名方案,假设元素a提供以上状态,我们可以这样实现:

.a.hasIcon{...}
 .a.sizeBig{...}
 ...

为了IE6,我们不得不用这样的命名来兼容:

.a-hasIcon{...}
 .a-sizeBig{...}
 ...

5、从一类派生出另一类元素,命名上没有特别的要求,通过在HTML中的class同时写上基类和子类的class来实现;

 

/* 基类定义
 =================================*/
 .superclass{...}
 .superclass-element{...}
/* 子类定义,扩展、重写基类定义
 =================================*/
 .myClass{...}
 .myClass-element{...}
 .myClass .superclass-element{...}

 

相关文章

相关 [网易邮箱 css 开发] 推荐:

网易邮箱的CSS开发(一)

- - 博客 - 伯乐在线
网易邮箱是个庞大而且细节繁多的系统,注定了前端开发中样式管理的复杂程度非常高. 如果没有一个合理的体系来管理样式,开发和维护的难度是不可想象的. 从极速3.5版本开始,我们就一直遵循并不断改善这套规则,现在就来分享一下~. 在错综复杂的样式面前,CSS显得过于简陋. 于是我们不得不人为的加上一些思维方式和规则来帮助我们管理样式.

(转)豆瓣css开发规范

- Hu DongHai - 小豪~麦穗的部落格
今天无意间看到了豆瓣的一些前端开发规范,攻城师作战指南. 里面的Javascript代码风格规范 差不多就是基本的javascript规范,主要还是分享一下 css部分的规范. 因为规范是在google docs上,需要穿过篱笆,所以我就直接帖过来了,一起学习一下哈. ——————————————–华丽的分割线————————————————.

10 个加速 CSS 开发的框架

- Tairan Wang - ITeye资讯频道
CSS 可以做很多事情,但开发者更习惯的是变量、常量和一般的更快速的语法,而 CSS 本身是不支持的. 本文介绍了 10 个 CSS 预处理器,让 CSS 支持一些简单的编程语法,使Web开发更高效. Compass 是一个开源的 CSS 制作框架. 针对个人框架开发时,其非常简单、易用. 这是一个很棒的 CSS 预处理器,可以让开发者制作插件,要求 PHP 以及 Apache (mod_deflate 和 mod_rewrite).

高效CSS开发核心要点

- - blog.moocss.com
本文参考了业界规范及主流趋势,详尽整理了CSS开发中需要注意的要点以及关乎性能的一些问题,希望对您有所帮助,也可收藏作为参考. 本文来源:http://www.ituring.com.cn/article/1745. 1.1 把CSS放在HTML页面头部. 由于浏览器需要在所有的样式表加载完成后才能开始渲染页面,样式表加载完成之前页面会一直显示空白,因此需要将样式表放在头部.

50 款简化 CSS 开发的实用工具和生成器

- - 畅之部落格
这些CSS工具都是很适合网页设计题使用,已经为大家分好类别,请自行点击导航快速浏览:. CSS Sprites | CSS精灵. 网格和布局,CSS 优化,CSS 菜单工具,CSS 按钮,CSS 圆角,CSS 框架,CSS Sprites,CSS 排版以及 CSS 表单. 新颖的 CSS 网格工具,可用于简化内容管理系统的页面模板,轻巧易用.

13个最常用的CSS和HTML快速开发工具

- - ITeye资讯频道
英文原文: 13 Most Used Speedy Tools To Write CSS And HTML Code. CleverCSS是个用于CSS开发的小型标记语言,从Python中得到灵感. 可以开发出干净、结构清晰的样式表. 在许多方面它比CSS2都更简洁、强大. 它与CSS最明显不同之处在于语法:CleverCSS采用了缩进式语法而不是对齐.

Web 开发中 20 个很有用的 CSS 库

- - Web前端 - ITeye博客
在过去的几年中,CSS已经成为一大部分开发者和设计者的最爱,因为它提供了一系列功能和特性. 每个月都有无数个围绕CSS的工具被开发者发布以简化WEB开发. 像CSS 库,框架,应用这样的工具能够为开发者做很多事,而且可以使开发者创造出创新立异的WEB应用. 在这篇文件章中我们找到了一系列对开发者有用的CSS库,它们能帮助开发者在一定的期限内取得有创造性和创新性的成果.

从事前端开发必须要了解的CSS原理

- - IT瘾-geek
  从事Web前端开发的人都与CSS打交道很多,有的人也许不知道CSS是怎么去工作的,写出来的CSS浏览器是怎么样去解析的呢. 当这个成为我们提高CSS水平的一个瓶颈时,是否应该多了解一下呢.   一、浏览器的发展与CSS.   网页浏览器主要通过 HTTP 协议连接网页服务器而取得网页, HTTP 容许网页浏览器送交资料到网页服务器并且获取网页.

网易邮箱极速4.0支持附件拖拽下载

- 韬光养晦 - cnBeta.COM
网易邮箱对外宣布,网易邮箱极速版4.0再次发力推出十多项新功能为用户带来全新体验. 可以无需安装邮件客户端软件,有新邮件也能通过桌面提醒,附件还可以直接拖拽完成下载. “支持附件拖拽下载,以及yeah.net邮箱新增来信桌面提醒是此次4.0升级的两大亮点,可以让网易邮箱用户收发邮件更快捷和方便. ”网易邮件事业部副总经理赵勇表示.

网易邮箱前端Javascript编码规范:基础规范

- - 博客 - 伯乐在线
在多年开发邮箱webmail过程中,网易邮箱前端团队积累了不少心得体会,我们开发了很多基础js库,实现了大量前端效果组件,开发了成熟的opoa框架以及api组件,在此向大家做一些分享. 今天想先和大家聊聊javascript的编码规范. 总所周知,javascript是一种语法极其灵活的语言. javascript在设计之初就只是用来为HTML添加动态效果的.