>웹 프론트엔드 >CSS 튜토리얼 >시각적 미학에 영향을 주지 않고 키보드 전용 초점 스타일을 달성하는 방법은 무엇입니까?

시각적 미학에 영향을 주지 않고 키보드 전용 초점 스타일을 달성하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-10-30 02:05:02503검색

How to Achieve Keyboard-Only Focus Styles Without Affecting Visual Aesthetics?

키보드 전용 포커스 스타일 달성

미학적으로 활성 상태와 충돌하므로 불필요한 경우 :focus를 비활성화하는 것을 목표로 합니다. 그러나 키보드 사용자에 대한 포커스 스타일을 유지하려고 합니다. 이 문제를 해결하기 위한 포괄적인 접근 방식은 다음과 같습니다.

:focus-visible 솔루션

포커스에 도움이 될 때 포커스를 나타내는 유사 클래스인 :focus-visible 사용을 고려해보세요. 사용자(예: 키보드 상호 작용 중) 이제 최신 브라우저는 이 유사 클래스를 지원합니다.

:focus-visible을 사용하면 조건에 따라 포커스 스타일을 적용할 수 있습니다.

<code class="css">button:focus-visible {
  /* remove default focus style */
  outline: none;
  /* custom focus styles */
  box-shadow: 0 0 2px 2px #51a7e8;
  color: lime;
}</code>

브라우저 호환성

:focus-visible을 지원하지 않는 브라우저에서는 여전히 기본 포커스 링이 표시될 수 있습니다. 일관된 동작을 보장하려면 대체 전략을 사용하세요.

<code class="css">button:focus {
  outline: none;
  background: #ffdd00; /* gold */
}

button:focus:not(:focus-visible) {
  background: white; /* undo gold */
}</code>

키보드 전용 포커스 스타일

키보드 전용 포커스 스타일 솔루션의 경우 다음 접근 방식을 사용하는 것이 좋습니다.

<code class="css">button {
  -moz-appearance: none;
  -webkit-appearance: none;
  background: none;
  border: none;
  outline: none;
  font-size: inherit;
}

.btn {
  all: initial;
  margin: 1em;
  display: inline-block; 
}

.btn__content {
  background: orange;
  padding: 1em;
  cursor: pointer;
  display: inline-block;
}


/* Fixing the Safari bug for `<button>`s overflow */
.btn__content {
    position: relative;
}

/* All the states on the inner element */
.btn:hover > .btn__content  {
    background: salmon;
}

.btn:active > .btn__content  {
    background: darkorange;
}

.btn:focus > .btn__content  {
    box-shadow: 0 0 2px 2px #51a7e8;
    color: lime;
}

/* Removing default outline only after we've added our custom one */
.btn:focus,
.btn__content:focus {
    outline: none;
}</code>

이 방법은 각 버튼/링크/등 내의 내부 요소()를 사용합니다. 이 내부 요소에 대한 tabindex를 설정합니다. 포커스 스타일은 내부 요소에만 적용되므로 키보드 포커스에만 표시됩니다.

위 내용은 시각적 미학에 영향을 주지 않고 키보드 전용 초점 스타일을 달성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.