focus-visible()
포커스 비저블(:focus-visible) 상태 믹스인
용도
:focus-visible 가상 클래스를 사용해 키보드 포커스와 마우스 포커스 상태를 다르게 처리할 때 사용합니다.
사용에 앞서 :focus-visible 가상 클래스 브라우저 호환성 확인합니다. 모든 브라우저에서 호환되도록 하려면 폴리필 라이브러리 focus-visible.js를 사용해야 합니다.
사용법
focus-visible()
믹스인을 호출합니다. 색상과 테두리 두께 값를 옵션으로 전달할 수 있습니다.
focus-visible($color:color, $thickness:number)
.focusVisible {
@include focus-visible();
}
매개변수(parameter)
유형(type)
필수(required)
기본 값(default)
$color
color
get-color(state-focus)
$thickness
number
3px
위 예시 코드는 아래의 CSS로 컴파일 되어 출력됩니다.
.focusVisible:focus {
outline: none;
box-shadow: 0 0 0 3px rgba(24, 112, 212, 0.7);
}
.focusVisible:focus:not(:focus-visible) {
outline: none;
box-shadow: none;
}
.focusVisible:focus-visible {
outline: none;
box-shadow: 0 0 0 3px rgba(24, 112, 212, 0.7);
}
포커스 비저블 상태의 색과 두께를 설정
색상과 테두리 두께 값을 믹스인 호출 과정에 전달합니다.
* {
@include focus-visible(rgba(#20bebe, 0.655), rem(4));
}
위 예시 코드는 아래의 CSS로 컴파일 되어 출력됩니다.
*:focus {
outline: none;
box-shadow: 0 0 0 0.25rem rgba(32, 190, 190, 0.655);
}
*:focus:not(:focus-visible) {
outline: none;
box-shadow: none;
}
*:focus-visible {
outline: none;
box-shadow: 0 0 0 0.25rem rgba(32, 190, 190, 0.655);
}
로직
focus-visible()
믹스인은 다음의 로직에 의해 작성되었습니다.
@mixin focus-visible(
$color: rgba(alt-color(state-focus, #1870d4), 0.7),
$thickness: 3px
) {
&:focus {
outline: none;
box-shadow: 0 0 0 $thickness $color;
@content;
}
&:focus:not(:focus-visible) {
outline: none;
box-shadow: none;
}
&:focus-visible {
outline: none;
box-shadow: 0 0 0 $thickness $color;
@content;
}
}
전달 받은 값이 없을 경우, 기본 값(색상, 테두리 두께)을 사용
전달 받은 값이 있을 경우 색상, 테두리 두께 값을 설정하여 코드 출력
참고
믹스인에 사용된 Sass의 빌트인 모듈은 다음과 같습니다.
Last updated
Was this helpful?