css - 如何在 Tab 组件中更改 Icon 组件的位置?

标签 css reactjs material-ui

我在我的 React 元素中使用 MaterialUI 的选项卡。

这是标签的 JSX:

<AppBar color="default" position="static">
       <Tabs indicatorColor="primary" textColor="primary" value={tabIndex} onChange={this.handleChange}>
         {instances.map(instance =>    
            <StyledTab                        
                    style={{ textTransform: 'initial' }}
                    onClick={() => { this.changeActiveInstance(instance.id) }}
                    label={this.getTabAddress(instance)}
                    icon={<ClearIcon ></ClearIcon>}
                  >    
            </StyledTab>
         )}                   
 </Tabs>

这就是我注入(inject) css 的方式:

const StyledTab = withStyles({
  root: {
    textTransform: 'initial' 
  },  
})(Tab);

结果是这样的: Tab

我想将“ClearIcon”放在别处。我尝试了一点样式注入(inject),但没有成功。

有人能给我指出正确的方向吗?

最佳答案

当尝试自定义任何 Material-UI 组件时,起点是 CSS portion of the API documentation .在这种情况下,您可能想要覆盖的最相关的类是 wrapperlabelContainerlabel

要完全了解它们的使用方式和默认样式(以及您可能想要覆盖的内容),最好的方法是查看 source code .

以下是来自 Tab.js 的样式中最相关的部分:

  /* Styles applied to the `icon` and `label`'s wrapper element. */
  wrapper: {
    display: 'inline-flex',
    alignItems: 'center',
    justifyContent: 'center',
    width: '100%',
    flexDirection: 'column',
  },
  /* Styles applied to the label container element if `label` is provided. */
  labelContainer: {
    width: '100%', // Fix an IE 11 issue
    boxSizing: 'border-box',
    padding: '6px 12px',
    [theme.breakpoints.up('md')]: {
      padding: '6px 24px',
    },
  },

下面是理解这些如何使用的相关代码:

    if (labelProp !== undefined) {
      label = (
        <span className={classes.labelContainer}>
          <span
            className={classNames(classes.label, {
              [classes.labelWrapped]: this.state.labelWrapped,
            })}
            ref={ref => {
              this.labelRef = ref;
            }}
          >
            {labelProp}
          </span>
        </span>
      );
    }
        <span className={classes.wrapper}>
          {icon}
          {label}
        </span>

以下是一些可能的自定义方法示例。

import React from "react";
import PropTypes from "prop-types";
import Paper from "@material-ui/core/Paper";
import { withStyles } from "@material-ui/core/styles";
import Tabs from "@material-ui/core/Tabs";
import Tab from "@material-ui/core/Tab";
import PhoneIcon from "@material-ui/icons/Phone";
import FavoriteIcon from "@material-ui/icons/Favorite";
import PersonPinIcon from "@material-ui/icons/PersonPin";

const styles = {
  root: {
    flexGrow: 1,
    maxWidth: 700
  },
  firstIcon: {
    paddingLeft: 70
  },
  labelContainer: {
    width: "auto",
    padding: 0
  },
  iconLabelWrapper: {
    flexDirection: "row"
  },
  iconLabelWrapper2: {
    flexDirection: "row-reverse"
  }
};

class IconLabelTabs extends React.Component {
  state = {
    value: 0
  };

  handleChange = (event, value) => {
    this.setState({ value });
  };

  render() {
    const { classes } = this.props;

    return (
      <Paper square className={classes.root}>
        <Tabs
          value={this.state.value}
          onChange={this.handleChange}
          variant="fullWidth"
          indicatorColor="secondary"
          textColor="secondary"
        >
          <Tab
            icon={<PhoneIcon className={classes.firstIcon} />}
            label="Class On Icon"
          />
          <Tab
            classes={{
              wrapper: classes.iconLabelWrapper,
              labelContainer: classes.labelContainer
            }}
            icon={<FavoriteIcon />}
            label="Row"
          />
          <Tab
            classes={{
              wrapper: classes.iconLabelWrapper2,
              labelContainer: classes.labelContainer
            }}
            icon={<PersonPinIcon />}
            label="Row-Reverse"
          />

          <Tab icon={<PersonPinIcon />} label="Default" />
        </Tabs>
      </Paper>
    );
  }
}

IconLabelTabs.propTypes = {
  classes: PropTypes.object.isRequired
};

export default withStyles(styles)(IconLabelTabs);

Edit Tab Icon Placement

关于css - 如何在 Tab 组件中更改 Icon 组件的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55078256/

相关文章:

css - IE8去除Asp标题行背景色 :Gridview

javascript - 在多选 Material UI 上 react 渲染同级

javascript - React redux,操作有效负载无法在 try/catch block 中看到变量

javascript - 在单页应用程序上使用 json 数据的material-ui

twitter-bootstrap - React Material UI - Bootstrap 容器等效项

javascript - 从 2 个不同的 HTML 文件导入 Div 并添加其内容

css - Firefox 和 Chrome 之间的 DIV 问题

reactjs - 如何让 MobX Decorators 与 Create-React-App v2 一起使用?

javascript - ReactJS:如何删除 Material-UI 的 <Table> 的 <TableRow> 上的行突出显示?

悬停时的 CSS 问题 - 摇晃效果