<!doctype html><html lang="zh-CN"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>网站标题</title> </head> <body> <!-- 头部 --> <header class="wrapper-header"> <div class="container-1200"></div> </header> <!-- 导航栏 --> <nav class="wrapper-nav"> <div class="container-1200"> <ul> <li></li> </ul> </div> </nav> <!-- 主要内容 --> <main class="wrapper-main"> <div class="container-1200"> <!-- 主要内容 - 新闻 --> <div class="line line-news clearfix"> <div class="news-left"></div> <div class="news-right"></div> </div> <!-- 主要内容 - 专题专栏 --> <div class="line line-ztzl"></div> <!-- 主要内容 - 政民互动 --> <div class="line line-zmhd"></div> </div> </main> <!-- 页脚 --> <footer class="wrapper-footer"> <div class="container-1200"></div> </footer> <!-- 侧边栏 --> <div class="wrapper-sidebar"> <ul> <li></li> </ul> </div> </body></html>
朝发前端工程规范
政府静态网页开发手册 · 持续更新Frontend playbook让好代码,
让好代码,
成为团队习惯。
面向政府静态网页的开发规范。左边说明统一约定,右边给出可直接参考的标准写法。
HTML 规范
使用结构完整、语义明确且格式化的 HTML。
文档基础
- 使用 HTML5 文档声明。
- 字符编码放在 head 的最前部;必须设置 viewport。
- 样式表、jQuery 放到 head 中;其它脚本放在 body 末尾;部分第三方脚本可以使用
async,避免阻塞页面解析,例如 jiucuo.js。
结构与语义
- 使用
headernavmainfooter语义元素,其余使用 div。
class 约定
- 使用
wrapper-xxx表示外层。 - 使用
container-1200表示内层,数字代表页面宽度。
id 约定
- 每个 id 不要重复。
css 约定
- 样式尽量写入到 css 文件。
编码约定
- 使用 2 个空格缩进,标签名和属性名使用小写,属性值统一使用双引号。
- CMSPRO_ 标签使用大写,如
CMSPRO_DOCUMENTSCMSPRO_CHANNEL。
推荐的页面骨架
wrapper-xxx定义背景样式。container-1200定义页面宽度。- 侧边栏因为不用页面宽度,就只使用
wrapper-sidebar,不用加container-1200。
- 主要内容中,使用
lineline-xxx表示每行。 - 每行中,使用
xxx-leftxxx-centerxxx-right表示左中右列。
常见meta标签
<!-- 必选 --><meta name="SiteName" content="<CMSPRO_WEBSITE FIELD='name' code=''></CMSPRO_WEBSITE>"><meta name="SiteDomain" content="http://jtt.sc.gov.cn/"><meta name="SiteIDCode" content="5100000085"> <!-- 栏目页必选 --><meta name="ColumnName" content="<CMSPRO_CHANNEL CODE='' FIELD='channelName'></CMSPRO_CHANNEL>"><meta name="ColumnDescription" content="<CMSPRO_CHANNEL CODE='' FIELD='channelName'></CMSPRO_CHANNEL>"><meta name="ColumnKeywords" content="<CMSPRO_CHANNEL CODE='' FIELD='channelName'></CMSPRO_CHANNEL>"><meta name="ColumnType" content="<CMSPRO_CHANNEL CODE='' FIELD='channelName'></CMSPRO_CHANNEL>"> <!-- 详情页必选 --><meta name="ArticleTitle" content="<CMSPRO_DOCUMENT FIELD='title' num='100'>标题 </CMSPRO_DOCUMENT>"><meta name="PubDate" content="<CMSPRO_DOCUMENT field='publishedTime' dateformat='yyyy-MM-dd HH:mm'></CMSPRO_DOCUMENT>"><meta name="ContentSource" content="<CMSPRO_DOCUMENT FIELD='infoSource' DOMAINMETADATANAME='稿件元数据'>信息来源</CMSPRO_DOCUMENT>">
CSS 规范
使用统一样式命名规范和文件命名规范。
基础原则
- 使用 reset.css 清除不同浏览器差异。
- 优先使用外部样式表,页面尽量不写 style 标签,如果要写,放到 head 中。
命名与作用域
- class 使用小写短横线命名,名称表达组件或职责,不描述颜色、位置等易变外观。
- 组件采用清晰的块、元素、状态结构,例如
searchsearch_inputsearch_button。 - 激活的块,使用
on。 - 每块组件写入注释。
响应式与兼容性
- 在内容出现挤压或失衡的实际位置设置断点。
- 注意常见断点:
1200px1000px768px425px320px。 - 最低兼容宽度:
360px?。 - 是否可以使用
flex布局?。
文件命名
reset.css:清除不同浏览器差异。common.css:通用样式。包括公共头、公共尾、导航栏、侧边栏、面包屑导航等。index.css:首页样式。zmhd.csszwgk.csszjxx.css:频道页样式。每个样式量较大,使用单独css。secondary.css:二级页面样式。每个样式量不多,可以合并到一起。包括列表页、网站地图等页面。
基础命名规则
- 都以 search 开头,表示是同一组件。
- 便于后续快速复制到其它网站使用,一目了然。
@charset "UTF-8";/* 通用样式 */ .search {} // 搜索功能 .search .search_inner {} /* 搜索子级 */ .search .search_input {} /* 搜索框 */ .search .search_button {} /* 搜索按钮 */.search .search_button a {} /* 搜索子元素 */ /* 响应式 */@media screen and (max-width: 1200px){}
@charset "UTF-8";/* 二级页面样式 */ /* 列表页 */... /* 图片列表 */... /* 网站地图 */...
JavaScript 与 jQuery 规范
以 jQuery 为默认方案,配合原生 JavaScript。
语言与代码风格
- 新代码默认使用 jQuery 保证兼容性。
- 每个模板仅引入一个 jQuery 文件。在 head 中引入,以避免部分代码在 main 中无法执行。
- 尽量使用
var,以低版本浏览器保证兼容性。 - 变量和函数使用
camelCase。如:getYjzjList、encryptJSON - 常量使用
UPPER_SNAKE_CASE。如:HD_INTERFACE_URL、HD_PAGE_URL - 统一使用分号和单引号。
- 函数、不容易理解的地方加上注释。
常用约定
common.js:公共 js。index.js:首页 js。zmhd.jszwgk.js:频道页 js。hd_common.jsaes.js:互动功能。jianfanti.js:简繁体。alert.min.js:外链弹窗。jquery.min.js:jQuery。文件名中不带版本,避免扫描出漏洞。使用 3.x 版本。jquery.SuperSlide.js:superslide。文件名中不带版本,避免扫描出漏洞。使用 2.3.1 版本。
jQuery 示例
// 通用 js $(function () { // 页脚友情链接 $('.link-list-item').hover( function () { $(this).addClass('on').siblings().removeClass('on'); $(this).find('.down-box').toggle(); $(this).siblings().find('.down-box').hide(); }, function () { $(this).removeClass('on'); $(this).find('.down-box').hide(); } ); // 页头导航栏高亮 highlightChannel('.nav li', '.breadcrumb'); // 侧边两个导航条随高度滚动 initialSidebarScroll();}); /** * 切换栏目 * @param triggerEl 鼠标 click 或 hover 的标题元素 * @param targetEl 需要展示的内容元素 * @param method 切换方式,'click' 或 'hover',默认 'hover' * @param callback 回调函数 */function switchPanel(triggerEl, targetEl, method, callback) {...}
文件结构规范
统一文件、资源命名与引用方式。
目录职责
- 常见文件夹名:
cssimagesjsztzl2026 - 改版文件夹使用年份,不要月份和日期:
2026 - HTML 模板放在项目根目录或改版年份目录。
- 专题资源文件放到 ztzl 文件夹下 images css js 中。
文件命名
- 文件和目录统一使用小写字母、数字与短横线,不使用空格、中文和特殊符号。
- 专题资源前加
zt_。
index.html 首页header.html 公共头footer.html 公共尾 list.html 通用列表页list_img.html 通用图片列表页 wzdt.html 网站地图 zt_rszp.html 专题_人事招聘
logo.png // 侧边栏图片sidebar_icon1.pngsidebar_icon2.png // 人事招聘专题图片rszp_title.pngrszp_bg.png
资源目录示例
- html 模板放根目录或改版年份目录
- 专题资源(image、css、js)放到 ztzl 下
- 改版资源(image、css、js、html)放到年份文件夹下
根目录/├─ index.html├─ zmhd.html├─ header.html├─ footer.html├─ css/│ ├─ index.css│ └─ reset.css├─ images/│ ├─ logo.png│ └─ sidebar_icon1.png├─ js/│ ├─ jQuery.min.js│ └─ common.js├─ 2026/│ ├─ css/│ ├─ js/│ └─ images/└─ ztzl/ ├─ css/ │ ├─ ztzl.css │ └─ ztzl_xxx.css ├─ js/ └─ images/ ├─ zfxxgk_title.png └─ jczwgk_icon1.png
资源加载
<!-- css --><link rel="stylesheet" href="css/common.css"> <!-- js --><script src="js/jquery.min.js"></script><script src="js/index.js"></script><script id="_jiucuo_" sitecode="5101220004" src="https://zfwzgl.www.gov.cn/exposure/jiucuo.js" async></script> <!-- async 异步加载 --> <!-- image --><img src="images/logo.png" />
编码小技巧
汇总静态网页开发中常用且易复用的小技巧。
后台使用
- 大改动前,先下载模板备份。
- 视频文件尽量传到稿件中,不要传到文件目录,避免备份模板时体积过大下载慢。
- 后台建栏目
- 辅助栏目:友情链接、网站地图、测试栏目等。
- 公共栏目:各公共模板。
- 站点配置中,站点域名最后不加
/。 - 删除栏目前,撤销稿件,撤销栏目。
模板使用
- 检查模板 meta 标签。
- 详情页
- 无论是否展示访问量,都请求。
- 没有分享功能,可先预留位置。
HTML 小技巧
- 政务服务外链 a 标签补充
rel="noopener noreferrer"。
其它参考
模板用法
<!-- 站点 --><CMSPRO_WEBSITE FIELD="url"></CMSPRO_WEBSITE> <!-- 栏目 --><CMSPRO_CHANNEL CODE="" FIELD="url"></CMSPRO_CHANNEL><CMSPRO_CHANNEL CODE="" FIELD="channelName"></CMSPRO_CHANNEL><CMSPRO_CHANNEL CODE="" FIELD="memo">栏目描述</CMSPRO_CHANNEL><CMSPRO_CHANNEL CODE="" FIELD="codeName">栏目code</CMSPRO_CHANNEL> <!-- 文章 --><CMSPRO_DOCUMENTS CHANNELCODE="" DOCUMENTTYPE="0|1|2|3|8|9" NUM="5" STARTPOS="0"></CMSPRO_DOCUMENTS><CMSPRO_DOCUMENTS CHANNELCODE="" DOCUMENTTYPE="0|1|2|3|8|9" NUM="1000" STARTPOS="0" PAGENAVIGATIONID="page-div" PAGENAVIGATIONCLASS="" PAGESIZE="15"></CMSPRO_DOCUMENTS>(DOCUMENTTYPE中:0代表普通稿件、123未知、8代表图片新闻、9代表头条新闻)(SITECODE="chengdu" 跨站点读取数据)(ORDER="PUBLISHED_TIME DESC" 文章列表排序字段)(ORDER="PUBLISHED_TIME ASC" 文章列表排序字段 倒序)<CMSPRO_APPENDIXS MODE="IMG" NUM="1" STARTPOS="0"></CMSPRO_APPENDIXS><CMSPRO_APPENDIX FIELD='path'></CMSPRO_APPENDIX><CMSPRO_DOCUMENT FIELD='url'></CMSPRO_DOCUMENT><CMSPRO_DOCUMENT FIELD="title">文章标题</CMSPRO_DOCUMENT><CMSPRO_DOCUMENT FIELD="content">文章内容</CMSPRO_DOCUMENT><CMSPRO_DOCUMENT FIELD="publishedTime" DATEFORMAT="yyyy-MM-dd">时间</CMSPRO_DOCUMENT> <!-- 子栏目 --><CMSPRO_CHANNELS CODE="" CHILDLEVEL="1" CHILDTYPE="0|1|2|3" NUM="" STARTPOS="0"></CMSPRO_CHANNELS>(CHILDTYPE中:0普通栏目,1未知,2外链栏目,3未知)<CMSPRO_CHANNEL CODE='' FIELD='url'></CMSPRO_CHANNEL><CMSPRO_CHANNEL CODE='' FIELD="channelName"></CMSPRO_CHANNEL> <!-- 子栏目logo --><img src="<CMSPRO_CHANNEL LOGOINDEX='0'></CMSPRO_CHANNEL>" alt=""/><img src="<CMSPRO_CHANNEL CODE='' LOGOINDEX='0'></CMSPRO_CHANNEL>" alt=""/> <!-- 关联稿件 -->(MODE参数:USER<用户手工设置的关联稿件>、KEYWORDS<提取包含当前稿件中设置的关键词的所有稿件>、ALL<前两者结合>)<CMSPRO_RELDOCUMENTS STARTPOS='0' NUM='5' MODE='USER'> <li> <CMSPRO_DOCUMENT field='subTitle' autolink='true' target='_blank' num="100"></CMSPRO_DOCUMENT> </li></CMSPRO_RELDOCUMENTS> <!-- 面包屑导航 --><CMSPRO_LOCATION LINK=" > " SELFONLY="false" AUTOLINK="true" TARGET="_blank" LINKEXTRA="" HOMEPAGEDESC="首页">当前位置</CMSPRO_LOCATION> <!-- 来源 --><CMSPRO_DOCUMENT FIELD="source" DOMAINMETADATANAME="默认元数据集">信息来源</CMSPRO_DOCUMENT> <!-- 公共头和公共尾 --><!--header--><!--#include virtual="<CMSPRO_CHANNEL CODE='c104734' FIELD='url'></CMSPRO_CHANNEL>"--><!--header end--> <!--footer--><!--#include virtual="<CMSPRO_CHANNEL CODE='c104735' FIELD='url'></CMSPRO_CHANNEL>"--><!--footer end--> <!-- 自动产生 a 标签 --><CMSPRO_CHANNEL CODE="c103022" AUTOLINK="true" LINKALT="true" target="_blank" FIELD="channelName">政府采购</CMSPRO_CHANNEL><CMSPRO_DOCUMENT FIELD="title" NUM="22" AUTOLINK="true" LINKALT="true" LINKALTTEXT="">标题</CMSPRO_DOCUMENT> <!-- 循环的时候自动编号 --><CMSPRO_ROWNO>当前记录序号</CMSPRO_ROWNO>