-
对象的键名使用驼峰命名法(如Airbnb CSS-in-JavaScript Style Guide)
为什么呢?因为我们在组件中将这些键作为
styles
对象的属性获取,使用驼峰命名是最为方便的方法。
// bad
{
'bermuda-triangle': {
display: 'none',
},
}
// good
{
bermudaTriangle: {
display: 'none',
},
}
复制代码
-
对其他样式的修改器(modifier),使用下划线命名
为什么?类似BEM, 这个命名惯例使它非常清晰地表明这个类就是要用来修改前面添加了下划线的元素的。下划线不需要引用,所以比起其他诸如破折号的元素,更倾向于使用它们。
// bad
{
bruceBanner: {
color: 'pink',
transition: 'color 10s',
},
bruceBannerTheHulk: {
color: 'green',
},
}
// good
{
bruceBanner: {
color: 'pink',
transition: 'color 10s',
},
bruceBanner_theHulk: {
color: 'green',
},
}
复制代码
-
整套的降级适配样式(sets of fallback),使用
selectorName_fallback
原因? 类似于修改器,保持命名的持续性可以帮助更好地反映出,原始样式和适配更多浏览器所使用的适配样式之间的关系。
// bad
{
muscles: {
display: 'flex',
},
muscles_sadBears: {
width: '100%',
},
}
// good
{
muscles: {
display: 'flex',
},
muscles_fallback: {
width: '100%',
},
}
复制代码
-
整套的降级适配样式,使用独立的选择器
原因?保持降级适配样式一致被包含在一个独立的对象里面,使他们的目的更清晰明了,更加加强了可读性。
// bad
{
muscles: {
display: 'flex',
},
left: {
flexGrow: 1,
display: 'inline-block',
},
right: {
display: 'inline-block',
},
}
// good
{
muscles: {
display: 'flex',
},
left: {
flexGrow: 1,
},
left_fallback: {
display: 'inline-block',
},
right_fallback: {
display: 'inline-block',
},
}
复制代码
-
媒体查询的节点,使用与设备无关的名字(诸如"small","medium","large")命名
为什么?通常使用的名字诸如"phone","tablet"以及"desktop",并没有完全吻合真实设备的特征。因此使用这些名字会(对这些媒体查询的效果)产生错误的期待。
// bad
const breakpoints = {
mobile: '@media (max-width: 639px)',
tablet: '@media (max-width: 1047px)',
desktop: '@media (min-width: 1048px)',
};
// good
const breakpoints = {
small: '@media (max-width: 639px)',
medium: '@media (max-width: 1047px)',
large: '@media (min-width: 1048px)',
};
复制代码
-
仅在主题中定义颜色
// bad
export default withStyles(() => ({
chuckNorris: {
color: '#bada55',
},
}))(MyComponent);
// good
export default withStyles(({ color }) => ({
chuckNorris: {
color: color.badass,
},
}))(MyComponent);
复制代码
-
仅在主题中定义字体
// bad
export default withStyles(() => ({
towerOfPisa: {
fontStyle: 'italic',
},
}))(MyComponent);
// good
export default withStyles(({ font }) => ({
towerOfPisa: {
fontStyle: font.italic,
},
}))(MyComponent);
复制代码
-
将字体作为系列相关样式进行定义
// bad
export default withStyles(() => ({
towerOfPisa: {
fontFamily: 'Italiana, "Times New Roman", serif',
fontSize: '2em',
fontStyle: 'italic',
lineHeight: 1.5,
},
}))(MyComponent);
// good
export default withStyles(({ font }) => ({
towerOfPisa: {
...font.italian,
},
}))(MyComponent);
复制代码