Chrome의 CSS 맞춤 스타일 버튼에서 파란색 테두리 제거


810

웹 페이지에서 작업 중이며 사용자 정의 스타일 <button>태그가 필요합니다. CSS로 다음과 같이 말했습니다 border: none. 이제 사파리에서 완벽하게 작동하지만 크롬에서는 버튼 중 하나를 클릭하면 주위에 성가신 파란색 테두리가 나타납니다. 나는 생각 button:active { outline: none }하거나 button:focus { outline:none }작동하지만 둘 다하지 않습니다. 어떤 아이디어?

이것은 클릭하기 전의 모습이며 클릭 후 여전히 보이기를 원하는 방식입니다.

그리고 이것은 내가 말하는 경계입니다.

여기에 이미지 설명을 입력하십시오

내 CSS는 다음과 같습니다.

button.launch {
    background-color: #F9A300;
    border: none;
    height: 40px;
    padding: 5px 15px;
    color: #ffffff;
    font-size: 16px;
    font-weight: 300;
    margin-top: 10px;
    margin-right: 10px;
}

button.launch:hover {
    cursor: pointer;
    background-color: #FABD44;
}

button.change {
    background-color: #F88F00;
    border: none;
    height: 40px;
    padding: 5px 15px;
    color: #ffffff;
    font-size: 16px;
    font-weight: 300;
    margin-top: 10px;
    margin-right: 10px;
}

button.change:hover {
    cursor: pointer;
    background-color: #F89900;
}

button:active {
    outline: none;
    border: none;
}

1
나 한테 괜찮아 보여? jsbin.com/oSAdovun/1/edit
davidpauljunior

왜 데모에서 작동하는지 잘 모르겠습니다. 여기서 수행하고 있습니다 : jsfiddle.net/NgL8H @davidpauljunior
eshellborn


21
당신은 개요를 완전히 제거해서는 안됩니다-장애가있는 사람들과 키보드를 빨리 사용하기 때문에 저와 같은 사람들은 탐색해야합니다. 개요를 원하는 스타일로 다시 스타일링하는 것이 훨씬 좋습니다.
Chris B

3
outline: none접근성 손실을 교체 할 준비가되지 않은 경우 이와 같이 설정하지 마십시오 . 이 웹 사이트를 참조하십시오 : outlinenone.com
Flimm

답변:


1534

이렇게하면 사이트 의 액세스 가능성 이 낮아 지므로 권장하지 않습니다 . 자세한 내용은이 게시물을 참조하십시오 .

즉, 주장하면이 CSS가 작동해야합니다.

button:focus {outline:0;}

확인하거나 JSFiddle : http://jsfiddle.net/u4pXu/

또는이 스 니펫에서 :

button.launch {
background-color: #F9A300;
border: none;
height: 40px;
padding: 5px 15px;
color: #ffffff;
font-size: 16px;
font-weight: 300;
margin-top: 10px;
margin-right: 10px;
}

button.launch:hover {
cursor: pointer;
background-color: #FABD44;
}

button.launch {
background-color: #F9A300;
border: none;
height: 40px;
padding: 5px 15px;
color: #ffffff;
font-size: 16px;
font-weight: 300;
margin-top: 10px;
margin-right: 10px;
}

button.launch:hover {
cursor: pointer;
background-color: #FABD44;
}

button.change {
background-color: #F88F00;
border: none;
height: 40px;
padding: 5px 15px;
color: #ffffff;
font-size: 16px;
font-weight: 300;
margin-top: 10px;
margin-right: 10px;
}

button.change:hover {
cursor: pointer;
background-color: #F89900;
}

button:active {
outline: none;
border: none;
}

button:focus {outline:0;}
<button class="launch">Launch with these ads</button> 
<button class="change">Change</button>


49
이것이 실제로 outline: none;중요하지 않습니까?
henrywright

2
@ Henrywright 글쎄, OP는 그것을 시도했지만 그를 위해 일하지 않았다.
diosney

58
절대 이러지 마 귀하의 사소한 불만은이 문제가 발생하는 대규모 접근성 문제와 관련이 없습니다.
phazei

20
완전히 숨기지 말고 다시 스타일을 바꿔야합니다. 이 경우 button:focus{ outline-color: #A75000 }표시기를 숨기지 말고 스타일에 맞는 진한 주황색으로 변경하십시오.
cloudworks 2016 년

3
@ SeanO'Brien은 OP의 주어진 상황이 5 명의 사용자를 가진 사이트 일 수 있으며, 모든 것이 가능하다는 것을 인정했습니다. 그러나 아마도 1123 명의 사람들이 이것을지지 한 것은 아마도 이것이 주어진 상황에 맞는 일을하는 올바른 방법이라고 생각하지만 실제로는 차별적이지 않습니다.
alexrogers

296

기다림! 그 추악한 개요에 대한 이유가 있습니다!

그 추악한 파란색 윤곽선을 제거하기 전에 접근성 을 고려할 수 있습니다. 기본적으로 해당 파란색 윤곽선은 포커스 가능한 요소에 배치됩니다. 접근성 문제가있는 사용자는 해당 단추를 탭하여 해당 단추에 초점을 맞출 수 있습니다. 일부 사용자는 마우스를 사용할 수있는 운동 능력이 없으며 컴퓨터 상호 작용을 위해 키보드 (또는 다른 입력 장치) 만 사용해야합니다. 파란색 윤곽선을 제거하면 더 이상 초점이 맞춰진 요소에 대한 시각적 표시기가 없습니다. 당신이 파란색 테두리를 제거하려는 경우, 당신은 해야 버튼이 집중되는 것을 시각적으로 표시 다른 종류로 교체하십시오.

가능한 해결책 : 초점이 맞았을 때 어둡게 버튼

아래 예에서는 Chrome의 파란색 윤곽선을 사용하여 먼저 제거했습니다. button:focus { outline:0 !important; }

기본 부트 스트랩 버튼은 다음과 같이 정상적으로 나타납니다. 정상 상태의 부트 스트랩 버튼

포커스를받을 때의 버튼은 다음과 같습니다. 집중된 상태의 부트 스트랩 버튼

여기 버튼을 누를 때 여기에 이미지 설명을 입력하십시오

보시다시피 버튼이 초점을 받으면 약간 어두워집니다. 개인적으로, 버튼의 초점 상태와 버튼의 정상 상태 사이에 눈에 띄는 차이가 생기도록 초점 버튼을 더 어둡게 만드는 것이 좋습니다.

장애인 사용자만을위한 것이 아닙니다

사이트의 접근성을 높이는 것은 종종 간과되지만 웹 사이트에서보다 생산적인 환경을 만드는 데 도움이 될 수 있습니다. 키보드를 계속 사용하기 위해 키보드 명령을 사용하여 웹 사이트를 탐색하는 많은 일반 사용자가 있습니다.


40
문제는 Chrome에서 탭하는 것보다는 클릭시에도 발생합니다 (대부분의 브라우저에서 발견되는 논리적 구현). 따라서 실제로 대부분의 개발자가 Chrome을 사용 중지하기 때문에 Google은 접근성을 줄이고 있습니다 (Chrome에서) Google / Chrome과 관련된 문제를 조사 / 수정하는 데 더 많은 시간이 낭비됩니다 (비밀번호 저장, 이메일 CSS 지원)
RunLoop

3
네 맞아! 개요를 제거 할 때 접근성을 고려하려면 약간의 JavaScript가 필요합니다. paciellogroup.com/blog/2012/04/…
mems

답을 할 수있는 방식으로 주석 스타일을 지정하거나 서식을 지정할 수도 없습니다. 의견을 통해서만이 세부 수준에서 피드백을 제공하기가 어렵습니다.
A-Dubb 2016 년

@RunLoop 클릭 후 파란색 테두리를 어떻게 제거하거나 변경합니까? CSS를 통해 수행 할 수 있습니까 아니면 Javascript가 필요합니까?
Nick

이러한 문제를 가진 사람들은 단순히 vimium-FF을 사용할 수 있습니다
huksay yukashima

60

모든 것을 선택하고 outline : none을 모든 항목에 적용하여 페이지의 모든 태그에서 개요를 제거합니다.)

*:focus {outline:none}

bagofcole이 언급했듯이! important를 추가해야 할 수도 있으므로 스타일은 다음과 같습니다.

*:focus {outline:none !important}

6
이러지 마십시오. 키보드로 페이지를 탐색하는 사용자는 현재 초점이 맞춰진 요소를 볼 수 없습니다. 클릭 이벤트가 마우스에서 발생하는 경우 윤곽선을 숨기지 않고 요소를 흐리게합니다.
joepio

기본적으로 또 다른 초점 스타일링이 있습니다.
Arziel

46

이 문제의 나의 경우에 나는 지정해야했다 box-shadow: none

button:focus {
  outline:none;
  box-shadow: none;
}

4
게시물 주셔서 감사합니다! 내 경우에는 "box-shadow"속성이 핵심이었습니다.
Nightking

1
이것은 나에게도 같은 문제였습니다. 그것은 관련이 없지만 Ubuntu 17.10의 Chrome에서 Roots 'Sage Theme를 사용하고있었습니다.
스펜서 힐

1
이후에만 작동box-shadow
sura2k

1
! 내가 추가 한 일에하는 것이 중요합니다, 아마도 부트 스트랩이 곳의 특정 정의가
webMan

1
솔루션을 게시 해 주셔서 감사합니다. 건배
theITvideos

44

!important더 나은 결과를 얻으려면 선언을 잊지 마십시오

button:focus {outline:0 !important;}

! important 속성이있는 규칙은 규칙이 CSS 문서에서 나타나는 위치에 관계없이 항상 적용됩니다.


14
"더 나은 결과를 위해"? 중요한 일을 설명해 주시겠습니까?
Popnoodles

5
그러나 그것이 무엇을 설명 할 수 있습니까? "그 이유가 존재한다"는 이유가 무엇인지 이유를 모르는 사람들에게는 설명하지 않습니다.
Popnoodles

48
! 중요한 것은 드물게 사용되어야하며 이후의 규칙으로 무언가를 덮어 쓰지 않아야합니다. 이전 규칙을 덮어 쓰는 경우 올바른 선택기로 요소를 타겟팅해야합니다.
Popnoodles 2016 년

24
! important의 사용법은 거의 정당화되지 않습니다. CSS 선택기의 범위를 항상 더 이해하기 쉬운 방식으로 지정해야하며, "더 나은 결과"를 제공하기 때문에! important를 사용해서는 안됩니다.
Ronen Cypis

5
이러지 마십시오. 기술적으로 이것은 OP의 질문에 대답하지만 초점 위치의 모든 표시를 나타내는 outline:0 !important것은 나쁜 UX와 나쁜 개발자 연습입니다. 이 작업을 수행하는 경우 요소의 배경색 변경과 같이 초점 위치를 나타내는 다른 작업을 수행하고 있는지 확인하십시오.
cloudworks 2016 년

26

제거 outline접근성에 대한 끔찍한입니다! 사용자 가 키보드를 사용하려는 경우에만 초점 링이 표시되는 것이 이상적 입니다.

: focus-visible을 사용하십시오 . 현재 CSS를 사용하여 키보드 전용 포커스를 스타일링하기위한 W3C 제안이며 Firefox ( caniuse ) 에서 지원됩니다 . 다른 주요 브라우저에서 지원할 때까지이 강력한 폴리 필을 사용할 수 있습니다 .

/* Remove outline for non-keyboard :focus */
*:focus:not(.focus-visible) {
  outline: none;
}

/* Optional: Customize .focus-visible */
.focus-visible {
  outline-color: lightgreen;
}

더 많은 정보가 필요한 경우를 대비 하여 더 자세한 게시물을 작성했습니다 .


1
알았지, AFAIK 그것은 일 필요는 없습니다 outline상태가 다른 수단 등을 통하여 명확하게 표시되었을 초점 다음과 같은 길이로, 등 border, background-color, box-shadow
월 Örlygsson

2
최고의 답변! 귀하의 게시물은 읽을 가치가 있습니다 (그리고 지금 블로그의 나머지 부분을보고 있습니다) 초점이 보이는 npm 패키지는 실제로 현재 위치에 있습니다.
FelDev

1
이것은 확실히 최고의 솔루션입니다. 몇 줄의 코드만으로 클릭 할 때 성가신 파란색 테두리를 제거하고 키보드 사용을 유지했습니다. 감사!
pesta

1
이 데이터가 맞습니까? 이 선택기는 Firefox가 아닌 Chrome에서 지원되는 것으로 보입니다. developer.mozilla.org/en-US/docs/Web/CSS/…
Kevin Suttle

Firefox에서는 선택기가이라고 불리는 것 :-moz-focusring같지만 문서의 내용과 달리 클릭과 탭 포커스를 구분하지 않습니다. 크롬에서, 지금의 당신이 작업에 대해 특정 플래그를 사용하도록 설정해야합니다
phil294

12

이것을 CSS 파일에 추가하십시오.

*{
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0) !important;
}

3
감사합니다. 작동하지만 MDN의 말 :이 기능은 비표준이며 표준 트랙이 아닙니다. 웹이있는 프로덕션 사이트에서는 사용하지 마십시오. 모든 사용자에게 적용되는 것은 아닙니다. 구현 간에는 큰 비 호환성이있을 수 있으며 향후 동작이 변경 될 수 있습니다.
Behnam Mohammadi

8

다음 중 하나를 사용하십시오.

:active {
    outline:none;
}

또는 작동하지 않는 경우 :

:active {
   outline:none !important;
}

이것은 나를 위해 작동합니다 (적어도 FF 및 Chrome). :focus상태 를 타겟팅하는 대신 상태 만 타겟팅하면 :active사용자가 링크를 클릭 할 때 브라우저에서 미적으로 눈에 띄는 강조 표시가 제거됩니다. 그러나 장애가있는 사용자가 탭을 이동하거나 탭을 이동할 때 여전히 포커스 상태를 유지합니다. 두 당사자 모두 행복합니다. :)


4
축소 된 버전 만 동일한 코드로 교체하고 확장하는 경우 왜 답변을 수정합니까? 그것은 사용자에게 더 잘 설명하지 못했습니다. 저것에 대한 답을 얻었습니까? LOL ...
chuk

3
이와 같은 StackExchange 사이트의 요점은 해당 사이트를 읽는 사람이 이해하는 데 도움이되는 답변을 얻는 것입니다. 이를 위해 간결하고 축소 된 코드를 사용한 답변은 읽기 쉬운 형식의 코드만큼 유용하지 않습니다. 답변을 더 읽기 쉽게하여 답변을 개선하는 것은 모든 사람이 사이트를 개선하는 일반적인 방법입니다.
bignose

7

이 문제의 경우 :

여기에 이미지 설명을 입력하십시오

이것을 사용하십시오 :

   *{
         -webkit-tap-highlight-color: rgba(0,0,0,0);
         -webkit-tap-highlight-color: transparent; /* For some Androids */
    }

결과:

여기에 이미지 설명을 입력하십시오


7

부트 스트랩을 사용 하고이 문제가있는 사람은 : active : focus와 : active 및 : focus를 사용하므로 다음이 필요합니다.

element:active:focus {
    outline: 0;
}

희망적으로 누군가를 알아내는 데 시간을 절약하고 그러한 간단한 일이 왜 효과가 없는지 궁금해하기 위해 내 머리를 부딪쳤다.


5

Bootstrap 4.1 및 다른 버전을 사용하는 경우 대부분의 솔루션이 작동하지 않습니다. 많은 헤드 뱅잉 후, 나는 당신이 그림자 없음 클래스 를 적용해야한다는 것을 발견했습니다 .

<button class="btn shadow-none">Bootstrap (4.1) button without shadow</button>

4

이것이 나를 위해 일한 것입니다.

button:focus {
    box-shadow:none;
}

4

Chrome 및 기타 브라우저에 대한 수정

button:focus { outline: none !important; box-shadow: none !important; }

3

파란색 테두리 문제가있는 모든 요소에 대해이 코드를 시도하십시오.

*{
outline: none;
}

또는

*{
outline-style: none;
}

3

아직 언급되지 않은 접근성 문제해결하는 또 다른 방법 은 약간의 Javascript를 사용하는 것 입니다. 크레딧은 hackernoon의 다음과 같은 통찰력있는 블로그 게시물입니다. https://hackernoon.com/removing-that-ugly-focus-ring-and-keeping-it-too-6c8727fefcd2

: 여기 방법은 정말 간단하면서도 효과적인 클래스를 추가 . 사람들이 다시 마우스로의 전환이 그런 다음 중 하나를 디스플레이에 초점 윤곽이 클래스를 사용하거나 할 수없는 경우 페이지를 탐색 (선택적으로 제거하기 위해 탭 키를 사용하여 시작할 때 .

function handleFirstTab(e) {
    if (e.keyCode === 9) { // the "I am a keyboard user" key
        document.body.classList.add('user-is-tabbing');
        window.removeEventListener('keydown', handleFirstTab);
    }
}

window.addEventListener('keydown', handleFirstTab);


2

입력에서 동일한 효과를 삭제하려면 다음 코드와 버튼을 추가하십시오.

input:focus {outline:0;}

2

모든 최신 브라우저가 지원 CSS 선택기 시작까지 : 포커스 볼을 ,
에 간단하고 아마도 가장 좋은 방법 저장 접근성 이 까다로운 포커스를 제거하는 것입니다 마우스가 사용자를 위해 그것을 저장 키보드 사용자를위한 :

1.이 작은 polyfill (약 10kb)을 사용하십시오 : https://github.com/WICG/focus-visible
2. CSS 어딘가에 다음 코드를 추가하십시오 :

.js-focus-visible :focus:not(.focus-visible) {
  outline: none;
}

css4-selector의 브라우저 지원 : 현재 초점이 매우 약합니다 :
https://caniuse.com/#search=focus-visible


2

간단히 쓰십시오 outline:none;. 의사 요소를 사용할 필요가 없습니다focus


1

이것은 Chrome 제품군의 문제이며 영원히 존재했습니다.

https://bugs.chromium.org/p/chromium/issues/detail?id=904208 버그가 발생했습니다

여기에 표시 될 수 있습니다 : 버튼과 같은 것에 테두리를 추가하자마자 https://codepen.io/anon/pen/Jedvwj 크롬이 엉망입니다. 마우스로 클릭 할 때 포커스 상태를 설정합니다.

https://github.com/wicg/focus-visible 이 수정 프로그램을 사용하는 것이 좋습니다 .

그냥 다음을 수행

npm install --save focus-visible

HTML에 스크립트를 추가하십시오.

<script src="/node_modules/focus-visible/dist/focus-visible.min.js"></script>

webpack 또는 이와 유사한 것을 사용하는 경우 기본 항목 파일로 가져 오기

import 'focus-visible/dist/focus-visible.min';

그런 다음 이것을 CSS 파일에 넣으십시오.

// hide the focus indicator if element receives focus via mouse, but show on keyboard focus (on tab).
.js-focus-visible :focus:not(.focus-visible) {
  outline: none;
}

// Define a strong focus indicator for keyboard focus.
// If you skip this then the browser's default focus indicator will display instead
// ideally use outline property for those users using windows high contrast mode
.js-focus-visible .focus-visible {
  outline: magenta auto 5px;
}

당신 단지 설정할 수 있습니다 :

button:focus {outline:0;}

그러나 많은 사용자가있는 경우 마우스를 사용할 수 없거나 키보드를 속도로 사용하려는 사용자에게는 불리합니다.


1

부트 스트랩과 같은 문제가있었습니다. 윤곽선과 상자 그림자로 해결했습니다.

.btn:focus, .btn.focus {
    outline: none !important;
    box-shadow: 0 0 0 0 rgba(0, 123, 255, 0) !important; // or none
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.