개발/CSS

[CSS/웹접근성] tab key로 button 태그에 접근했을 때 focus 색상 변경하기 (초점, 포커스링의 개념과 중요성)

hayeonn 2023. 4. 4. 20:27
반응형

리액트 프로젝트를 하면서 웹접근성에 맞게 리팩토링을 진행하고 있다.

마우스 없이 tab key로도 동작이 되도록 다시 코드를 수정하고 있던 도중 문제를 발견했다!

 

바로.. 등록버튼의 색상이 포커스됐을 때 색상과 비슷해서 티가 안난다는 것..

 

뭔가 커지긴하는데 티가 안난다. 포커스가 잘 되는지 마는지 인식이 안된다. 

그래서 focus 됐을 때 색상을 변경해줘야 한다고 생각이 들었다!

팀원들에게 조언을 구한 후 색상을 변경하자는 결론에 도달했고, 자료를 찾다가 여러가지 방법을 발견했다.

이 방법을 정리하기 전에 초점, 포커스링의 개념과 중요성을 알아야 한다.

 

초점 / 포커스링의 개념과 중요성

1. 초점의 개념

일상 속에서 우리는 무언가 집중해서 보거나 일을 할 때 초점이라는 단어를 쓴다. 컴퓨터에서는 키보드가 요소를 가리키는 것을 초점이라고 한다.

 

2. 포커스링의 개념

눈으로 웹페이지를 탐색하는 키보드 사용자의 경우 포커스링을 통해 키보드가 어떤 요소를 보고 가리키는지 알 수 있으며 원하는 곳에 포커스링이 나타났을 때 enter 키를 눌러 요소를 클릭 가능하고 어떤 동작이 발생하는지 알 수 있다.

마우스를 사용하기 힘든 사용자들에게 가장 큰 도움을 주지만 저시력 사용자가 키보드 사용 시 요소를 탐색하는데도 도움을 준다.

포커스링은 CSS 가상 선택자 중 하나인 :focus 를 통해 보편적으로 제공할 수 있으며 파이어폭스의 경우 :-moz-focusging 선택자를 통해 제공이 가능하다. 포커스링은 최소 2px 정도의 두껍고 대비가 높은 색의 실선을 사용한 테두리를 사용하거나 초점을 받은 요소의 색상을 눈에 잘 띄도록 바꿔 가시성을 향상 시키고 접근성을 높일 수 있다.

 

 

포커스링 디자인 방법 및 고려 사항

1. outline 속성

보편적인 방법으로 모든 브라우저에서 무리 없이 동일한 디자인을 제공한다.

border가 제공된 요소의 디자인을 변경하지 않고 동시에 사용할 수 있다.

하지만 border-radius나 clip-path 등 요소의 모양을 변형한 요소에 대응할 수 없다.

.button_writeButton:focus {
  outline: 2px solid #1c315e;
}

 

2. border 속성

outline과 유사하지만 테두리 속성이라 기존에 있던 테두리를 대체한다.

border-radius 등 형태를 변환하는 속성과 호환되어 형태에 맞게 제공할 수 있다.

디자인상 테두리가 없는 링크(a) 요소에 사용할 때 적합하다.

.button_writeButton:focus {
  outline: none;
  border: 2px solid #88dfff;
}

 

3. box-shadow 

border와 시각적 비슷한 효과를 제공하며 한 번에 여러 겹의 색상을 사용할 수 있다.

border, outline과 동시에 사용이 가능하다.

반면 border와 같이 한 면의 색상을 따로 주는 등 디자인은 어렵고 실선을 제외한 border, outline에서 제공하는 점선(dotted), 마루형 선(ridge), 대시 선(dashed) 등 다양한 선 디자인을 구현하기 어렵다.

또, CSS3 속성이라 구형 IE에서 작동하지 않는 점을 유의해야 한다.

.button_writeButton:focus {
  outline: none;
  box-shadow: 0 0 0 1px #008, 0 0 0 2px #70a;
}

 

이런 3가지 방법 중에 나는 1번 outline을 바꾸는 방법을 선택했다.

 

outline을 2px을 줘서 tab key로 등록 버튼에 접근했을 때 시각적으로 더 잘 보이도록 css 코드를 수정했다.

좀 더 눈에 띄게 보색으로 바꿀까 하다가.. 너무 눈에 튀는 것 같아서 선택되었다는 것 정도로만 보이게 하기 위해서 진한색으로 선택했다.

그래도 처음보단 더 눈에 띄도록 바뀐 것 같다!

 

처음에는 (당연히 될 것이라고 생각했는데) 버튼 태그에 포커스 주는 법이 잘 안되어서 button → input 으로 변경 후 타입을 button으로 설정해주려고 했는데 버튼 태그에도 포커스를 직접 주는 방법이 있어서 글을 작성했다. 

구글링을 했을 때 생각보다 input 요소에 포커스를 주는 방법은 많지만 버튼 태그는 없어서 찾기 힘들었던 것 같다.

다음번에도 포커스 색상과 비슷할 때 이 방법을 이용해야겠다.