样式分类

基于组件开发的 YIS,样式分为 YIS 组件样式,自封装组件样式,扩展主题样式。

  • YIS 组件样式不需要处理,在打包时会将使用 import 引入组件相应的样式依赖引入到文件中。
  • 自封装组件样式可以根据组件复用情况放在不同的位置。详见下面的目录结构列表以及注释说明。
  • 扩展主题样式用于扩展 YIS 组件样式,如果自定义组件遵照 theme 方式引用样式亦可扩展自定义组件。
  •      ···
         |- src
            |- components
                // 项目级别组件 开放 brwoser 能力,样式维护在组件命名的文件夹下面
                |- test
                    |- index.js
                    |- browser.js
                    |- main.css
            |- pages
                |-home
                    |- components
                        // 页面级别的组件可以将组件 js 文件维护在页面文件夹 components 下面,样式文件维护在页面的 main.css 文件中既可。
                        |- menu.js
                    |-index.js
                    |-index.skel
                    |-main.css
            |- themes
                // 用于扩展 YIS 组件样式主题,该文件应与 YIS 组件同名并引入 YIS 组件的 css
                |- button.css
        ···
    
     ···
     |- src
        |- components
            // 项目级别组件 开放 brwoser 能力,样式维护在组件命名的文件夹下面
            |- test
                |- index.js
                |- browser.js
                |- main.css
        |- pages
            |-home
                |- components
                    // 页面级别的组件可以将组件 js 文件维护在页面文件夹 components 下面,样式文件维护在页面的 main.css 文件中既可。
                    |- menu.js
                |-index.js
                |-index.skel
                |-main.css
        |- themes
            // 用于扩展 YIS 组件样式主题,该文件应与 YIS 组件同名并引入 YIS 组件的 css
            |- button.css
    ···

样式引入

基于 css-module 开发样式,在 css 文件中完成样式文件编写后引入相应的 js 文件中。

代码节选自:yis-demo/src/pages/animate/main.css
@import '@qnpm/yis/components/reset.css';

.options{
   ···
}
.container{
    ···
}
.container{
    ···
}

将 css 文件引入 js 文件后,在 js 文件中获得的是一个对象,对象的 key 为开发者定义的类名,对象的 value 为经 css-module 处理后的类名。

代码节选自:yis-demo/src/pages/animate/index.js
import { View, Animate, Button, Page } from "@qnpm/yis/components";
import Test from '../../components/test';
import { registerPage, PageCore } from "@qnpm/yis";
import styles from "./main.css";
import classnames from "classnames";

export default class Animatedemo extends PageCore {  render() {
        return (
            <Page>
                <div className={styles.options}>
                    ···
                </div>
                <div className={styles.container}>
                   ···
                </div>
                <div className={styles.container}>
                   ···
                </div>
            </Page>
        );
    }
}

theme 方式引用样式

对于复用性组件建议以这种方式引入样式。 将引入样式对象作为组件的 theme 的默认值,theme 是 组件的实例属性,render 时取用 this.theme 上的属性获取类名。YIS Component 基类为组件提供了将 props.theme 更新到 this.theme 上的能力,因此当复用组件时需要新的主题只需要在 props 中传入自定义的 theme 文件(css 文件)即可。

import { Component } from '@qnpm/yis'
import { View } from '@qnpm/yis/components';
import styles from '../main.css';

export default class List extends Component {
  displayName= "List";
  theme = styles;
  render() {
      return (
          <div className={this.theme.list}>
              ···
          </div>
      )
  }
}

当然你也可以通过上述方式封装一个固定 theme 的高阶组件,供特定类型的组件使用。