์ด๋ฏธ ๋ง๋ค์ด์ง ๋์์ธ
import Button from '@mui/material/Button';
function App() {
return <Button />;
}
์ฌ์ฉํ๊ณ ์ถ์ ๋์์ธ ์ปดํฌ๋ํธ์ ์ ์ธํ๊ณ ์ฝ๋์ ์ปดํฌ๋ํธ๋ช (Button)์ ์ ์ธํ๋ฉด ๋๋ค.
์ด๋ฏธ ๋ง๋ค์ด์ง ๋์์ธ์ ๋ด ์คํ์ผ๋๋ก ๋ณ๊ฒฝํ๊ฑฐ๋, ์๊น๊ณผ ๋ชจ์์ ์ฝ๊ฒ ๋ณ๊ฒฝํ ์ ์๋ค.
import { styled } from '@mui/material/styles';
import Button from '@mui/material/Button';
export const CustomButton1 = styled(Button)(({ theme }) => ({
position: 'relative', // ::before ๊ฐ์ ์์๊ฐ ๋ฒํผ ๋ด๋ถ์ ์์นํ๋๋ก ์ค์
overflow: 'hidden', // ๋ฒํผ ์ธ๋ถ๋ก ๋ฒ์ด๋๋ ์์๋ฅผ ์จ๊น
borderRadius: '50%',
padding: 0, // ๋ฒํผ์ padding ์ ๊ฑฐ
border: 'none', // ๋ถํ์ํ border๊ฐ ์๋๋ก ์ค์
width: '65px', // ๋ฒํผ์ ๊ฐ๋ก ํฌ๊ธฐ
height: '65px', // ๋ฒํผ์ ์ธ๋ก ํฌ๊ธฐ (๊ฐ๋ก์ ๋์ผํ๊ฒ ์ค์ )
'&::before': {
content: '""',
position: 'absolute',
top: 0,
left: 0,
width: '100%',
height: '100%',
borderRadius: 'inherit',
backgroundColor: 'rgba(245, 245, 245, 0)', // ์ด๊ธฐ์๋ ํฌ๋ช
transition: 'background-color 0.3s ease', // ๋ถ๋๋ฌ์ด ์ ํ ํจ๊ณผ
zIndex: 1,
},
'&:hover::before': {
backgroundColor: 'rgba(245, 245, 245, 0.7)', // ํธ๋ฒ ์ ๋ด๋ถ์ ํฌ๋ช
ํ ํ์ ์ค๋ฒ๋ ์ด ์ ์ฉ
borderRadius: '50%',
},
'&:hover': {
backgroundColor: 'rgba(245, 245, 245, 0)', // ๊ธฐ๋ณธ ํ๋์ ํธ๋ฒ ์คํ์ผ ๋ฎ์ด์ฐ๊ธฐใด
borderRadius: '50%',
},
}));
โ๏ธ ์ปค์คํฐ๋ง์ด์งํ ์ปดํฌ๋ํธ๋ช ์ด
CustomButton1์ด๋ฏ๋ก ์ด ๋์์ธ๋ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์ฌ์ฉํ ํ์ด์ง.js(x) ํ์ผ์CustomButton1import ํ๊ณ ์์นํ๊ณ ์ํ๋ ๊ณณ์<CustomButton1 />์ ๋ฃ์ผ๋ฉด ๋๋ค.
npm install @mui/material [๋ค๋ฅธ ํจํค์ง๋ค]
๐ ๋ค๋ฅธ ํจํค์ง๋ค ์ข ๋ฅ
- @mui/materia : MUI ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํต์ฌ ์ปดํฌ๋ํธ๋ฅผ ์ ๊ณต
- @emotion/react : CSS-in-JS ๋ฐฉ์์ผ๋ก ์คํ์ผ ์์ฑ
(CSS-in-JS ๋ฐฉ์ : ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋ ์์์ CSS ์คํ์ผ์ ์์ฑ)- @emotion/styled : React ์ปดํฌ๋ํธ๋ฅผ ์คํ์ผ๋ง๋ ์ปดํฌ๋ํธ๋ก ๋ง๋ฆ
(import { styled } from '@mui/material/styles';) ์ ์ธ- @mui/icons-material : MUI์์ ์ฌ์ฉํ ์ ์๋ ๋ค์ํ ์์ด์ฝ์ ์ ๊ณต
(import [์์ด์ฝ๋ช ] from '@mui/icons-material/[์์ด์ฝ๋ช ]';) ์ ์ธ
https://mui.com/material-ui/material-icons/ โก๏ธ ์ฌ๊ธฐ์์ ์์ด์ฝ์ ๊ฐ์ ธ์จ๋ค.