Search code examples
reactjsmaterial-uiweb-frontend

could anyone kindly help me out with material ui style positioning


enter image description here

Above image is what I'm currently getting. I want the icon to be placed at the right-hand end. I'm using material-ui design right now. How can I do this?

 import React from 'react';
 import { makeStyles } from '@material-ui/core/styles';
 import {
 Grid, AppBar, Toolbar, Typography
 } from '@material-ui/core';
 import ShoppingCartIcon from '@material-ui/icons/ShoppingCart';
 import Badge from '@material-ui/core/Badge';
 import IconButton from '@material-ui/core/IconButton';

class Appbar extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
   }
  }

  render() {
    const classes = makeStyles(theme => ({
      root: {
        flexGrow: 1,
      },
      title: {
        marginRight: theme.spacing(2),
      },
      cart: {
        flexGrow:1,
      },
   }));
    return (
      <div className={classes.root}>
       <AppBar position="static">
          <Typography className={classes.title} variant="h6">
            THIS IS IT
          </Typography>
            <IconButton className ={classes.cart} aria- 
  label="Cart">
          <Badge badgeContent={100} color="primary">
            <ShoppingCartIcon/>
          </Badge>
        </IconButton>
    </AppBar>
  </div>
    );
  }
}

export default Appbar;

Solution

  • Demo App Bar

    You can see it working here:

    Here is the code snippet:

    import React from 'react';
    import AppBar from '@material-ui/core/AppBar';
    import Toolbar from '@material-ui/core/Toolbar';
    import MenuIcon from '@material-ui/icons/Menu';
    import IconButton from '@material-ui/core/IconButton';
    import Typography from '@material-ui/core/Typography';
    import Button from '@material-ui/core/Button';
    import ShoppingCartIcon from '@material-ui/icons/ShoppingCart';
    import { withStyles } from '@material-ui/core/styles';
    
    const styles = theme => ({
      root: {
        flexGrow: 1,
      },
      grow: {
        flexGrow: 1,
      },
      menuButton: {
        marginLeft: -12,
        marginRight: 20,
      },
      button: {
        marginRight: 6,
      },
      rightIcon: {
        marginLeft: theme.spacing.unit,
      },
    });
    
    class Appbar extends React.Component {
      constructor(props) {
        super(props);
        this.state = {
       }
      }
    
      render() {
        const { classes } = this.props;
    
        return (
          <div className={classes.root}>
          <AppBar position="static">
            <Toolbar>
              <IconButton
                className={classes.menuButton}
                color="inherit"
                aria-label="Menu"
              >
                <MenuIcon />
              </IconButton>
              <Typography variant="h6" color="inherit" className={classes.grow}>
                Demo
              </Typography>
              <Button
                color="inherit"
                className={classes.button}
              >
                <ShoppingCartIcon className={classes.rightIcon} />
              </Button>
            </Toolbar>
          </AppBar>
        </div>
        );
      }
    }
    
    export default withStyles(styles)(Appbar);
    

    I gave flexGrow property to the title to let it grow, remaining space in the container is distributed equally to all children. You can learn more about it here.