Как заставить Material-UI Radio кнопки плавать: слева - PullRequest
0 голосов
/ 22 мая 2018

https://codesandbox.io/s/9zxzj0r664

enter image description here

^ В приведенной выше демонстрации вы можете увидеть рабочий код, в любом случае, с трудом пытающимся настроить радиокнопки по горизонтали.

Есть ли простой способ сделать это в Material-UI?Или мне нужно стилизовать мои собственные радио-кнопки, что я мог бы сделать за 5 минут lol.

import React from "react";
import PropTypes from "prop-types";
import { withStyles } from "@material-ui/core/styles";
import Radio from "@material-ui/core/Radio";
import RadioGroup from "@material-ui/core/RadioGroup";
import FormHelperText from "@material-ui/core/FormHelperText";
import FormControlLabel from "@material-ui/core/FormControlLabel";
import FormControl from "@material-ui/core/FormControl";
import FormLabel from "@material-ui/core/FormLabel";

const styles = theme => ({
  root: {
    display: "flex"
  },
  formControl: {
    float: "left",
    margin: theme.spacing.unit * 3
  },
  group: {
    margin: `${theme.spacing.unit}px 0`
  }
});

class RadioButtonsGroup extends React.Component {
  state = {
    value: "female"
  };

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

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

    return (
      <div className={classes.root}>
        <FormControl
          component="fieldset"
          required
          className={classes.formControl}
        >
          <FormLabel component="legend">Gender</FormLabel>
          <RadioGroup
            aria-label="gender"
            name="gender1"
            className={classes.group}
            value={this.state.value}
            onChange={this.handleChange}
          >
            <FormControlLabel
              value="female"
              control={<Radio />}
              label="Female"
            />
            <FormControlLabel value="male" control={<Radio />} label="Male" />
            <FormControlLabel value="other" control={<Radio />} label="Other" />
            <FormControlLabel
              value="disabled"
              disabled
              control={<Radio />}
              label="(Disabled option)"
            />
          </RadioGroup>
        </FormControl>
        <FormControl
          component="fieldset"
          required
          error
          className={classes.formControl}
        >
          <FormLabel component="legend">Gender</FormLabel>
          <RadioGroup
            aria-label="gender"
            name="gender2"
            className={classes.group}
            value={this.state.value}
            onChange={this.handleChange}
          >
            <FormControlLabel
              value="male"
              control={<Radio color="primary" />}
              label="Male"
            />
            <FormControlLabel
              value="female"
              control={<Radio color="primary" />}
              label="Female"
            />
            <FormControlLabel
              value="other"
              control={<Radio color="primary" />}
              label="Other"
            />
            <FormControlLabel
              value="disabled"
              disabled
              control={<Radio />}
              label="(Disabled option)"
            />
          </RadioGroup>
          <FormHelperText>You can display an error</FormHelperText>
        </FormControl>
      </div>
    );
  }
}

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

export default withStyles(styles)(RadioButtonsGroup);

Ответы [ 3 ]

0 голосов
/ 22 мая 2018

https://codesandbox.io/s/n03mo5nz2m

Элементы RadioGroup содержат переключатели.Если вы хотите отобразить их подряд, возможно, самый простой способ - использовать строку flexbox.

Вы можете увидеть, что я сделал, в приведенных выше кодах и коробке, но это так же просто, как добавить вgroup style:

flexDirection: 'row',

Это работает, потому что Material-UI уже использует стили Flexbox для группы.Это также причина, по которой не работает добавление float: 'left'.

Вы также можете установить display: 'inline-block' для группы:

display: 'inline-block'

И это также приведет к стилизации строк, но с меньшим количеством опций управления.

0 голосов
/ 22 мая 2018

https://codesandbox.io/s/yp84vnzpq1

import React from "react";
import PropTypes from "prop-types";
import { withStyles } from "@material-ui/core/styles";
import Radio from "@material-ui/core/Radio";
import RadioGroup from "@material-ui/core/RadioGroup";
import FormHelperText from "@material-ui/core/FormHelperText";
import FormControlLabel from "@material-ui/core/FormControlLabel";
import FormControl from "@material-ui/core/FormControl";
import FormLabel from "@material-ui/core/FormLabel";

const styles = theme => ({
  formControl: {
    display: "flex",
    float: "left",
    margin: theme.spacing.unit * 3
  },
  group: {
    float: "left",
    flexDirection: "row",
    margin: `${theme.spacing.unit}px 0`
  }
});

class RadioButtonsGroup extends React.Component {
  state = {
    value: "male 1"
  };

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

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

    return (
      <div className={classes.root}>
        <RadioGroup
          aria-label="gender"
          name="gender1"
          className={classes.group}
          value={this.state.value}
          onChange={this.handleChange}
        >
          <FormControlLabel value="male 1" control={<Radio />} label="Male 1" />
          <FormControlLabel value="male 2" control={<Radio />} label="Male 2" />
          <FormControlLabel value="male 3" control={<Radio />} label="Male 3" />
        </RadioGroup>

      </div>
    );
  }
}

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

export default withStyles(styles)(RadioButtonsGroup);
0 голосов
/ 22 мая 2018

Я не думаю, что у этого есть один «нативный» способ сделать это в материальном интерфейсе, вы должны сделать это самостоятельно.на самом деле это лучший подход.

...