텍스트 선택 강조 표시를 비활성화하는 방법


5200

스택 오버플로 페이지 맨 위에있는 단추 (예 : 질문 , 태그 , 사용자 등) 또는 탭 처럼 작동하는 앵커 또는 사용자가 실수로 텍스트를 선택한 경우 강조 효과를 비활성화하는 CSS 표준 방법이 있습니까?

JavaScript 로이 작업을 수행 할 수 있으며 약간의 인터넷 검색으로 Mozilla 전용 -moz-user-select옵션이 생성되었습니다.

CSS를 사용하여 표준을 준수하는 방법이 있습니까? 그렇지 않은 경우 "모범 사례"접근 방식은 무엇입니까?


7
요소 마녀 내의 요소가 강조 표시를 비활성화하고 CSS에서 스타일 또는 클래스 속성으로 강조 표시를 활성화 할 수 있습니까? 즉, -webkit-user-select ect에 대한 다른 값이 있습니까? 아무것도 아닌 다른?

7
관련 : stackoverflow.com/questions/16600479/… = 일부 하위 요소 만 선택하는 방법
JK.

9
"모두 선택"(CTRL + A 및 CMD + A)을 수행해도 여전히 항목을 선택하는 일부 브라우저에는 버그가 있습니다. 이것은 투명한 선택 색상으로 싸울 수 있습니다. ::selection { background: transparent; } ::-moz-selection { background: transparent; }
DaAwesomeP

12
그냥 말할 수 있습니까? 제발 이러지 마십시오. 내 경험에 비추어 볼 때 버튼 역할을하는 텍스트를 선택하여 다른 곳에 복사하여 붙여 넣기를 원하지 않는 경우가 많습니다 . 일부 웹 개발자가 나를 위해이 기능을 의도적으로 비활성화하기 위해 나섰기 때문에 그렇게 할 수 없다는 것은 상상도 할 수없는 분노입니다. 아주 좋은 이유 가 없다면이 작업을 수행하지 마십시오 .
kajacx

3
2017 년, 그것은 사용하는 더 나은 방법입니다 postcssautoprefixer다음과 세트 브라우저 버전 postcss모두의 멋진합니다.
AmerllicA

답변:


7321

2017 년 1 월 업데이트 :

에 따르면 캔 I 사용 의는 user-select현재 인터넷 익스플로러 9 이전 버전 (그러나 슬프게도를 제외한 모든 브라우저에서 지원됩니다 여전히 공급 업체 접두사를 필요).


올바른 CSS 변형은 모두 다음과 같습니다.

.noselect {
  -webkit-touch-callout: none; /* iOS Safari */
    -webkit-user-select: none; /* Safari */
     -khtml-user-select: none; /* Konqueror HTML */
       -moz-user-select: none; /* Old versions of Firefox */
        -ms-user-select: none; /* Internet Explorer/Edge */
            user-select: none; /* Non-prefixed version, currently
                                  supported by Chrome, Edge, Opera and Firefox */
}
<p>
  Selectable text.
</p>
<p class="noselect">
  Unselectable text.
</p>


user-select(현재의 표준화 과정에 W3C의 작업 초안 ). 모든 곳에서 작동한다고 보장 할 수는 없으며 브라우저마다 구현에 차이가있을 수 있으며 향후 브라우저에서 지원을 중단 할 수 있습니다.


자세한 내용은 Mozilla Developer Network 설명서를 참조하십시오 .


38
nice code molokoloco : D, 때로는 개인적으로 사용하지 않는 것이 좋지만 때로는 다른 브라우저마다 다른 값이 필요할 수 있으며 JavaScript에 의존합니다. 스타일 시트의 클래스를 만들고 요소에 추가하거나 CSS를 요소 유형에 적용하는 것은 방탄입니다.
Blowsie

58
'user-select'- 값 : 없음 | 텍스트 | 토글 | 요소 | 요소 | 모두 | 상속 -w3.org/TR/2000/WD-css3-userint-20000216
Blowsie

34
실제로 -o-user-select는 Opera에서 구현되지 않습니다. 대신 IE의 선택 불가능한 속성을 구현합니다.
팀 다운

30
어떤 이유로, 이것은 IE8에서 작동하지 않았으므로 <div onselectstart="return false;">메인 div에 추가되었습니다 .
robasta

308
이건 말도 안돼! 같은 일을하는 많은 다른 방법들. 사용자 선택에 대한 새로운 표준을 만들어 봅시다. 우리는 그것을 부를 것 standard-user-select입니다. 그런 다음에는 이러한 문제가 없습니다. 이전 버전과의 호환성을 위해 다른 것들도 포함시켜야합니다. 이제 코드가됩니다 -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; standard-user-select: none;. 아 훨씬 좋아
Claudiu

854

대부분의 브라우저에서 이것은 CSS user-select속성 에 대한 독점적 변형을 사용하여 달성 할 수 있으며 , 원래 CSS 3에서 제안 된 다음 포기되었으며 이제 CSS UI 레벨 4 에서 제안됩니다 .

*.unselectable {
   -moz-user-select: none;
   -khtml-user-select: none;
   -webkit-user-select: none;

   /*
     Introduced in Internet Explorer 10.
     See http://ie.microsoft.com/testdrive/HTML5/msUserSelect/
   */
   -ms-user-select: none;
   user-select: none;
}

Internet Explorer <10 및 Opera <15 unselectable의 경우 선택할 수없는 요소 의 속성 을 사용해야합니다 . HTML의 속성을 사용하여이를 설정할 수 있습니다.

<div id="foo" unselectable="on" class="unselectable">...</div>

안타깝게도이 속성은 상속되지 않습니다. 즉, 안에있는 모든 요소의 시작 태그에 속성을 넣어야합니다 <div>. 이것이 문제라면, 대신 자바 스크립트를 사용하여 요소의 자손에 대해 재귀 적으로이를 수행 할 수 있습니다.

function makeUnselectable(node) {
    if (node.nodeType == 1) {
        node.setAttribute("unselectable", "on");
    }
    var child = node.firstChild;
    while (child) {
        makeUnselectable(child);
        child = child.nextSibling;
    }
}

makeUnselectable(document.getElementById("foo"));

2014년 4월 30일 업데이트 : 새로운 요소가 트리에 추가 될 때마다 다시 실행을 할이 트리 탐색 요구를하지만, 추가하여이를 방지 할 수 있음을 @Han에 의해 코멘트에서 보이는 mousedown이벤트 핸들러를 그 집합 unselectable의 대상에 행사. 자세한 내용은 http://jsbin.com/yagekiji/1 을 참조하십시오.


이것은 여전히 ​​모든 가능성을 다루지는 않습니다. 선택 불가능한 요소에서 선택을 시작하는 것은 불가능하지만 일부 브라우저 (예 : Internet Explorer 및 Firefox)에서는 전체 문서를 선택 불가능하게하지 않고 선택 불가능한 요소 이전에 시작하여 끝나는 선택을 막을 수 없습니다.


30
예제에서 * 선택기를 제거해야합니다. 실제로 비효율적이며 실제로 예제에서 사용할 필요가 없습니까?
Blowsie

66
@Blowsie : 난 그렇게 생각하지 않습니다하는 CSS 2 개 사양 상태 *.foo와는 .foo정확히 동일합니다 (두 번째 경우는, 보편적 인 선택은 ( *) 암시), 그래서 브라우저의 단점을 금지, 나는 포함 볼 수없는 *의지 해 공연. *가독성을 위해 원래 시작한 을 포함하는 것은 오랜 습관입니다 . 저자가 모든 요소를 ​​일치시키려는 것을 한눈에 알 수 있습니다.
Tim Down

38
좀 더 읽어 본 후에는 키 (가장 가까운 선택기) 즉 .unselectable *로 사용할 때 * 비효율적 인 것 같습니다. 추가 정보는 여기 code.google.com/speed/page-speed/docs/…
Blowsie

20
class = "unselectable"을 사용하는 대신 속성 선택기를 사용하십시오. [unselectable = "on"] {…}
Chris Calo

13
@Francisc : 아니요. 이전에 의견에서 Blowsie에게 말했듯이 정확하게 차이는 없습니다.
Tim Down

196

Internet Explorer 용 JavaScript 솔루션은 다음과 같습니다.

onselectstart="return false;"

55
잊지 마세요 ondragstart!
Mathias Bynens

9
한 가지 더 있습니다. 본문에 추가하면 IE의 텍스트 영역이나 입력 필드 내에서 텍스트를 선택할 수 없습니다. IE 용으로 수정 한 방식. body.onselectstart = function(e) { if (e.target.nodeName != "INPUT" && e.target.nodeName != "TEXTAREA") { e.preventDefault(); return false; } return true; }
TheBrain

2
이것은 jQuery를 사용하여 속성으로 추가 할 수 있습니다-$ ( "p"). attr ( "onselectstart", "return false") 이것은 IE8에서 유일하게 신뢰할 수있는 방법이었습니다
Matt

13
@Abudayah는 이전 버전의 Internet Explorer에서 작동하지 않기 때문에? 그것은이 답변의 요점과 같습니다.
Pekka

?? 내가 input사용하더라도 요소 에서 항상 텍스트를 선택할 수 있습니다 user-select: none. 나는 이것을 막는 방법을 알아야한다
oldboy

191

CSS 3의 사용자 선택 속성을 사용할 수 있을 때까지 Gecko 기반 브라우저는 -moz-user-select이미 찾은 속성을 지원합니다 . WebKit 및 Blink 기반 브라우저는-webkit-user-select 특성을 .

물론 Gecko 렌더링 엔진을 사용하지 않는 브라우저에서는 지원되지 않습니다.

"표준"을 준수하는 빠르고 쉬운 방법은 없습니다. JavaScript를 사용하는 것이 옵션입니다.

실제 질문은 왜 사용자가 특정 요소를 강조 표시하고 아마도 복사하여 붙여 넣을 수 없도록 하시겠습니까? 사용자가 내 웹 사이트의 특정 부분을 강조 표시하지 못하도록 한 번도 오지 않았습니다. 내 친구들 중 일부는 코드를 읽고 쓰는 데 많은 시간을 보낸 후 강조 표시 기능을 사용하여 페이지의 위치를 ​​기억하거나 마커를 제공하여 눈이 다음에 볼 위치를 알 수 있도록합니다.

이것이 유용하다는 것을 알 수있는 유일한 장소는 사용자가 웹 사이트를 복사하여 붙여 넣을 때 복사하여 붙여 넣을 수없는 양식의 단추가있는 경우입니다.


20
버튼은 내 동기가 될 것입니다.
Kriem

27
이것이 필요한 또 다른 이유는 그리드 또는 테이블에서 여러 행을 선택하기 위해 Shift 키를 누른 채 클릭하는 것입니다. 텍스트를 강조 표시하지 않고 행을 선택하려고합니다.
Gordon Tucker

7
다른 사람의 콘텐츠가 합법적으로 다시 게시되는 법적 문제도 있지만 라이센스 조항에 따라 웹 게시자는 텍스트를 쉽게 복사하여 붙여 넣을 수 없도록해야합니다. 이것이 내가이 질문을 찾게 한 이유입니다. 본인은 요구 사항에 동의하지 않지만 계약을 체결 한 회사는 이러한 방식으로이를 이행 할 법적 의무가 있습니다.
Craig M

5
@CraigM CSS 스타일은 HTML 소스를 잡고 복사하는 사람을 막지 않습니다. 콘텐츠를 보호하려면 더 나은 방법을 찾아야합니다.
Agile Jedi

27
드래그 앤 드롭이 많은 대화식 웹 앱 ... 우발적 인 강조 표시는 사용 편의성에 큰 문제입니다.
Marc Hughes

138

<p>요소를 제외한 모든 항목에서 텍스트 선택을 비활성화 하려면 CSS 에서이 작업을 수행 할 수 있습니다 ( -moz-none하위 요소에서 재정의를 허용하는 하위 요소를 살펴보십시오 none.

* {
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: -moz-none;
    -o-user-select: none;
    user-select: none;
}

p {
    -webkit-user-select: text;
    -khtml-user-select: text;
    -moz-user-select: text;
    -o-user-select: text;
    user-select: text;
}

12
입력 필드도 선택 가능하게하십시오 : p, input { -webkit-user-select: text; -khtml-user-select: text; -moz-user-select: text; -o-user-select: text; user-select: text; }
joshuadelange

11
하나의 항목을 제외한 모든 코드에서 브라우저 UI 기대치를 끄는 것에 매우주의하십시오. 예를 들어 목록 항목 <li /> 텍스트는 어떻습니까?
Jason T Featheringham

그냥 업데이 트 ... 파이어 폭스 (21) 이후 MDN에 따라 -moz-nonenone동일합니다.
Kevin Fegan

2
이를 위해 cursor : default와 cursor : text를 각각 추가 할 수 있습니다.
:)

폭탄. 즉 말하자면. 끝. ul>* { -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: -moz-none; -o-user-select: none; user-select: none; }[정렬되지 않은 목록의 모든 항목을 선택하고 전체 뷰 트리를 휴지통으로 옮기지 않고 선택할 수 없도록합니다.] 레슨에 감사드립니다. IME (Android 클립 보드 위젯)를 시작하지 않고 내 버튼 목록이 멋지게 보이고 화면을 탭하고 눌렀을 때 올바르게 응답합니다.
Hypersoft Systems 2009 년

125

이전 답변의 솔루션에서 선택이 중지되었지만 커서가 여전히 변경되어 사용자는 여전히 텍스트를 선택할 수 있다고 생각합니다. 정적으로 유지하려면 CSS 커서를 설정해야합니다.

.noselect {
    cursor: default;
    -webkit-touch-callout: none;
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}
<p>
  Selectable text.
</p>
<p class="noselect">
  Unselectable text.
</p>

그러면 데스크톱 응용 프로그램에서와 같이 텍스트가 완전히 평평 해집니다.


"평평한"무엇에 반대?
kojow7

@ kojow7 "계층화"와 반대로. 다른 요소 위에 텍스트가 떠있는 대신. SVG와 PNG 이미지의 차이점과 유사합니다.
Yeti

4
Firefox에는 2019 년에도 여전히 공급 업체 접두사가 필요하다는 사실에 놀랐습니다. 나는 user-select: none;표준이 현재 채택 될 것이라고 생각하면서도별로 사용하지 않았지만 슬프게도 그렇지 않았습니다. 표준위원회의 사람들이 여전히 토론 할 수있는 것에 대해 궁금해합니다. "아니요, 여러분 .. 정말user-select: cant; 설명하기 쉽기 때문인 것 같아요 ?" "우리는이 일을 끝냈습니다. 마이크. 아포스트로피를 생략해야했는데, 그게 나쁜 형태입니다!" "충분히, 모두! 우리는 다음 달에 다시이 문제에 대해 심의 할 것입니다. 표준위원회 회의가 휴회했습니다!"
Mentalist

109

Firefox와 Safari에서도 가능합니다 (Chrome도?)

::selection { background: transparent; }
::-moz-selection { background: transparent; }

121
실제로 문제를 해결하지는 않으므로 권장하지 않습니다. 텍스트 선택 비활성화-단순히 숨 깁니다. 커서를 페이지 주위로 드래그하면 알 수없는 임의의 텍스트를 선택할 수 있기 때문에 유용성이 떨어질 수 있습니다. 이로 인해 모든 종류의 이상한 사용성 "버그"가 발생할 수 있습니다.
Keithamus

1
투명한 영역이있는 PNG 이미지에서는 작동하지 않습니다. 항상 연한 파란색으로 선택됩니다… 해결 방법이 있습니까?
AvL

80

WebKit에 대한 해결 방법 :

/* Disable tap highlighting */
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);

CardFlip 예제에서 찾았습니다.


1
transparentrgba 대신 사용하면 Android의 Chrome 42에서도 작동합니다.
클린트 Pachl

77

나는 하이브리드 CSS + jQuery 솔루션을 좋아한다.

내부의 모든 요소를 <div class="draggable"></div>선택 불가능하게하려면 다음 CSS를 사용하십시오.

.draggable {
    -webkit-user-select: none;
     -khtml-user-select: none;
       -moz-user-select: none;
        -ms-user-select: none;
         -o-user-select: none;
            user-select: none;
}

.draggable input {
    -webkit-user-select: text;
     -khtml-user-select: text;
       -moz-user-select: text;
         -o-user-select: text;
            user-select: text;
 }

그런 다음 jQuery를 사용하는 경우 이것을 $(document).ready()블록 안에 추가하십시오 .

if (($.browser.msie && $.browser.version < 10) || $.browser.opera) $('.draggable').find(':not(input)').attr('unselectable', 'on');

나는 여전히 입력 요소가 상호 작용할 수 있기를 원하므로 :not()의사 선택기 가 필요하다고 생각합니다 . 당신은 사용할 수 있습니다'*'신경 쓰지 않으면 대신 .

주의 사항 : Internet Explorer 9에는이 추가 jQuery 조각이 필요하지 않을 수 있으므로 거기에 버전 확인을 추가 할 수 있습니다.


5
-ms-user-select 사용 : 없음; (IE10 용)와 jQuery를 "만일"이되어야합니다 : 만약 (($ .browser.msie && $ .browser.version <10) || $ .browser.opera)
mhenry1384

조심해라 !!! 파이어 폭스에서 선택할 수있게하려면 반드시 사용해야합니다-moz-user-select: Normal;
Nicolas Thery

7
@ mhenry1384 jQuery.browser는 1.3 버전에서 더 이상 사용되지 않으며 버전 1.9에서 제거되었습니다. api.jquery.com/jQuery.browser
WynandB

@Wynand 좋은 지적. 그러나 사용할 CSS 속성을 결정하기 위해 어떤 종류의 "기능 탐지"가 존재합니까?
Tom Auger

@TomAuger jQuery.support를 사용하면 단일 기능을 확인할 수 있습니다. Link
Aequanox

69

.hidden:after {
    content: attr(data-txt);
}
<p class="hidden" data-txt="Some text you don't want to be selected"></p>

그러나 가장 좋은 방법은 아닙니다.


3
title속성으로 사용할 수도 있습니다 .
칫솔

6
매우 창의적인 솔루션입니다. 특히 title 속성을 사용하는 경우 화면 판독기에 더 좋을 것입니다.
의사 절약

4
JSBin 시도했지만 IE에서 작동하지 않습니다. 불행히도 오래된 IE는 user-select작동하지 않는 유일한 것입니다 .
의사 절약

1
이것은 Chrome에서 작동하는 훌륭한 비 JS 대안입니다! 대박!
saricden

화려한! ......
외로운

69

CSS 또는 JavaScript를 사용할 수 있습니다 를 .

자바 스크립트 방법은 지원됩니다 나이가 같은 브라우저 오래된 뿐만 아니라 Internet Explorer 버전하지만 사건이 아니라면, 다음 CSS 방법을 사용합니다 :

HTML / 자바 스크립트 :

<html onselectstart='return false;'>
  <body>
    <h1>This is the Heading!</h1>
    <p>And I'm the text, I won't be selected if you select me.</p>
  </body>
</html>

HTML / CSS :

.not-selectable {
  -webkit-touch-callout: none;
  -webkit-user-select: none;
  -khtml-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
<body class="not-selectable">
  <h1>This is the Heading!</h1>
  <p>And I'm the text, I won't be selected if you select me.</p>
</body>


59

Internet Explorer의 경우 의사 클래스focus (.ClassName : focus) 및 을 추가해야합니다 outline-style: none.

.ClassName,
.ClassName:focus {
    -webkit-touch-callout: none;
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
    outline-style: none; /* Internet Explorer  */
}

3
이것은 className클래스 의 요소에서 선택이 시작되는 한 IE에서 작동합니다 . 이 JSBin을 참조하십시오 .
유사 절약

57

이 행을 CSS에 삽입하고 클래스 속성에서 "disHighlight"를 호출하십시오.

.disHighlight {
    user-select: none;
    -webkit-user-select: none;
    -ms-user-select: none;
    -webkit-touch-callout: none;
    -o-user-select: none;
    -moz-user-select: none;
}

51

빠른 해킹 업데이트

none모든 CSS user-select속성 (브라우저 접두사 포함)에 값 을 사용하면 여전히이 문제가 발생할 수 있습니다.

.div {
    -webkit-user-select: none; /* Chrome all / Safari all */
    -moz-user-select: none;    /* Firefox all             */
    -ms-user-select: none;     /* Internet Explorer  10+  */
     user-select: none;        /* Likely future           */
}

으로 CSS-트릭 말한다는 문제가 있습니다 :

WebKit 은 주위의 요소를 선택하면 여전히 텍스트를 복사 할 수 있습니다.

아래 enforce요소를 사용하여 전체 요소가 선택 되도록 할 수도 있습니다. 즉, 요소를 클릭하면 해당 요소에 싸인 모든 텍스트가 선택됩니다. 이를 위해 값 none을 로 변경하기 만하면 됩니다 all.

.force-select {
    -webkit-user-select: all;  /* Chrome 49+     */
    -moz-user-select: all;     /* Firefox 43+    */
    -ms-user-select: all;      /* No support yet */
    user-select: all;          /* Likely future  */
}

48

터치 이벤트로 Android 브라우저에서 동일한 결과를 얻는 데 어려움이있는 경우 다음을 사용하십시오.

html, body {
    -webkit-touch-callout: none;
    -webkit-user-select: none;
    -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
    -webkit-tap-highlight-color: transparent;
}


46
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-o-user-select: none;
user-select: none;

*.unselectable {
   -moz-user-select: -moz-none;
   -khtml-user-select: none;
   -webkit-user-select: none;
   user-select: none;
}
<div id="foo" unselectable="on" class="unselectable">...</div>
function makeUnselectable(node) {
    if (node.nodeType == 1) {
        node.unselectable = true;
    }
    var child = node.firstChild;
    while (child) {
        makeUnselectable(child);
        child = child.nextSibling;
    }
}

makeUnselectable(document.getElementById("foo"));
-webkit-user-select: none;
-moz-user-select: none;
onselectstart="return false;"
::selection { 
    background: transparent; 
}

::-moz-selection { 
    background: transparent; 
}

* {
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: -moz-none;
    -o-user-select: none;
    user-select: none;
}

p {
    -webkit-user-select: text;
    -khtml-user-select: text;
    -moz-user-select: text;
    -o-user-select: text;
    user-select: text;
}
<div class="draggable"></div>
.draggable {
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: none;
    -o-user-select: none;
    user-select: none;
}

.draggable input {
    -webkit-user-select: text;
    -khtml-user-select: text;
    -moz-user-select: text;
    -o-user-select: text;
    user-select: text;
 }
if ($.browser.msie)
    $('.draggable').find(':not(input)').attr('unselectable', 'on');

46

CSS :

-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
-webkit-touch-callout: none;
-webkit-user-select: none;

이것은 작동하지만 이전 브라우저에서는 작동하지 않습니다. 브라우저 호환성 문제가 있습니다.


접두사가없는 CSS 속성은 속성의 접두사 버전 목록 끝에 있어야합니다. 올바른 연습입니다. 또 다른 방법은 Chrome / Webkit에서 "새로운 IE"를 만들고 웹킷 브라우저가 아닌 -webkit 접두사 지원을 도입하는 것과 같은 매우 잘못된 것입니다. 보세요, 이것은 이미 2012 년에 있었습니다
FlameStorm

그리고 나는 인용한다 :This is because through our site compatibility work, we have experienced that many authors of (especially mobile) sites only use -webkit- prefixed CSS, thereby ignoring other vendor prefixes and not even including an unprefixed equivalent. This leads to a reduced user experience on Opera and Firefox, which don’t receive the same shiny effects such as transitions, gradients and the like, even if the browser supported those effects.
FlameStorm

42

SASS (SCSS 구문)

mixin 으로이 작업을 수행 할 수 있습니다 .

// Disable selection
@mixin disable-selection {
    -webkit-touch-callout: none; /* iOS Safari */
    -webkit-user-select: none;   /* Safari */
    -khtml-user-select: none;    /* Konqueror HTML */
    -moz-user-select: none;      /* Firefox */
    -ms-user-select: none;       /* Internet Explorer/Edge */
    user-select: none;           /* Non-prefixed version, currently supported by Chrome and Opera */
}

// No selectable element
.no-selectable {
    @include disable-selection;
}

HTML 태그에서 :

<div class="no-selectable">TRY TO HIGHLIGHT</div>

CodePen 에서 사용해보십시오 .

당신이 사용하는 경우 autoprefixer를 다른 접두사를 제거 할 수 있습니다.

브라우저 호환성 여기 .


36

Mozilla 전용 속성 외에는 아니요, 현재로서는 표준 CSS만으로 텍스트 선택을 비활성화 할 수있는 방법이 없습니다.

알다시피, 스택 오버플로는 탐색 버튼의 텍스트 선택을 비활성화하지 않으며 대부분의 경우 정상적인 선택 동작을 수정하고 사용자의 기대와 충돌하기 때문에 그렇게하지 않는 것이 좋습니다.


사용자가 기대하는 동작을 변경하는 것에 동의하지만,이 양식 필드 옆에있는 "설명 추가"버튼과 같은 항목에 적합합니다.
X-Istence

그러나 이것이 불필요한 구현 세부 사항을 노출시키지 않습니까? 입력 또는 버튼의 텍스트를 선택할 수 없습니다.

@anon : 대부분의 사용자는 아마도 버튼의 텍스트를 선택하려고 시도하지 않을 것이므로 실제로는별로 중요하지 않습니다. 또한 그렇게 하려면 버튼 외부 에서 선택을 시작해야 합니다. 버튼 자체를 클릭하면 onclick 핸들러가 대신 활성화됩니다. 또한 특정 브라우저 (예 : Safari)에서는 실제로 일반 버튼의 텍스트를 선택할 수 있습니다…
hbw

6
채팅 스레드에서 댓글 세트를 선택하고 각 댓글 옆에 upvote / downvote 버튼이 있으면 다른 내용없이 텍스트를 선택하는 것이 좋습니다. 그것이 사용자가 기대하거나 원하는 것입니다. 그는 모든 주석과 함께 단추 레이블을 복사 / 붙여 넣기를 원하지 않습니다.
Mnebuerquo

2
예를 들어 다른 페이지로 리디렉션하는 대신 div를 여는 버튼을 두 번 클릭하면 어떻게됩니까? 더블 클릭으로 인해 버튼의 텍스트가 선택됩니다!
Gigala

34

이것은 일부 브라우저 에서 작동 합니다.

::selection{ background-color: transparent;}
::moz-selection{ background-color: transparent;}
::webkit-selection{ background-color: transparent;}

선택기 앞에 원하는 요소 / ID를 공백없이 쉼표로 구분하여 추가하면됩니다.

h1::selection,h2::selection,h3::selection,p::selection{ background-color: transparent;}
h1::moz-selection,h2::moz-selection,h3::moz-selection,p::moz-selection{ background-color: transparent;}
h1::webkit-selection,h2::webkit-selection,h3::webkit-selection,p::webkit-selection{ background-color: transparent;}

다른 답변이 더 좋습니다. 이것은 아마도 최후의 수단 / 캐치로 보일 것입니다.


3
확실하게 알 수있는 것은 거의 없지만이 솔루션이 모든 브라우저 에서 작동하는 것은 아닙니다 .
Volker E.

33

다음 div과 같은 두 가지가 있다고 가정 하십시오.

.second {
  cursor: default;
  user-select: none;
  -webkit-user-select: none;
  /* Chrome/Safari/Opera */
  -moz-user-select: none;
  /* Firefox */
  -ms-user-select: none;
  /* Internet Explorer/Edge */
  -webkit-touch-callout: none;
  /* iOS Safari */
}
<div class="first">
  This is my first div
</div>

<div class="second">
  This is my second div
</div>

커서를 기본값으로 설정하면 사용자에게 선택 불가능한 느낌을 줄 수 있습니다.

모든 브라우저에서 접두사를 지원하려면 접두사를 사용해야합니다. 접두사가 없으면 모든 답변에서 작동하지 않을 수 있습니다.



29

텍스트 선택을 비활성화하려는 첫 번째 div에 이것을 추가하십시오.

onmousedown='return false;' 
onselectstart='return false;'

28

노트:

정답은 텍스트를 선택할 수 없다는 점에서 정확합니다. 그러나 다음 두 스크린 샷 (2014 년 11 월 7 일 현재)과 함께 표시되므로 텍스트를 복사 할 수는 없습니다.

우리가 무언가를 선택하기 전에

우리가 선택한 후

숫자가 복사되었습니다

보시다시피 숫자를 선택할 수 없었지만 복사 할 수있었습니다.

테스트 : Ubuntu , Google Chrome 38.0.2125.111.


1
나는 같은 문제가 있었다. Mac Chrome 48.0.2564.116 및 Mac Safari 9.0.3에서. 특히, Mac Firefox 43.0은 문자를 복사하지 않지만 그 사이에 끝을 더합니다. 이것에 대해 어떻게해야합니까?
NHDaly

26

내가 필요한 결과를 얻으려면, 내가 모두를 사용했다 발견 ::selection하고user-select

input.no-select:focus {
    -webkit-touch-callout: none;
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}

input.no-select::selection {
    background: transparent;
}

input.no-select::-moz-selection {
    background: transparent;
}

finalyyyyyyy 작동하는 답변
oldboy

23

다음과 같이 쉽게 수행 할 수 있습니다.

-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
-o-user-select: none;
user-select: none;

또는

당신이 있다고 가정 해 봅시다 <h1 id="example">Hello, World!</h1>. 그것의 innerHTML ( h1이 경우 Hello, World) 을 제거해야합니다 . 그런 다음 CSS로 이동하여 다음을 수행해야합니다.

#example::before // You can of course use **::after** as well.
{
    content: 'Hello, World!'; // Both single-quotes and double-quotes can be used here.

    display: block; // To make sure it works fine in every browser.
}

이제는 단순히 텍스트가 아니라 블록 요소라고 생각합니다.



21

JavaScript없이 내 솔루션을 확인하십시오.

jsFiddle

li:hover {
    background-color: silver;
}
#id1:before {
    content: "File";
}
#id2:before {
    content: "Edit";
}
#id3:before {
    content: "View";
}
<ul>
    <li><a id="id1" href="www.w1.com"></a>
    <li><a id="id2" href="www.w2.com"></a>
    <li><a id="id3" href="www.w3.com"></a>
</ul>

내 기술이 적용된 팝업 메뉴 : http://jsfiddle.net/y4Lac/2/


21

이 의사 요소는 CSS 선택기 레벨 3의 초안에 있었지만 후보 권장 사항 단계에서 제거되었습니다. 특히 중첩 요소와 관련하여 동작이 잘못 지정되어 상호 운용성이 달성되지 않은 것으로 나타났습니다.

:: selection이 중첩 요소에서 작동하는 방식에서 논의됩니다 .

브라우저에서 구현되어 있지만 탭 디자인 (선택한 경우)과 동일한 색상 및 배경색을 사용하여 텍스트가 선택되지 않은 것처럼 보일 수 있습니다.

일반적인 CSS 디자인

p { color: white;  background: black; }

선택시

p::-moz-selection { color: white;  background: black; }
p::selection      { color: white;  background: black; }

사용자가 텍스트를 선택하지 못하게하면 사용성 문제가 발생합니다.


Netbeans 자동 완성이 내가 무슨 말을하는지 전혀 모르는 이유입니다.
절반
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.