其他

生态及展望

1 Chrome插件

前端辅助Chrome插件fe-tools已经接入了Moo-CSS模块,提供CSS样式属性查询,moo-css的分类查询,moo-css-base的检索功能。

image-20200128153527967

2 VSCode插件

为方便 moo-css-base 在 IDE 中快速提示开发,已创建了 vscode 提示插件moo-css-plugin。

image-20200128153730920

3 loader

当前css开发中,不存在于moo-css-base中的样式还需要我们手动写CSS代码,如.g-fs88,结合即将完成的moo-loader,我们可以使这部分工作由loader自动添加完成,以更高效得完成业务样式开发工作。

4 自动化转化

目前很多的设计稿是以sketch文件的形式提供,那么就可以设计一套解析规则,提取CSS样式及节点特征,结合Moo-CSS规则自动生成符合Moo-CSS规范的HTML标签及CSS样式,目标是实现样式的自动化开发操作。

相信未来样式开发会变得更加自由和高效。

常见问题

1.主流前端框架中的Component和Module

前文也有提过,在使用主流前端框架,如Vue,Module层可根据在路由views目录文件中各自定义;Component可在组件components目录中定义,易于区分和维护。可参考移动demo2以及PCdemo

SFC——Vue/Angular(1.x)

如views/a.vue

<template>
    <div class="m-a">...</div>
</template>
<style>
    .m-a {}
</style>

或直接使用css modules

<template>
    <div :class="$style.a">...</div>
</template>
<style module>
    .a {}
</style>	

components/b.vue

<template>
    <div class="u-a">...</div>
</template>
<style>
    .u-a {}
</style>

css in js——React/Angular(2.x)

import React, {Component} from 'react';
import styled from 'styled-components';

const Title = styled.h1`
  font-size: 1.5em;
  text-align: center;
  color: palevioletred;
`;

const Wrapper = styled.section`
  padding: 4em;
  background: papayawhip;
`;

class A extends Component {
	render () {
		return (<Wrapper>
		  <Title>
			<h1 className="u-w30 g-mt20">...</h1>
		  </Title>
		</Wrapper>)
	}
}

2.Component为何没有独有的命名前缀

  • 保证Component单元特质:在很多模块划分的CSS策略中,组件层和模块层的一直存在划分模糊的问题。Moo-CSS建议Component样式只保留组件核心特征,不推荐样式封闭,从而具有更好的拓展性。
  • Component以及Module命名前缀的非必要性:Component以及Module推荐使用css modules,其命名前缀并不像样式属性或Base般必要。

3.关于预处理的mixins和skins

mixins和skins通常在项目样式Base层和Component层,由于预处理定义的方法跟变量不会影响生成后的css体积,因此原则上是越精细越好,也是业务中较频繁维护的部分。moo-css-base的mixins方法库也将逐步优化和添加。

如mixins.less

// border-top 1px mobile
.bdt1px(@color) {
    position: relative
    &:after {
        left: 0;
        top: 0;
        width: 100%;
        height: 1px;
        -webkit-transform: scale(1, 0.5);
        transform: scale(1, 0.5);
        background-color: @color;
    }
}

module.less

@import 'mixins.less';
.m-nav {
    .m-nav__item {
        .bdt1px(red);
    }
}

4.关于font-size及line-height归类为gird而不是function的争议

有人质疑为什么把font-size及line-height归为gird而不是function,原因有2:font-size以及line-height会影响整体布局,特别是一些还在用rem作为自适应布局单位的项目;font-size缩写同font-style(fs)。

5.关于moo-css-base移动端样式库自适应使用vw作为长度单位

rem本身作为自适应的过渡属性已经承载了多年,viewport在当下移动设备兼容问题已完全不用考虑。使用vw即可避免rem单位换算的过程消耗,同时也避免了各开发团队rem换算单位不一致带来的尴尬。

vw兼容情况

6.用moo-css-base与其他UI库或组件库样式冲突吗

不冲突。因为Moo-CSS较特殊的命名前缀规则,以及moo-css-base只提供原子样式,冲突的概率非常小。

7.关于过渡和动画

过渡和动画的业务场景较为复杂和特殊,moo-css-base中并没有直接的封装效果或方法,可以直接使用animate.css或自行封装一个动效库(a-标识前缀、Base层)。


反馈

意见反馈