반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- react
- ReactNative
- 국비코딩
- Java의정석
- 자바스크립트 코딩테스트
- 평일코딩
- javascript
- 리액트네이티브
- 정보처리기사
- 자바의정석
- 정보처리기사실기요약
- 정보처리기사정리
- 자바스크립트
- spring
- 자스코테
- Oracle
- 코딩테스트
- 정보처리기사요약
- 스프링
- CSS
- 오라클
- VUE
- 리액트
- 정보처리기사실기
- php
- 타입스크립트
- 이안의평일코딩
- typescript
- 국비IT
- 정보처리기사실기정리
Archives
- Today
- Total
이안의 평일코딩
[Material-UI] 기초(3) - styles, theme 본문
반응형
설치하기
// with npm
npm install @material-ui/styles
// with yarn
yarn add @material-ui/styles
styles
styles를 생성하여 적용하기 위해서는 3가지 API를 사용할 수 있다.
Hook API
import React from 'react';
import { makeStyles } from '@material-ui/core/styles';
import Button from '@material-ui/core/Button';
const useStyles = makeStyles({
root: {
background: 'linear-gradient(45deg, #FE6B8B 30%, #FF8E53 90%)',
border: 0,
borderRadius: 3,
boxShadow: '0 3px 5px 2px rgba(255, 105, 135, .3)',
color: 'white',
height: 48,
padding: '0 30px',
},
});
export default function Hook() {
const classes = useStyles();
return <Button className={classes.root}>Hook</Button>;
}
Styled components API
import React from 'react';
import { styled } from '@material-ui/core/styles';
import Button from '@material-ui/core/Button';
const MyButton = styled(Button)({
background: 'linear-gradient(45deg, #FE6B8B 30%, #FF8E53 90%)',
border: 0,
borderRadius: 3,
boxShadow: '0 3px 5px 2px rgba(255, 105, 135, .3)',
color: 'white',
height: 48,
padding: '0 30px',
});
export default function StyledComponents() {
return <MyButton>Styled Components</MyButton>;
}
Higher-order component API
import React from 'react';
import PropTypes from 'prop-types';
import { withStyles } from '@material-ui/core/styles';
import Button from '@material-ui/core/Button';
const styles = {
root: {
background: 'linear-gradient(45deg, #FE6B8B 30%, #FF8E53 90%)',
border: 0,
borderRadius: 3,
boxShadow: '0 3px 5px 2px rgba(255, 105, 135, .3)',
color: 'white',
height: 48,
padding: '0 30px',
},
};
function HigherOrderComponent(props) {
const { classes } = props;
return <Button className={classes.root}>Higher-order component</Button>;
}
HigherOrderComponent.propTypes = {
classes: PropTypes.object.isRequired,
};
export default withStyles(styles)(HigherOrderComponent);
theme
styles는 컴포넌트의 스타일을 적용하는데 사용하고 theme은 전체적인 스타일을 적용하는데 사용한다.
테마를 사용자 정의하고 테마를 삽입하기 위해서는 ThemeProvider를 이용한다. 이것은 선택사항이고 Material-UI 구성 요소는 기본 테마와 함께 제공된다.
아래의 코드에서 CustomCheckbox에서 theme을 이용할 수 있다.
import React from 'react';
import Checkbox from '@material-ui/core/Checkbox';
import { createTheme, makeStyles, ThemeProvider } from '@material-ui/core/styles';
import { orange } from '@material-ui/core/colors';
const useStyles = makeStyles((theme) => ({
root: {
color: theme.status.danger,
'&$checked': {
color: theme.status.danger,
},
},
checked: {},
}));
function CustomCheckbox() {
const classes = useStyles();
return (
<Checkbox
defaultChecked
classes={{
root: classes.root,
checked: classes.checked,
}}
/>
);
}
const theme = createTheme({
status: {
danger: orange[500],
},
});
export default function CustomStyles() {
return (
<ThemeProvider theme={theme}>
<CustomCheckbox />
</ThemeProvider>
);
}
반응형
'Front-end > Material-UI' 카테고리의 다른 글
[Material-UI] 기초(2) - 컴포넌트 레이아웃(Container, Grid) (1) | 2021.09.08 |
---|---|
[Material-UI] 기초(1) - 설치 및 시작하기 (0) | 2021.09.08 |
Comments