在Material-UI中的自定义主题上设置组件z-index

时间:2016-01-28 20:32:05

标签: material-ui

我尝试在Material-UI中设置自定义主题的组件的z-index。他们已将zIndex移出版本0.14.2中的基本主题,而是在名为zIndex.js的节点模块中设置zIndex。我想覆盖我的组件中的zIndex但是无法在不更改节点模块本身的情况下找到这样做的方法,这是一个坏主意。我在一个单独的页面中设置了自定义主题,如此

import Colors from 'material-ui/lib/styles/colors';
import ColorManipulator from 'material-ui/lib/utils/color-manipulator';
import Spacing from 'material-ui/lib/styles/spacing';
import zIndex from 'material-ui/lib/styles/zIndex';

export default {
    spacing: Spacing,
    zIndex: zIndex,
    fontFamily: 'Roboto, sans-serif',
    palette: {
        primary1Color: "#303F9F",
        primary2Color: "#3F51B5",
        primary3Color: "#C5CAE9",
        accent1Color: "#448AFF",
        accent2Color: "#ED2B2B",
        accent3Color: "#F58C8C",
        textColor: Colors.darkBlack,
        alternateTextColor: Colors.white,
        canvasColor: Colors.white,
        borderColor: Colors.grey300,
        disabledColor: ColorManipulator.fade(Colors.darkBlack, 0.3),
        pickerHeaderColor: Colors.cyan500
    }
};

然后我在app.jsx中使用它(为简洁而缩短代码)

import ThemeManager from 'material-ui/lib/styles/theme-manager';
import MyRawTheme from '../theme/customTheme.js';

class App extends React.Component {
    constructor() {
        this.state = {
            appConfig: MainStore.appConfig
        }
    }

    getChildContext() {
        return {
            muiTheme: ThemeManager.getMuiTheme(MyRawTheme)
        };
    }

App.childContextTypes = {
    muiTheme: React.PropTypes.object
};

虽然这适用于设置自定义颜色,但我不确定如何设置自定义zIndex。

我尝试创建自己的zIndex.js并像这样导入

import Colors from 'material-ui/lib/styles/colors';
import ColorManipulator from 'material-ui/lib/utils/color-manipulator';
import Spacing from 'material-ui/lib/styles/spacing';
import zIndex from './zIndex';

export default {
    spacing: Spacing,
    zIndex: zIndex,
    fontFamily: 'Roboto, sans-serif',
    palette: {
        primary1Color: "#303F9F",
        primary2Color: "#3F51B5",
        primary3Color: "#C5CAE9",
        accent1Color: "#448AFF",
        accent2Color: "#ED2B2B",
        accent3Color: "#F58C8C",
        textColor: Colors.darkBlack,
        alternateTextColor: Colors.white,
        canvasColor: Colors.white,
        borderColor: Colors.grey300,
        disabledColor: ColorManipulator.fade(Colors.darkBlack, 0.3),
        pickerHeaderColor: Colors.cyan500,
    }
};

除了将其作为像这样的对象包括在内外

import Colors from 'material-ui/lib/styles/colors';
import ColorManipulator from 'material-ui/lib/utils/color-manipulator';
import Spacing from 'material-ui/lib/styles/spacing';

export default {
    spacing: Spacing,
    zIndex: {
        menu: 1000,
        appBar: 1100,
        leftNavOverlay: 1200,
        leftNav: 1300,
        dialogOverlay: 1400,
        dialog: 1500,
        layer: 2000,
        popover: 5000,
        snackbar: 2900,
        tooltip: 3000
    },
    fontFamily: 'Roboto, sans-serif',
    palette: {
        primary1Color: "#303F9F",
        primary2Color: "#3F51B5",
        primary3Color: "#C5CAE9",
        accent1Color: "#448AFF",
        accent2Color: "#ED2B2B",
        accent3Color: "#F58C8C",
        textColor: Colors.darkBlack,
        alternateTextColor: Colors.white,
        canvasColor: Colors.white,
        borderColor: Colors.grey300,
        disabledColor: ColorManipulator.fade(Colors.darkBlack, 0.3),
        pickerHeaderColor: Colors.cyan500,
    }
};

两者都不奏效。它始终使用节点模块中的zIndex值,即使它未在自定义主题页面中导入。 我已经询问了材料 - ui回购,并被引导到这个页面,这对我没有帮助http://www.material-ui.com/#/get-started/server-rendering

任何人都知道如何在不更改节点模块本身的情况下更改zIndex?

1 个答案:

答案 0 :(得分:4)

(解决方案):昨天整天争吵并最终在这里发布后,我想出了如何覆盖自定义主题中组件的zIndex。希望这有助于其他人。自定义主题时,可以在getMuiTheme方法中包含第二个参数。在任何地方的Material-UI文档中都没有提到这一点。在app.jsx或您要覆盖zIndex的任何组件中,您可以像这样更改它(为简洁而缩短代码)

import ThemeManager from 'material-ui/lib/styles/theme-manager';
import MyRawTheme from '../theme/customTheme.js';
let zIndex = {
    zIndex: {
        popover: 5001,
        layer: 5000
    }
};

class App extends React.Component {
    constructor() {
        this.state = {
            appConfig: MainStore.appConfig
        }
    }

    getChildContext() {
        return {
            muiTheme: ThemeManager.getMuiTheme(MyRawTheme, zIndex)
        };
    }

我正在对我的主app.jsx组件进行更改,因为我希望这些更改在我的所有其他组件中生效,但我相信您可以在单个组件级别进行这些更改,而无需将它们应用于所有组件组件。如果查看lib / styles / zIndex.js下的material-ui节点模块,您将找到可以通过这种方式更改的组件zIndex的列表。看起来像这样

"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = {
  menu: 1000,
  appBar: 1100,
  leftNavOverlay: 1200,
  leftNav: 1300,
  dialogOverlay: 1400,
  dialog: 1500,
  layer: 2000,
  popover: 2100,
  snackbar: 2900,
  tooltip: 3000
};
module.exports = exports['default'];

从我的示例中可以看出,我只是在我的app.jsx组件中更改popover和layer zIndex。