WEB前端規(guī)范

1. 規(guī)范說明

此為前端開發(fā)團隊遵循和約定的代碼書寫規(guī)范蹬耘,意在提高代碼的規(guī)范性和可維護性斥季。
此規(guī)范為參考規(guī)范,不全是硬性要求参萄,部分硬性約定見下一條書寫規(guī)范卫枝,統(tǒng)一團隊編碼規(guī)范和風格。讓所有代碼都是有規(guī)可循的讹挎,并且能夠得到沉淀校赤,減少重復勞動吆玖。

1.1 結(jié)構(gòu)說明

-- 項目結(jié)構(gòu)
----|---- CSS文件結(jié)構(gòu)
----|---- JS文件結(jié)構(gòu)

2. 書寫規(guī)范

2.1 樣式與內(nèi)容分離

2.1.1 項目結(jié)構(gòu)

--- 
 |---- index.html             入口頁    
 |---- js/                    JS //具體見JS細化結(jié)構(gòu)                 
 |---- css/                   CSS //具體見CSS細化結(jié)構(gòu)

2.1.2 重構(gòu)步驟約定

  1. index.html 全部樣式附著于 class="xxx" 注: 此時文件中不包含任何一個 id="xxx"
  2. 為上一步書寫 CSS style
    [至此重構(gòu)完成]
  3. 開始書寫js交互文件,使用 IDClass 定位被操作句柄
  4. index.html 中需要的地方添加 id="xxx"data-xxx="xxx"
    [至此交互效果完成]

2.1.3 命名規(guī)范

  • 文件及文件夾: 全部英文小寫字母+數(shù)字或連接符"- , _ "马篮,不可出現(xiàn)其他字符
    如:../css/style.css, jquery.1.x.x.js
  • 文件:調(diào)用 /libs 文件需包含版本號沾乘,壓縮文件需包含min關(guān)鍵詞,其他插件則可不包含
    如:/libs/jquery.1.9.1.js /libs/modernizr-1.7.min.js fileuploader.js plugins.js
  • ID: 匈牙利命名法 & 小駝峰式命名法
    如:firstName topBoxList footerCopyright
  • Class: [減號連接符]
    如:top-item main-box box-list-item-1
  • 盡量使用語義明確的單詞命名浑测,避免 left bottom 等方位性的詞語

2.1.4 格式&編碼

  • 文本文件: .xxx UTF-8_(無BOM)_ 編碼
  • 圖片文件: .png (PNG-24) .jpg (壓縮率8-12)
  • 動態(tài)圖片: .gif
  • 壓縮文件: .tar.gz .zip

2.2 CSS 細化規(guī)范

2.2.1 CSS 文件結(jié)構(gòu)

--- ../css/
 |---- css/libs/reset.css                  CSS reset文件
 |---- … … 
 |---- css/images/                         主 CSS-sprite 圖片     
 |---- css/style.css                       主 CSS 樣式表
 |---- … … 
 |---- css/images/xxx/sprite.png           xxx 的 CSS-sprite 圖片
 |---- css/xxx-style.css                   xxx 的 樣式表

2.2.2 CSS(含Less) 文件結(jié)構(gòu)

--- ../css/
 |---- css/libs/reset.less            CSS reset文件
 |---- css/libs/elements.less         Less 函數(shù)復用文件
 |---- … … 
 |---- css/images/                         主 CSS-sprite 圖片     
 |---- css/style.less                      主樣式Less
 |---- css/style.css                       less -> css 自動生成
 |---- … … 
 |---- css/images/xxx/sprite.png           xxx 的 CSS-sprite 圖片
 |---- css/xxx-style.less                  xxx 的 Less
 |---- css/xxx-style.css                   less -> css 自動生成

2.2.3 使用Less

.less文件頭部引入 reset.less & elements.less翅阵,之后調(diào)用如下屬性傳參即可,具體使用說明見 -> Lesselements 官方文檔

@import "libs/reset.less";  
@import "libs/elements.less";

.gradient
.bw-gradient
.bordered
.drop-shadow
.rounded
.border-radius
.opacity
.transition-duration
.rotation
.scale
.transition
.inner-shadow
.box-shadow
.columns
.translate

2.2.4 CSS reset

CSS reset 文件使用:reset.cssreset.less

  • reset文件用于重設(shè)各個瀏覽器的默認樣式方案迁央,解決其引起的耦合問題掷匠。
  • 也可使用 .clearfix 清除浮動

2.2.5 CSS 注釋格式約定

/*
@name: Drop Down Menu
@description: Style of top bar drop down menu.
@require: reset.css
@author: Andy Huang(andyahung@geekpark.net)
*/

其中,@require為可選項

  • CSS換行制表:使用 2 <del>或4</del> 個空格岖圈,而非[Tab]
  • 書寫格式:
    • CSS名稱+冒號+屬性
      如:.box1 {float:left;}
    • 建議保留{左側(cè)空格讹语,字體名用\包含
      如:.box1,.box2,.box3 {font-family:Courier,'Courier New';}
    • 避免中文,或使用轉(zhuǎn)義蜂科,推薦前者
      如:font-family: "Microsoft YaHei"; font-family:\5fae\8f6f\96c5\9ed1;

2.2.6 CSS各屬性的排列順序:不做硬性要求

如:以下2種順序均可

.box {
  /* 順序1 */
  background: none repeat scroll 0 0 transparent;
  bottom: 11px;
  position: relative;
  width: 22px;
  z-index: 33;
}
.box {
  /* 順序2 */
  z-index: 33;
  width: 22px;
  bottom: 11px;
  background: transparent none repeat scroll 0 0 ;
  position: relative;
}

2.2.7 CSS嵌套規(guī)則

/* 推薦嵌套層級 */
.ui-icon-rarr{}
.ui-icon-larr{}
.ui-title{}
.ui-nav .ui-list{}
.ui-table .ui-list{}

/* 不推薦 */
.ui-icon-rarr{}
.ui-icon-larr{}
.ui-title{}
.ui-list{}
.ui-nav{}

2.2.8 CSS格式化

勿格式化募强,保留下面這種格式,增加可讀性和可維護性崇摄,后期后臺程序(如:PHP/Python)會將CSS壓縮成 一行 輸出:

.box{
  /* 勿格式化擎值,增加可讀性 */
  background: none repeat scroll 0 0 transparent;
  bottom: 11px;
  position: relative;
  width: 22px;
  z-index: 33;
}

2.3 XHTML 細化規(guī)范

2.3.1 HTML 注釋格式約定

<!--
@name: Drop Down Menu
@description: Style of top bar drop down menu.
@author: Andy Huang(andyahung@geekpark.net)
-->

<div id="header">
    <div class="xxx">
        <span>HTML行內(nèi)注釋格式</span>
    </div>
</div><!-- #header end-->
  • HTML換行縮進:采用 2 空格

2.3.2 HTML嵌套規(guī)則

/* 推薦嵌套層級 */
  <ul class="ui-nav">
    <li class="ui-nav-item"> some text
      <ul class="ui-nav-item-child">
        <li> some text
          <ul class="ui-list">
            <li class="ui-list-item"> some text</li>
          </ul
        ...
       </ul>
    </li>
    <li
    ...
  </ul>

2.3.4 * 第一行統(tǒng)一使用HTML5標準:<!DOCTYPE html>

<!DOCTYPE html>
<html dir="ltr" lang="zh-CN">
<head>
  <meta charset="utf-8" />
  <title>極客公園 | 創(chuàng)新者社區(qū)</title>
  <meta name="keywords" content="xxxx, xxx, xxxxx" />
  <meta name="description" content="xxxxxxxxxxxxxxxxxxxx" />

2.3.5 Meta 的使用:(需要根據(jù)具體需求按需選擇)可參看:cool-head

<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta http-equiv="Cache-Control" content="max-age=7200" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="alternate" type="application/rss+xml" title="RSS 2.0"  />
<link rel="shortcut icon" href="favicon.ico">
<link rel="apple-touch-icon" href="/apple-touch-icon.png">

<script type="text/javascript" src="/js/xxx.js"></script>
<link rel="stylesheet" href="/css/xxx.css">

<script type="text/javascript">
    //Google 統(tǒng)計代碼 的位置在離</head>最近的位置
</script>

</head>

  • <img>標簽默認缺省格式:<img src="xxx.png" alt="缺省時文字" /> 避免出現(xiàn)[src="" 問題]
  • <a>標簽缺省格式:<a href="###" title="鏈接名稱">xxx</> 注:target="_blank" 根據(jù)需求決定
  • <a>標簽預留鏈接占位符使用###,參見:[a標簽占位符問題]
  • 所有標簽需要符合XHTML標準閉合
  • 一律統(tǒng)一標簽結(jié)尾斜杠的書寫形式:<br /> <hr /> 注意之間空格
  • 避免使用已過時標簽逐抑,如:<b> <u> <i> 而用 <strong> <em>等代替
  • 使用data-xxx來添加自定義數(shù)據(jù)鸠儿,如:<input data-xxx="yyy"/>
  • 避免使用style="xxx:xxx;"的內(nèi)聯(lián)樣式表
  • 特殊符號使用參考HTML 符號實體

2.4 JS 細化規(guī)范

2.4.1 JS 文件結(jié)構(gòu)

---/js/
|---- /libs/plugin-1/       使用到的js插件1  
|---- /libs/plugin-2/       使用到的js插件2  
|---- /libs/plugin-3/       使用到的js插件3  
|---- script.js             單獨書寫的js  
|---- plugins.js            調(diào)用的plugins匯總  
|---- juqery-1.9.x.min.js   調(diào)用jq庫文件  
  • JS 換行縮進:采用 4 空格
  • 結(jié)束行需添加分號;
  • jQuery變量要求首字符為 $, 私有變量:首字符為_; 盡量避免全局變量.
  • 避免使用 eval(),setTimeOut使用調(diào)用函數(shù)厕氨,考慮重繪进每,回流 操作對頁面影響 參看:reflows,repaints
  • JS調(diào)試使用console.log()console.dir()進行命斧,避免使用彈出框田晚,線上版需要注釋所有調(diào)試代碼
  • JS壓縮混淆工具: JS Compressor 如果使用了壓縮,需要留 name-src.js在同路徑供今后修改使用
2.4.2 jQuery Call
<!-- Grab Google CDN jQuery. fall back to local if necessary -->  
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>  
<script>!window.jQuery && document.write('<script src="js/jquery-1.7.2.min.js"><\/script>')</script>            
2.4.3 jQuery Plugin
2.4.4 JSON格式規(guī)范

參考JSON Style Guide翻譯贤徒,原版:Google JSON Style Guide

HTML 細化規(guī)范

  • HTML head部分的結(jié)構(gòu)參看:cool-head (摘取必要內(nèi)容即可)
  • css 文件置于都 頭部
  • jQueryGoogle Analytics引用置于 頭部
  • 其他效果js統(tǒng)計代碼 文件置于 尾部
  • HTML 代碼盡量過一遍HTML5 驗證
  • HTML 占位圖片使用 temp.im & placehold.us 圖片服務(wù)

2.5 Responsive Web 規(guī)范

從設(shè)計之處就堅持"Mobile First"的理念,在重構(gòu)頁面的時候要靈活采取響應(yīng)式的解決方案汇四。

2.5.1 響應(yīng)式實現(xiàn)途徑

* 設(shè)置 meta viewport 屬性

<meta name="viewport" content="width=device-width, initial-scale=1" />

* 引入不同尺寸設(shè)備的樣式表

<link rel="stylesheet" type="text/css" href="style.css" media="screen, handheld" />
<link rel="stylesheet" type="text/css" href="enhanced.css" media="screen  and (min-width: 40.5em)" />
<!--[if (lt IE 9)&(!IEMobile)]>
<link rel="stylesheet" type="text/css" href="enhanced.css" />
<![endif]-->

* 使用 CSS Media Queries 方法

@media screen and (max-width: 40.5em) {
  .product-img {
    width: auto;
    float: none;
  }
}
@media screen and (max-width: 480px) {
}

* JS控制導航欄在 resize 事件 觸發(fā)后的可見性接奈,如:

$(w).resize(function(){ //Update dimensions on resize
  sw = document.documentElement.clientWidth;
  sh = document.documentElement.clientHeight;
  checkMobile();
});
//Check if Mobile
function checkMobile() {
  mobile = (sw > breakpoint) ? false : true;
  if (!mobile) { //If Not Mobile
    $('[role="tabpanel"],#nav,#search').show(); //Show full navigation and search
  } else { //Hide 
    if(!$('#nav-anchors a').hasClass('active')) {
      $('#nav,#search').hide(); //Hide full navigation and search
    }
  }
}

2.5.2 響應(yīng)式解決方案

* 彈性圖片

img {
  max-width: 100%;
  height: auto;
  width: auto\9; /* ie8 */
}

* 自適應(yīng)嵌入媒體

.video embed, .video object, .video iframe {
  width: 100%;
  height: auto;
}

* 禁用iPhone字體自適應(yīng)功能:

html {
  -webkit-text-size-adjust: none;
}

* 讓 IE 9 以下的IE版本支持響應(yīng)式:

<!--[if lt IE 9]>
  <script src="http://css3-mediaqueries-js.googlecode.com/svn/trunk/css3-mediaqueries.js"></script>
<![endif]-->

2.6 Newletter 制作規(guī)范

  • CSS只可使用 內(nèi)聯(lián)樣式表 ,如:style="margin:0;"
  • 設(shè)計之初遵循: 圖上無文本通孽,文本后無底紋 的規(guī)則
  • 使用 MailChimp HTML Email CSS Fix 參看下文鏈接
  • 引入 CSS Reset for HTML Email 參看下文鏈接
  • 使用Table布局而非DIV
  • 所有圖片使用IMG標簽序宦,如:<img style="style="display:block" "src="" />
  • 可以適當使用占位符spacer.gif
  • 多用<br />換行而非<p>
  • 整體最佳寬度為:550-600px
  • 不使用Javascript
  • 正式發(fā)送給用戶之前,多次測試

更多細節(jié)參考下面鏈接:
12 Killer Tips and Tricks for Building HTML Email

2.7 生產(chǎn)力工具推薦

2.7.1 for Mac OS

for more app detial check -> IUSETHIS

2.7.1.1 前端相關(guān)工具(Mac)
2.7.1.2 其他效率工具
2.7.2.1 前端相關(guān)工具(Windows)
2.7.2.2 其他效率工具(Windows)

2.7.3 其他收集

2.8 相關(guān)技巧

Wiki page index

2.9 參考數(shù)據(jù)

涉及到 設(shè)計->重構(gòu)->兼容性->測試 時可參考各瀏覽器的占用情況
-- updated: 2013/02 - 2013/04 via Google Analytics of GeekPark

<table>
<tbody valign="top"><tr>
<th align="center">總瀏覽器分布</th>
<th align="center">IE版本分布</th>
<th align="center">移動設(shè)備分布</th>
<th align="center">屏幕解決方案</th>
</tr>
<tr>
<td align="left">

<table>
<tbody><tr>
<th align="left">類別</th>
<th align="right">占有率</th>
</tr>
<tr>
<td align="left">Chrome</td>
<td align="right">40.39%</td>
</tr>
<tr>
<td align="left">Internet Explorer</td>
<td align="right">24.86%</td>
</tr>
<tr>
<td align="left">Safari & Safari (in-app)</td>
<td align="right">16.05%</td>
</tr>
<tr>
<td align="left">Android Browser</td>
<td align="right">10.57%</td>
</tr>
<tr>
<td align="left">Firefox</td>
<td align="right">5.99%</td>
</tr>
<tr>
<td align="left">Opera</td>
<td align="right">0.69%</td>
</tr>
<tr>
<td align="left">Opera Mini</td>
<td align="right">0.37%</td>
</tr>
<tr>
<td align="left">Mozilla Compatible Agent</td>
<td align="right">0.14%</td>
</tr>
<tr>
<td align="left">Maxthon</td>
<td align="right">0.13%</td>
</tr>
</tbody></table>
</td>
<td align="right">

<table>
<tbody><tr>
<th align="left">版本號</th>
<th align="right">占有率</th>
</tr>
<tr>
<td align="left">IE 8</td>
<td align="right">60.97%</td>
</tr>
<tr>
<td align="left">IE 9</td>
<td align="right">17.11%</td>
</tr>
<tr>
<td align="left"><em>IE 7</em></td>
<td align="right">8.39%</td>
</tr>
<tr>
<td align="left"><em>IE 6</em></td>
<td align="right">7.63%</td>
</tr>
<tr>
<td align="left">IE 10</td>
<td align="right">5.87%</td>
</tr>
<tr>
<td align="left">IE 4</td>
<td align="right">0.02%</td>
</tr>

</tbody></table>
</td>
<td align="right">

<table>
<tbody><tr>
<th align="left">移動平臺</th>
<th align="right">占有率</th>
</tr>
<tr>
<td align="left">iOS</td>
<td align="right">50.39%</td>
</tr>
<tr>
<td align="left">Android</td>
<td align="right">48.05%</td>
</tr>
<tr>
<td align="left">Windows Phone</td>
<td align="right">0.96%</td>
</tr>
<tr>
<td align="left">Nokia</td>
<td align="right">0.33%</td>
</tr>
</tbody></table>
</td>
<td align="right">
<table>
<tbody><tr>
<th align="left">PC & Mac屏幕分辨率</th>
<th align="right">占有率</th>
</tr>
<tr>
<td align="left">1366x768</td>
<td align="right">21.55%</td>
</tr>
<tr>
<td align="left">1440x900</td>
<td align="right">12.70%</td>
</tr>
<tr>
<td align="left">1280x800</td>
<td align="right">9.60%</td>
</tr>
<tr>
<td align="left">1280x1024</td>
<td align="right">6.68%</td>
</tr>
<tr>
<td align="left">320x480</td>
<td align="right">6.38%</td>
</tr>
<tr>
<td align="left">1920x1080</td>
<td align="right">6.27%</td>
</tr>
</tbody></table>
</td>
</tr>
</tbody></table>

使用團隊

此規(guī)范基于 MIT License 開源互捌,持續(xù)更新維護中潘明,可 StarFork 本項來形成你的規(guī)范,請以 創(chuàng)建[issues] 的方式反饋秕噪,或發(fā)起Pull Request

[src="" 問題]: http://js8.in/555.html "src="" 問題"
[a標簽占位符問題]: http://www.v2ex.com/t/48511/ "a標簽占位符問題"

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末钳降,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子巢价,更是在濱河造成了極大的恐慌,老刑警劉巖固阁,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件壤躲,死亡現(xiàn)場離奇詭異,居然都是意外死亡备燃,警方通過查閱死者的電腦和手機碉克,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來并齐,“玉大人漏麦,你說我怎么就攤上這事】鐾剩” “怎么了撕贞?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長测垛。 經(jīng)常有香客問我捏膨,道長,這世上最難降的妖魔是什么食侮? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任号涯,我火速辦了婚禮,結(jié)果婚禮上锯七,老公的妹妹穿的比我還像新娘链快。我一直安慰自己,他們只是感情好眉尸,可當我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布域蜗。 她就那樣靜靜地躺著,像睡著了一般噪猾。 火紅的嫁衣襯著肌膚如雪地消。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天畏妖,我揣著相機與錄音脉执,去河邊找鬼。 笑死戒劫,一個胖子當著我的面吹牛半夷,可吹牛的內(nèi)容都是我干的婆廊。 我是一名探鬼主播,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼巫橄,長吁一口氣:“原來是場噩夢啊……” “哼淘邻!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起湘换,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤宾舅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后彩倚,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體筹我,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年帆离,在試婚紗的時候發(fā)現(xiàn)自己被綠了蔬蕊。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡哥谷,死狀恐怖岸夯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情们妥,我是刑警寧澤猜扮,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站监婶,受9級特大地震影響破镰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜压储,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一鲜漩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧集惋,春花似錦孕似、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至雷绢,卻和暖如春泛烙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背翘紊。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工蔽氨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓鹉究,卻偏偏與公主長得像宇立,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子自赔,可洞房花燭夜當晚...
    茶點故事閱讀 45,500評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 通用規(guī)范 tab鍵用兩個空格代替 因為在不同系統(tǒng)的編輯工具對tab解析不一樣妈嘹,windows下的tab鍵是占四個空...
    米塔塔閱讀 417評論 0 7
  • 1:通用規(guī)范 tab鍵用兩個空格代替 因為在不同系統(tǒng)的編輯工具對tab解析不一樣,windows下的tab鍵是占四...
    糖心m閱讀 461評論 0 1
  • 通用規(guī)范 tab鍵用兩個空格代替 因為在不同系統(tǒng)的編輯工具對tab解析不一樣绍妨,windows下的tab鍵是占四個空...
    戈薇薇閱讀 475評論 0 1
  • 通用規(guī)范 tab鍵用兩個空格代替因為在不同系統(tǒng)的編輯工具對tab解析不一樣润脸,windows下的tab鍵是占四個空格...
    熊貓貓超人閱讀 29,920評論 17 113
  • 在線閱讀 http://interview.poetries.top[http://interview.poetr...
    程序員poetry閱讀 114,421評論 24 450