最后更新2012年1月7日, 由alanburke创建于2008年8月31日. 编辑者:JohnAlbin,sun, jhodgdon, aspilicious.中文翻译:南文子. 登陆进行编辑此页面.
原文链接:http://drupal.org/node/302199
- 状态
- 草稿. Drupal 核心 (HEAD)应该追随最新的约定版本.(译者加: 原文有HEAD这个词,因版本一直更新而头痛? 我没太理解^_^)
- 链接
- CSS 编码规范问题 Drupal 核心"标记"组件问题 groups.drupal.org中的早期讨论 由Nick Lewis提出的最初建议
书写有效的CSS
所有CSS代码应该是有效的CSS, 比较好的选择是 CSS 2.1. 假如CSS3的用法是合法化的并且遵循平稳退化/渐进增强(graceful degradation / progressive enhancement)原则,那么CSS 3.0也是可以接受的.
这些规范都使用简洁术语:
selector {
property: value;
}
选择器: {
属性: 值;
}
选择器
选择器应该
- 在单独的一行上
- 在前一个选择器后面有一个空格
- 以前大括号结尾
- 以单独一行的不用缩排的后大括号闭合
.book-navigation .page-next {
}
.book-navigation .page-previous {
}
.book-admin-form {
}
在群组间,区域或多个逻辑相关样式选择器块之间需要空一行.
多个(Multiple)选择器
多个选择器的每一项应该是单独成一行,并且每个逗号后面不留空格:
#forum td.posts,
#forum td.topics,
#forum td.replies,
#forum td.pager {
属性Properties
所有的属性都应该在前大括号的下面一行. 每个属性应该:
- 单独占一行
- 缩进两个空格,如范例, 不使用制表符tab
- 在属性名后和属性值前有一个空格
- 以分号结尾semi-colon
#forum .description {
color: #efefef;
font-size: 0.9em;
margin: 0.5em;
}
属性按字母顺序排列
多个属性应该按字母的顺序列出.
不好:
body {
font-weight: normal;
background: #000;
font-family: helvetica, sans-serif;
color: #FFF;
}
好:
body {
background: #000;
color: #fff;
font-family: helvetica, sans-serif;
font-weight: normal;
}
颜色(特别是十六进制值hex values)最好是小写.
属性有多个值时
在属性有多个值的地方,每个值应该以空格分开.
font-family: helvetica, sans-serif;
CSS3的属性, 第三方前缀(vendor prefixes), 渐进增强(progressive enhancement)
.progressive-enhancement {
background: #000 none;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#E5000000,endColorstr=#E5000000);
background-color: rgba(0, 0, 0, 0.9);
}
.progressive-prefixes {
background-color: #003471;
background-image: -webkit-gradient(linear, left top, left bottom, from(#003471), to(#448CCB));
background-image: -webkit-linear-gradient(top, #003471, #448CCB);
background-image: -moz-linear-gradient(top, #003471, #448CCB);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#00003471,endColorstr=#00448CCB);
background-image: -ms-linear-gradient(top, #003471, #448CCB);
background-image: -o-linear-gradient(top, #003471, #448CCB);
background-image: linear-gradient(to bottom, #003471, #448CCB);
}
.vendor-prefixes {
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
border-radius: 5px;
-moz-box-shadow: 0 3px 20px #000;
filter: progid:DXImageTransform.Microsoft.Shadow(color=#000000, direction='180', strength='10');
-ms-filter: "progid:DXImageTransform.Microsoft.Shadow(color=#000000, direction='180', strength='10')";
-webkit-box-shadow: 0 3px 20px #000;
box-shadow: 0 3px 20px #000;
}
- 所有的属性按字母顺序排列
- 将特有的第三方属性(vendor-specific)以他们各自的标准CSS3属性名进行群组.
- 第三方特定属性按字母顺序排列(vendor-specific properties).
- 第三方特定属性(vendor-specific properties)声明在标准属性(standard properties)前.
- 把可能不支持的值声明在已知的被支持的值之后(渐进增强progressive enhancement). (see CSS spec细则)
filter:属性特例should be grouped with 应该它之前以ms-filter:属性分组并排序(如上例).
当声明的CSS3属性还没有达到被推荐的标准状态(亦称:定案)前使用第三方特定扩展可能会引起浏览器矛盾. 不要理所当然的认为-vendor-xyz-property属性和最终版xyz-property是一样的.
推荐避免使用那些不被CSS3标准支持的第三方特定扩展.
注释
通常,所有的注释都要遵循drupal的通用Doxygen格式化约定 , 用以同Drupal的其它代码库保持一致. 如果在那些通用约定不能应用的区域, 我们会求助于CSSDoc 语法 (草案).
根据PHP代码规范,大块的注释应该遵循如下格式, 来描述注释下面的代码区.
/** * Documentation here. */
更多的通用注释语法细节可以查看这个文档: Doxygen 格式化约定.
比较短的行内注释可以加到属性的后面, 注释前加一空格.
background-position: 0.2em 0.2em; /* LTR */ padding-left: 2em; /* LTR */
Right-To-Left从右向左(译者加:做为天朝上国阅读顺序很正常下面不用看了)
Drupal supports conditional loading of CSS files with specific override rules for right-to-left languages. For a module, the override rule should be defined in a file named <module>-rtl.css (e.g., node-rtl.css). For a theme, the override rule should be defined in a file named style-rtl.css. The rule that is overridden should be commented in the default CSS rule.
From node-rtl.css:
#node-admin-buttons {
clear: left;
float: right;
margin-left: 0;
margin-right: 0.5em;
}
Rules in node.css which will be overridden if the rtl.css file is loaded:
#node-admin-buttons {
clear: right; /* LTR */
float: left; /* LTR */
margin-left: 0.5em; /* LTR */
}
See also: http://drupal.org/node/132442#language-rtl
As a rule of thumb, add a /* LTR */comment in your style:
- when you use the keywords, 'left' or 'right' in a property, e.g.
float: left; - where you use unequal margin, padding or borders on the sides of a box, e.g.,
margin-left: 1em; margin-right: 2em;
- where you specify the direction of the language, e.g.
direction: ltr;