focus 스타일 다듬어보기
#Design, #Polishing· 2024. 11. 15
focus 스타일 다듬어보기
#Design, #Polishing· 2024. 11. 15
*디자이너 입장에서 작성하는거라 틀린 내용이 있을 수 있습니다. 감안하고 봐주세요.
*디자이너 입장에서 작성하는거라 틀린 내용이 있을 수 있습니다. 감안하고 봐주세요.
Framer는 시맨틱한 HTML 태그, <image/>
대체 텍스트, Tab 순서, Aria label
같은 기본적인 접근성을 챙길 수 있는 기능을 제공합니다. 다만 아주 기초적인 형태로만 제공하고 살짝 아쉬운 부분이 있어서, 디자이너가 제일 쉽게 접근할 수 있는 focus 스타일에 대해서 다뤄보려고 합니다. 기본적인 CSS 지식만 있어도 쉽게 적용할 수 있습니다.
Framer는 시맨틱한 HTML 태그, <image/>
대체 텍스트, Tab 순서, Aria label
같은 기본적인 접근성을 챙길 수 있는 기능을 제공합니다. 다만 아주 기초적인 형태로만 제공하고 살짝 아쉬운 부분이 있어서, 디자이너가 제일 쉽게 접근할 수 있는 focus 스타일에 대해서 다뤄보려고 합니다. 기본적인 CSS 지식만 있어도 쉽게 적용할 수 있습니다.
Framer의 focus 스타일은 웹 기본 스타일이 사용됩니다. 나쁘지 않지만 개인적으로 약간 투박한 느낌이 들어서 마음에 들지 않았습니다. 좀 더 UI 톤에 맞는 스타일로 구성해보고 싶었습니다.
Framer의 focus 스타일은 웹 기본 스타일이 사용됩니다. 나쁘지 않지만 개인적으로 약간 투박한 느낌이 들어서 마음에 들지 않았습니다. 좀 더 UI 톤에 맞는 스타일로 구성해보고 싶었습니다.
Button XM
Button PQ
Button XJ
Tab
또는 Shift
+ Tab
을 눌러서 focus를 확인하세요.
Tab
또는 Shift
+ Tab
을 눌러서 focus를 확인하세요.
우선 어떤 형태로 스타일이 적용되어있는지 이해할 필요가 있습니다. 사용하는 브라우저의 DevTools를 열어서 <a/>
<button/>
같은 상호작용 가능한 요소를 선택한 뒤 스타일을 확인합니다.
우선 어떤 형태로 스타일이 적용되어있는지 이해할 필요가 있습니다. 사용하는 브라우저의 DevTools를 열어서 <a/>
<button/>
같은 상호작용 가능한 요소를 선택한 뒤 스타일을 확인합니다.
&:focus-visible {
outline: -webkit-focus-ring-color auto 1px; /* 포커스시 외각선 색상과 굵기입니다. */
outline-offset: 1px; /* 요소의 바깥 외각으로 1px 간격을 갖게 됩니다. */
}
outline
이 사용되었다고 해서 반드시 동일하게 스타일링할 필요는 없습니다. 개인적으로 요소 외각선을 만들때 섬세한 표현을 위해서 box-shadow
사용을 선호합니다.
outline
이 사용되었다고 해서 반드시 동일하게 스타일링할 필요는 없습니다. 개인적으로 요소 외각선을 만들때 섬세한 표현을 위해서 box-shadow
사용을 선호합니다.
보통 outline
border
box-shadow
가 자주 비교되는데 디자이너로서 보면 차이가 있습니다. outline
요소를 강조하기 위한 속성입니다. focus 같은 표현을 하는데 적합하고, outline-width
가 실제 레이아웃에 영향을 주지 않습니다. 반면 border
는 상하좌우, 점선 같은 스타일링이 가능하지만 border-width
가 레이아웃에 영향을 주기 때문에 외각선으로 사용하기에는 적합하지 않습니다.
보통 outline
border
box-shadow
가 자주 비교되는데 디자이너로서 보면 차이가 있습니다. outline
요소를 강조하기 위한 속성입니다. focus 같은 표현을 하는데 적합하고, outline-width
가 실제 레이아웃에 영향을 주지 않습니다. 반면 border
는 상하좌우, 점선 같은 스타일링이 가능하지만 border-width
가 레이아웃에 영향을 주기 때문에 외각선으로 사용하기에는 적합하지 않습니다.
그런면에서 box-shadow
는 사이즈와 x, y offset이 레이아웃에 영향을 주지 않고, 표현에 중첩이 가능해서 조금 더 섬세하게 UI를 다듬어볼 수 있습니다.
그런면에서 box-shadow
는 사이즈와 x, y offset이 레이아웃에 영향을 주지 않고, 표현에 중첩이 가능해서 조금 더 섬세하게 UI를 다듬어볼 수 있습니다.
&:focus-visible {
outline: none;
border-radius: 3px;
box-shadow: 0 0 0 2px rgba(255, 255, 255), 0 0 0 4px rgba(26, 26, 26), 0 0 0 6px rgba(26, 26, 26, .06);
}
outline-offset
처럼 요소와 focus 외각선에 약간의 간격을 주기 위해서 box-shadow
로 흰색 영역을 잡아준 뒤 외각선 표현을 위한 스타일을 그려줍니다.
outline-offset
처럼 요소와 focus 외각선에 약간의 간격을 주기 위해서 box-shadow
로 흰색 영역을 잡아준 뒤 외각선 표현을 위한 스타일을 그려줍니다.
Tab
또는 Shift
+ Tab
을 눌러서 focus를 확인하세요.
Tab
또는 Shift
+ Tab
을 눌러서 focus를 확인하세요.
Framer는 상호작용 가능한 요소를 알아서 추적해 적용해주지만, 튜닝을 하거나 외부 컴포넌트를 Remix해서 사용하는 경우 제대로 focus가 되지 않는 경우가 있습니다. 이런 경우 focus-within
같은 속성을 사용해서 자식 요소의 focus 상태를 추적하거나, Component className
을 직접 지정해서 focus 스타일을 강제로 주입할 수 있습니다.
Framer는 상호작용 가능한 요소를 알아서 추적해 적용해주지만, 튜닝을 하거나 외부 컴포넌트를 Remix해서 사용하는 경우 제대로 focus가 되지 않는 경우가 있습니다. 이런 경우 focus-within
같은 속성을 사용해서 자식 요소의 focus 상태를 추적하거나, Component className
을 직접 지정해서 focus 스타일을 강제로 주입할 수 있습니다.
/* 부모 요소에 focus 스타일이 표현됩니다. */
&:focus-within {
/* focusStyle */
}
Framer에서 직접 className을 직접 지정할 수 있는 방법은 아래와 같습니다.
Framer에서 직접 className을 직접 지정할 수 있는 방법은 아래와 같습니다.
// className이 있는 경우 앞에 띄어쓰기를 해야 선택자를 정확하게 줄 수 있음
import type { ComponentType } from "react";
export function withClass(Component): ComponentType {
return (props) => {
props.className += " addClassName";
return <Component {...props} />;
};
}