반응형
색상 테마를 만들 수 있는 vue-styled-components 사용법에 대해 알아보겠습니다.
(vue 2 버전, vue-styled-components 1.6.0 버전 사용)
1. vue-styled-components 공식 문서
GitHub : https://github.com/styled-components/vue-styled-components
2. javascript 파일
- styled 폴더를 따로 만들어서 vue syled components를 구현할 파일을 만들었습니다.
import styled, { css } from "vue-styled-components";
export const BoxBackground = styled("div")`
${props =>
props.theme === "THEME-RED" &&
css`
background-color: red;
`}
${props =>
props.theme === "THEME-PINK" &&
css`
background-color: pink;
`}
`;
export const SmallBtn = styled("li")`
${props =>
props.theme === "THEME-RED" &&
css`
color: white;
background-color: none;
&:first-child {
color: black;
background-color: red;
&:hover {
background-color: rgb(255, 175, 175);
}
}
&:hover,
&:active {
background-color: rgb(255, 175, 175);
}
`}
${props =>
props.theme === "THEME-PINK" &&
css`
color: white;
background-color: none;
&:first-child {
color: white;
background-color: pink;
&:hover {
background-color: rgb(252, 167, 255);
}
}
&:hover,
&:active {
background-color: rgb(252, 167, 255);
}
`}
`;
- props로 theme 정보를 받아 각 테마 별로 다른 style을 적용했습니다.
- 각 컴포넌트가 어떤 태그 역할을 할 것인지 "div", "li" 등으로 명시합니다.
- 위 코드는 THEME-RED와 THEME-PINK로 나누어 각 테마에 맞게 스타일을 적용했습니다.
- 저는 scss를 사용하고 있어서 &를 이용하여 first-child, hover, active 등의 색상도 구현했습니다.
3. vue 파일
- .vue 파일 내부 javascript 코드
<script>
import { BoxBackground, SmallBtn } from "styled/sample";
export default {
components: { BoxBackground, SmallBtn }
};
</script>
- .vue 파일 내부 HTML 코드
<template>
<div id="main-component">
<BoxBackground>
<div> ... </div>
<ul>
<SmallBtn>버튼1</SmallBtn>
<SmallBtn>버튼2</SmallBtn>
<SmallBtn>버튼3</SmallBtn>
</ul>
</BoxBackground>
<div>
</template>
- BoxBackground는 div와 같고, 위에서 정의한 대로 스타일이 적용됩니다.
- SmallBtn은 li와 같고, BoxBackground와 같은 원리로 스타일이 적용됩니다.
- 이처럼 여러 테마를 적용하여 다른 색상의 테마를 구현할 수 있습니다.
이상으로 vue-styled-components 사용법에 대해 알아보았습니다.
반응형
'Web Developer's Story > VUE.js' 카테고리의 다른 글
[Vue.js] vue3-cookies 쿠키 저장, 사용 및 삭제 하는 법 (2) | 2024.09.02 |
---|---|
[Vue.js] vue3 cryptoJS sha256 비밀번호 암호화, 정규식 조건 설정 (3) | 2024.08.28 |
[Vue.js] 파일 Drag & Drop 업로드 기능 구현하기 (vue2-dropzone) (0) | 2022.12.01 |
[Vue.js] vue-carousel 사용법 및 navigation custom (0) | 2022.11.24 |
[Vue.js] transition-group 양방향 slide navigation 구현 (2) | 2022.10.05 |