갬쿠
개미 개발
갬쿠
전체 방문자
오늘
어제
  • ALL (137)
    • React (20)
    • JS & CSS & HTML (29)
    • Algorithm (62)
    • 웹 보안 (11)
    • 달리는 까까: 쿠키런 팬게임 (10)
    • Python (0)
    • 기타 (5)
    • 비공개 플젝 (0)

블로그 메뉴

  • GitHub
  • 방명록
  • 관리자 메뉴

공지사항

인기 글

태그

  • 크롬 공룡 게임
  • useEffect
  • 게임
  • 리액트
  • Python
  • HTML
  • 백준
  • useReducer
  • JavaScript
  • 모의 해킹
  • EventListener
  • 게임 개발
  • Best of the Best
  • node.js
  • 크롬 공룡게임
  • Programmers
  • Baekjoon
  • 달리는 까까
  • useState
  • REACT
  • js
  • BEAKJOON
  • CSS
  • 객체
  • Object
  • transform
  • 쿠키런 팬게임
  • 쿠키런 모작
  • 쿠키런
  • SQL Injection

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
갬쿠

개미 개발

React

Styled component로 React Component 디자인

2023. 7. 13. 20:56

styled-component는 대표적인 CSS in JS 라이브러리다.

CSS in JS: 스타일 정의를 CSS 파일이 아니라 JS로 작성된 컴포넌트에 바로 삽입하는 기법

 

기본 문법

div, span, button 등 기본적인 HTML 엘리먼트를 스타일링 할 때는 아래와 같이 작성한다. 

const MyDiv = styled.div`
	// 어쩌고
`;

리액트 컴포넌트를 스타일링 할 때는 아래와 같이 괄호 안에 컴포넌트를 작성한다.

const StyledLink = styled(Link)`
	// 어쩌고
`;

 

가상 선택자

아래와 같이 &:로 작성한다.

const MySpan = styled.span`
	...
    &:hover {
      ...
    }
    &::after {
	  ...
  }
`;

 

다른 컴포넌트와 연결

템플릿 리터럴 문법을 사용하여 다른 컴포넌트와 연결할 수 있다. 예를 들어 나는 부모 컴포넌트에 hover 했을 때 자식 컴포넌트가 보여지게 하고 싶어서 다음과 같은 코드를 작성했다.

${ParentComponent}:hover & {
    visibility: visible;
  }

혹은 이렇게 작성할 수도 있을 것이다.

&:hover ${ChildComponent}{
  ...
  }

 

props 사용

props를 넘겨줄 수 있다. 아래는 내가 형광펜 툴을 개발하면서 작성한 코드다.

const Text = styled.span`
  background-color: ${(props) => props.color};
  margin-right: ${(props) => (props.continued ? "none" : "5px")};
  padding-right: ${(props) => (props.continued ? "5px" : "none")};
`;

아래처럼 원하는 값을 전달해주면 된다.

<Text
  color={highlighted[i]}
  continued={highlighted[i] === highlighted[i + 1]}
/>

 

attribute 삽입

고정되는 props, 다이나믹한 props, 기본 태그의 props를 전달할 수 있다. 아래는 내가 input 엘리먼트를 디자인하면서 작성한 attr 속성이다.

const EditedText = styled.input.attrs((props) => ({
  type: "text",
  placeholder: props.word,
  size: props.word.length,
}))`
	...
`;

 

as 속성

예를 들어 Button이라는 styled component를 구현했는데 같은 스타일의 a태그를 만들고 싶다면 as 속성을 사용하면 된다.

<Button as={"a"} href={"/"}>link</Button>

개발하면서 사용한 것들을 정리했는데, 계속 써보면서 새로운 내용을 발견하면 또 추가하겠다.

728x90

'React' 카테고리의 다른 글

styled component에 css animation 적용 (재생되는 텍스트 만들기)  (0) 2023.07.18
Error Boundary  (0) 2023.07.15
useState로 인스턴스 접근  (0) 2023.07.13
wavesurfer.js React에서 사용하기  (0) 2023.07.13
프로젝트 마무리: 각종 콘솔 워닝 해결  (0) 2022.09.16
    'React' 카테고리의 다른 글
    • styled component에 css animation 적용 (재생되는 텍스트 만들기)
    • Error Boundary
    • useState로 인스턴스 접근
    • wavesurfer.js React에서 사용하기
    갬쿠
    갬쿠
    보안&소프트웨어 전공 프론트엔드 개발자

    티스토리툴바