상황: 소속 팀에 키오스크의 장애인 차별 금지법 적용으로 인해 현재 키오스크의 일반 모드와 접근 모드로 나누는 모듈이 필요
목적 : scss를 테마화하여 저시력모드와 일반모드를 나누어 적용
과정 : 하여 sfc(싱글 파일 컴포넌트)되어있는 vue의 scss관련 스크립트를 걷어낼 목적
모두 별개의 폴더 내 별도의 scss로 분리하여 변수화 시켜 테마를 적용
- 테마를 몇 개로 지정하는 지
- 일반 테마와 저시력 테마로 나뉨- 사용자가 선택 할 수 있어야하는지
- 사용자가 키오스크에 접근하여 직접 테마를 변경할 수 있어야함
- 최상단 html에 클래스 부여 시 테마 맞춰 일괄 변경 가능- 테마화 하려는 단위가 무엇이 있는지
- 기본 컬러, 타이포 그래피, 이미지(svg로 되어있는 아이콘 등), 컴포넌트(인풋, 탭, 버튼 등)
테마화 참고 자료
display
list-style
position
float
clear
width / height
padding / margin
border / background
color / font
text-decoration
text-align / vertical-align
white-space
other text
content
아래와 같이 src 내 scss 폴더에 각각 용도별 scss 스타일 그리고 변수 정의
-main.ts 일부
const mode = useModeStore();
mode.$subscribe((mutation) => {
const isLowVision = mutation.events.target.isLowVision as boolean;
const head = document.querySelector("head") as HTMLHeadElement;
const existingLink = document.querySelector(
"[rel=stylesheet][href*='low-vision']"
) as HTMLLinkElement;
if (isLowVision) {
if (!existingLink) {
const link = document.createElement("link");
link.setAttribute("rel", "stylesheet");
link.setAttribute("type", "text/css");
link.setAttribute("href", "src/scss/themes/low-vision.scss");
head.appendChild(link);
}
} else {
if (existingLink) {
head.removeChild(existingLink);
}
}
});
해당 액션에 따라 스타일을 동적으로 관리하여 모드 별 스타일 테마를 달리 적용하도록 할 수 있음
끝