DIV를 선택 불가능하게 만드는 방법이 있습니까?


140

다음은 흥미로운 CSS 질문입니다.

워터 마크로 사용하려는 일부 텍스트를 오버레이하는 투명한 배경의 텍스트 영역이 있습니다. 텍스트는 크고 텍스트 영역의 대부분을 차지합니다. 사용자가 텍스트 영역을 클릭하면 워터 마크 텍스트를 대신 선택하는 것이 문제입니다. 워터 마크 텍스트를 선택할 수 없도록하고 싶습니다. z-index에서 더 낮은 것이 있으면 선택할 수는 없지만 브라우저는 항목을 선택할 때 z-index 레이어에 신경 쓰지 않는 것 같습니다. 이 DIV를 선택할 수 없도록하는 트릭이나 방법이 있습니까?


자바 스크립트 솔루션에 만족하십니까?
joshcomley

답변:


203

선택을 비활성화하기 위해 간단한 jQuery 확장을 작성했습니다 : jQuery 에서 선택 비활성화 . 당신은 그것을 통해 호출 할 수 있습니다$('.button').disableSelection();

또는 CSS (크로스 브라우저)를 사용하십시오.

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

@kasperTaeymans 지적 해 주셔서 감사합니다. 스 니펫을 업데이트했습니다.
aleemb

@kasperTaeymans 그러나 W3C 작업 초안에 있습니다 ... 나는 만일을 위해 그것을 포함시킬 것입니다.
Camilo Martin

2
내가 대답 한 원래 답변에서 아무것도 빼앗지 말고 3 세 이상입니다. 그래서 터치 인터페이스에 대한 설정이 추가 된 아래 답변 ( stackoverflow.com/questions/924916/… )을 추가했습니다.
Anne Gunn

그것이 이동식 부트 스트랩 모달 헤더에 필요한 것입니다! 감사!
개발자

62

다음 CSS 코드는 거의 최신 브라우저에서 작동합니다.

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

IE의 경우 JS를 사용하거나 html 태그에 속성을 삽입해야합니다.

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

무엇의 목적이다 unselectable="on". 참조 해 주실 수 있습니까
사용자

4
여기에서 찾았습니다 : msdn.microsoft.com/en-us/library/hh801966(v=vs.85).aspx 그러나 실제로 IE에서 테스트했으며 올바르게 작동합니다.
KimKha

1
잘 모르겠습니다. 그러나 <code> unselectable = "on"</ code>은 IE에 포함될 수 있으며 W3C 유효성 검사기는 해당 특성을 허용하지 않습니다.
KimKha

최신 브라우저에서 작동하지만 W3C에서 아직 지정하지 않았습니다.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

41

CSS에 몇 가지 추가 사항을 사용하여 aleemb의 독창적 인 대답을 업데이트하십시오.

우리는 다음과 같은 콤보를 사용했습니다.

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

http://phonegap-tips.com/articles/essential-phonegap-css-webkit-touch-callout.html 에서 웹킷 터치 항목을 추가하라는 제안을 받았습니다.

2015 년 4 월 : 유용 할 수있는 변형으로 내 답변을 업데이트하기 만하면됩니다. DIV를 즉시 선택 가능 / 선택 불가능하게해야하고 Modernizr을 기꺼이 사용하려는 경우 다음은 자바 스크립트에서 깔끔하게 작동합니다.

    var userSelectProp = Modernizr.prefixed('userSelect');
    var specialDiv = document.querySelector('#specialDiv');
    specialDiv.style[userSelectProp] = 'none';

적용 user-select: noneA를하는 것은 div아무런 효과가 전혀 없다. 나는 확신 user-select텍스트 만입니다. div선택 불가능 하게 만드는 다른 방법이 있습니까?
oldboy

22

Johannes가 이미 제안했듯이 배경 이미지는 CSS에서만 이것을 달성하는 가장 좋은 방법입니다.

JavaScript 솔루션은 모든 인기있는 브라우저에서 효과적이기 위해 "dragstart"에 영향을 미쳐야합니다.

자바 스크립트 :

<div onselectstart="return false;" ondragstart="return false;">your text</div>

jQuery :

var _preventDefault = function(evt) { evt.preventDefault(); };
$("div").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault);

풍부한


13

pointer-events: none;CSS에서 사용할 수 있습니다

div {
  pointer-events: none;
}

6

당신은 이것을 시도 할 수 있습니다 :

<div onselectstart="return false">your text</div>

1
더블 클릭으로 선택할 수 있습니다.
ceving

6

텍스트 영역에 대한 간단한 배경 이미지가 아닌가?


1
글쎄, 나는 오히려 워터 마크를 의미했지만 투명한 배경 이미지도 효과적 일 수 있습니다. 또한 일부 브라우저는이 경우 심하게 느려질 수 있으므로 매우 작은 이미지를 타일링해서는 안됩니다. :)
Joey

특히 1000x1000 투명 png (또는 gif)는 4kb에 불과합니다.
Ryan Florence

실제로 1 KiB와 비슷합니다. –-)
Joey

4

WebKit 브라우저 (예 : Chrome 및 Safari)에는 Mozilla의 -moz-user-select : none과 유사한 CSS 솔루션이 있습니다.

.no-select{    
    -webkit-user-select: none;
    cursor:not-allowed; /*makes it even more obvious*/
}

2

또한 IOS에서 터치시 나타나는 회색 반투명 ​​오버레이를 제거하려면 CSS를 추가하십시오.

-webkit-tap-highlight-color: rgba(0,0,0,0);
-webkit-touch-callout: none;

-1

사용하다

onselectstart = "거짓을 반환"

내용을 복사하지 못하게합니다.


4
이 솔루션은 다른 사람들이 게시했습니다.
dazedconfused

-1

선택을 위해 z- 색인에 대해 위치를 절대 또는 상대로 명시 적으로 설정했는지 확인하십시오. 나는 비슷한 문제가 있었고 이것이 나를 위해 해결했다.


-2

사용 사례를 잘 모르지만 드래그 가능하게 만들 수 있습니다.


불쾌하지만 유효한 답변입니다.
Rusty
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.