Material UI is a Material Design library made for React.
It’s a set of React components that have Material Design styles.
In this article, we’ll look at how to add papers and cards with Material UI.
Paper
Paper is a component that resembles papers in real life.
To add them, we can use the Paper
component.
For example, we can write:
import React from "react";
import Paper from "@material-ui/core/Paper";
export default function App() {
return (
<>
<Paper elevation={0}>foo</Paper>
<Paper>foo</Paper>
<Paper elevation={3}>foo</Paper>
</>
);
}
to add papers with various depths.
The depths are defined by the elevation
prop.
Paper Variants
We can also add the variant prop to make the surface outlined.
For example, we can write:
import React from "react";
import Paper from "@material-ui/core/Paper";
export default function App() {
return (
<>
<Paper variant="outlined" square>
foo
</Paper>
</>
);
}
We make the variant
prop outlined
to make it outlined.
Card
Cards contain content and actions about something.
For example, we can add one by writing:
import React from "react";
import Card from "@material-ui/core/Card";
import CardActions from "@material-ui/core/CardActions";
import CardContent from "@material-ui/core/CardContent";
import Button from "@material-ui/core/Button";
import Typography from "@material-ui/core/Typography";
export default function App() {
return (
<>
<Card>
<CardContent>
<Typography color="textSecondary" gutterBottom>
Word of the Day
</Typography>
<Typography variant="h5" component="h2">
foo
</Typography>
</CardContent>
<CardActions>
<Button size="small">Learn More</Button>
</CardActions>
</Card>
</>
);
}
We add the Card
with some CardContent
.
To add styled text, we add some Typography
component.
Then we added a CardAction
to let us do something.
Outlined Card
To make the card outlined, we can add the variant
prop and set the value to outlined
.
For example, we can write:
import React from "react";
import Card from "@material-ui/core/Card";
import CardActions from "@material-ui/core/CardActions";
import CardContent from "@material-ui/core/CardContent";
import Button from "@material-ui/core/Button";
import Typography from "@material-ui/core/Typography";
export default function App() {
return (
<>
<Card variant="outlined">
<CardContent>
<Typography color="textSecondary" gutterBottom>
Word of the Day
</Typography>
<Typography variant="h5" component="h2">
foo
</Typography>
</CardContent>
<CardActions>
<Button size="small">Learn More</Button>
</CardActions>
</Card>
</>
);
}
Now we see an outline around the box.
Complex Card
We can make a card with some content in it.
We make it expandable with the Collapse
component in the card.
The in
prop specifies that it’s expanded with the expanded
value.
If it’s true
, then we see the expanded text.
For example, we can write:
import React from "react";
import clsx from "clsx";
import Card from "@material-ui/core/Card";
import CardHeader from "@material-ui/core/CardHeader";
import CardMedia from "@material-ui/core/CardMedia";
import CardContent from "@material-ui/core/CardContent";
import CardActions from "@material-ui/core/CardActions";
import Collapse from "@material-ui/core/Collapse";
import IconButton from "@material-ui/core/IconButton";
import Typography from "@material-ui/core/Typography";
import { makeStyles } from "@material-ui/core/styles";
import FavoriteIcon from "@material-ui/icons/Favorite";
import ExpandMoreIcon from "@material-ui/icons/ExpandMore";
const useStyles = makeStyles(theme => ({
expand: {
transform: "rotate(0deg)",
marginLeft: "auto",
transition: theme.transitions.create("transform", {
duration: theme.transitions.duration.shortest
})
},
media: {
height: 0,
paddingTop: "56.25%"
}
}));
export default function App() {
const classes = useStyles();
const [expanded, setExpanded] = React.useState(false);
const handleExpandClick = () => {
setExpanded(!expanded);
};
return (
<Card className={classes.root}>
<CardHeader title="Cat" subheader="Small cat" />
<CardMedia
className={classes.media}
image="https://placekitten.com/200/200"
title="Cat"
/>
<CardContent>
<Typography variant="body2" color="textSecondary" component="p">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur
aliquet facilisis ligula sed gravida.
</Typography>
</CardContent>
<CardActions disableSpacing>
<IconButton>
<FavoriteIcon />
</IconButton>
<IconButton
className={clsx(classes.expand, {
[classes.expandOpen]: expanded
})}
onClick={handleExpandClick}
>
<ExpandMoreIcon />
</IconButton>
</CardActions>
<Collapse in={expanded} timeout="auto" unmountOnExit>
<CardContent>
<Typography paragraph>
Aliquam efficitur sapien ac diam rutrum, ac venenatis nisi dictum.
</Typography>
<Typography paragraph>
Integer eu lectus pulvinar, ornare ipsum eget
</Typography>
</CardContent>
</Collapse>
</Card>
);
}
to make the card content in the Collapse
component show when we click the expand more icon.
We also added the CardMedia
to show a picture.
The image
prop has the image.
title
has the accessible text for the card media.
Conclusion
We can add a card with text and images.
Also, we can have content that shows when we click on the expand button.