'Does Material UI have an Image component?
I used other react components before, they mostly have their own Image component, but I can't find that in Material-UI?
Or is it done via CardMediaAPI? or simply use tags? Thanks!
Solution 1:[1]
Another option (at least in v5) is to use the Box component and select the underlying html element to be img as given in the example below (copied from official docs for v5)
<Box
component="img"
sx={{
height: 233,
width: 350,
maxHeight: { xs: 233, md: 167 },
maxWidth: { xs: 350, md: 250 },
}}
alt="The house from the offer."
src="https://images.unsplash.com/photo-1512917774080-9991f1c4c750?auto=format&w=350&dpr=2"
/>
Solution 2:[2]
There is no such specific custom img component avaiable with material-ui.
But you can use the simple html img component inside another wrapper components to create custom img component by your own. e.g
<Paper variant="outlined">
<img src="url" />
</Paper>
Also <CardMedia/>
component has to be used with in conjunction with <Card/>
component.
Another such component which uses image is <Avatar>
component.
<Avatar alt="Example Alt" src="/static/images/avatar.jpg" />
Solution 3:[3]
Material-ui recommends using Material-ui-image, you have to install it separately but I have really enjoyed using it. After installing, as expected, it's simply:
import Image from "material-ui-image";
...
<Image src="image/src/" />
Solution 4:[4]
While I am answering this question, the latest version of MUI
is 5.2.2
and there is no exact image component, but MUI
had mentioned two third-party provided image components. One is mui-image and another one is material-ui-image. According to MUI, "mui-image
is the only MUI image component to satisfy the Material guidelines for loading images" .
You can easily install mui-image
by following few steps:
Install:
npm i mui-image
//or
yarn add mui-image
Import:
import Image from 'mui-image'
// or
import { Image } from 'mui-image'
Use:
<Image src="my-image.png" />
For details about mui-image
props
and more check npmjs
package docs here.
Solution 5:[5]
You can use CardMedia from Material UI as below. Please see the section Complex Interaction in Material UI Example
<CardMedia
className={classes.media}
image="/static/images/cards/paella.jpg"
title="Paella dish"
/>
Solution 6:[6]
Use the Avatar
component
<Avatar variant={"rounded"} alt="The image" src={url} style={{
width: 200,
height: 200,
}} />
Solution 7:[7]
Using mui's Box component is a good starting point. From there one can easily build its own reusable component without the need for another dependency. Try something like:
import {Box, BoxProps, } from "@mui/material";
type ImgProps = {
alt: string;
src: string;
// add more HTML img attributes you need
}
export const Img = (props: BoxProps & ImgProps) => <Box component='img' {...props} />;
Solution 8:[8]
Use the CardMedia component
const [previewImage, setPreviewImage]= useState<any>();
const { getRootProps, getInputProps } = useDropzone({
accept: "image/*",
onDrop: (acceptedFiles) => {
setPreviewImage(URL.createObjectURL(acceptedFiles[0]));
},
});
<CardMedia
component="img"
sx={{
height: 233,
width: 350,
maxHeight: { xs: 233, md: 167 },
maxWidth: { xs: 350, md: 250 },
}}
src={previewImage}
/>
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Peter Gerdes |
Solution 2 | WitVault |
Solution 3 | joshpetit |
Solution 4 | |
Solution 5 | Khabir |
Solution 6 | panchicore |
Solution 7 | yN. |
Solution 8 | Ali-Alrabi |