2020/09/29 - [Web프론트엔드/리액트] - [React] 리액트 기초 관련 글 정리 (개발환경, 데이터, 컴포넌트 등)
2020/10/06 - [Web프론트엔드/리액트] - [React] 재활용 가능한 기본적인 Input 컴포넌트
2020/10/06 - [Web프론트엔드/리액트] - [React] 테스트 도구인 스토리북(storybook)을 사용해보자
2020/10/06 - [Web프론트엔드/리액트] - [React] 스토리북에 다양한 확장 도구(Addon) 추가
2020/10/07 - [Web프론트엔드/리액트] - [React] 컴포넌트에 스타일을 적용해보자 ① Text
2020/10/08 - [Web프론트엔드/리액트] - [React] 컴포넌트에 스타일을 적용해보자 ② Button
2020/10/08 - [Web프론트엔드/리액트] - [React] 컴포넌트에 스타일을 적용해보자 ③ Checkbox
이번에는 스타일 관련 마지막 포스팅으로, media 속성을 이용한 반응형 스타일입니다. 반응형이라고 거창하게 적었지만, 디바이스의 해상도를 보고 스타일을 별도로 지정하는 정도입니다. 그럼 지난 시간에 작성했던 defaultStyles.js 을 열어서 하기와 같이 수정을 합니다. 잘 모르시는 분은 이 링크를 꼭 확인해주세요.
// 디바이스 최소 가로 사이즈
const DEVICE_MIN_WIDTH = {
Desktop: 1281,
Laptop: 1025,
Tablet: 768,
Mobile_Landscape: 481,
Mobile_Portrait: 320,
};
// media속성으로 사이즈 정의
const screen = {
desktop: `@media (min-width: ${DEVICE_MIN_WIDTH["Desktop"]}px)`,
laptop: `@media (min-width: ${DEVICE_MIN_WIDTH["Laptop"]}px) and
(max-width: ${DEVICE_MIN_WIDTH["Desktop"] - 1}px)`,
tablet: `@media (min-width: ${DEVICE_MIN_WIDTH["Tablet"]}px) and
(max-width: ${DEVICE_MIN_WIDTH["Laptop"] - 1}px)`,
mobile_Landscape: `@media (min-width: ${DEVICE_MIN_WIDTH["Mobile_Landscape"]}px) and
(max-width: ${DEVICE_MIN_WIDTH["Tablet"] - 1}px)`,
mobile_portrait: `@media (min-width: ${DEVICE_MIN_WIDTH["Mobile_Portrait"]}px) and
(max-width: ${DEVICE_MIN_WIDTH["Mobile_Landscape"] - 1}px)`,
large: `@media (min-width: ${DEVICE_MIN_WIDTH["laptop"]}px)`,
small: `@media (max-width: ${DEVICE_MIN_WIDTH["Tablet"]}px)`,
print: "@media print",
};
// 기본 스타일 수치 정의
export default {
size: {
xsmall: 8,
small: 12,
medium: 16,
large: 20,
xlarge: 24,
},
color: {
default: "#333333",
error: "#FF0000",
white: "#FFFFFF",
black: "#000000",
gray: "#CCCCCC",
primary: "#FF5A5F",
secondary: "#00A699",
},
screen, // 디바이스 사이즈
};
디바이스 사이즈를 정의하고 media 속성으로 원하는 스크린 사이즈를 골라냈습니다. large는 laptop사이즈 이상 small는 tablet사이즈 이하입니다. 그리고 맨 아래에 있는 screen이라는 변수로 export 했습니다. 그럼 스타일 관련 포스팅의 두 번째인 Button 컴포넌트로 수정을 해보겠습니다. 그럼 다시 Button.jsx 열고 수정해보시죠!
// ..\test_project\src\components\Button.jsx
import React, { PureComponent } from "react";
import PropTypes from "prop-types";
import withStyles, { css } from "../styles/withStyles";
class Button extends PureComponent {
...
// withStyles()함수를 사용해 defaultStyles.js 내용으로 매칭
export default withStyles(({ color, size, screen }) => ({
default: {
color: color.default,
borderColor: color.black,
backgroundColor: color.white,
fontSize: size.medium,
padding: 5,
border: 2,
borderRadius: 5,
borderStyle: "solid",
cursor: "pointer",
[screen.small]: {
width: "100%",
},
},
...
}))(Button);
나머지 부분은 같고 위에서 추가한 screen변수가 추가되어, screen.small 사이즈이면 버튼을 화면에 꽉 채워줍니다. 실제로 많은 웹페이지에서 사용하는 방법이지요. 브라우저 창의 크기를 조절하면 동적으로 반영이 될 것입니다.
지금까지 배운 것처럼 react-with-styles 라이브러리를 사용하면 리액트의 장점인 컴포넌트에 집중한 개발을 진행할 수 있습니다.
네 번에 걸쳐 배워본 스타일 컴포넌트 관련 글이 마음에 드셨는지 모르겠습니다^^?
참 마음에 드셔야죠!
2020/10/09 - [Web프론트엔드/리액트] - [React] 하이오더(HoC) 기능으로 컴포넌트 확장하기 ①
'웹 프론트엔드 > React 리액트 (기초)' 카테고리의 다른 글
[React] 하이오더(HoC) 기능으로 컴포넌트 확장하기 ② (0) | 2020.10.12 |
---|---|
[React] 하이오더(HoC) 기능으로 컴포넌트 확장하기 ① (0) | 2020.10.09 |
[React] 컴포넌트에 스타일을 적용해보자 ③ Checkbox (0) | 2020.10.08 |
[React] 컴포넌트에 스타일을 적용해보자 ② Button (0) | 2020.10.08 |
[React] 컴포넌트에 스타일을 적용해보자 ① Text (0) | 2020.10.07 |
댓글