탭 이름과 같은 일부 텍스트 요소가있는 HTML UI를 작성 중입니다. 불행히도 사용자가 탭 이름을 두 번 클릭하는 것이 매우 쉽습니다.이 탭 이름은 많은 브라우저에서 기본적으로 선택됩니다.
JavaScript 트릭 으로이 문제를 해결할 수 있습니다 (해답도보고 싶습니다).하지만 CSS/HTML에 모든 브라우저에서 직접 작동하는 무언가가 실제로 있기를 바랍니다.
대부분의 브라우저에서 CSS를 사용하여이 작업을 수행 할 수 있습니다.
*.unselectable {
-moz-user-select: -moz-none;
-khtml-user-select: none;
-webkit-user-select: none;
/*
Introduced in IE 10.
See http://ie.Microsoft.com/testdrive/HTML5/msUserSelect/
*/
-ms-user-select: none;
user-select: none;
}
IE <10 및 Opera의 경우 선택할 수없는 요소의 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"));
<script type="text/javascript">
/***********************************************
* Disable Text Selection script- © Dynamic Drive DHTML code library (www.dynamicdrive.com)
* This notice MUST stay intact for legal use
* Visit Dynamic Drive at http://www.dynamicdrive.com/ for full source code
***********************************************/
function disableSelection(target){
if (typeof target.onselectstart!="undefined") //IE route
target.onselectstart=function(){return false}
else if (typeof target.style.MozUserSelect!="undefined") //Firefox route
target.style.MozUserSelect="none"
else //All other route (ie: Opera)
target.onmousedown=function(){return false}
target.style.cursor = "default"
}
//Sample usages
//disableSelection(document.body) //Disable text selection on entire body
//disableSelection(document.getElementById("mydiv")) //Disable text selection on element with id="mydiv"
</script>
[~ # ~] 편집 [~ # ~]
코드는 분명히 http://www.dynamicdrive.com
올바른 CSS 변형은 모두 다음과 같습니다.
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
이 시도:
<div onselectstart="return false">some stuff</div>
간단하지만 효과적입니다 ... 모든 주요 브라우저의 현재 버전에서 작동합니다.
Firefox의 경우 CSS 선언 "-moz-user-select"를 "none"에 적용 할 수 있습니다. 그들의 문서를 확인하십시오 ser-select.
미래의 "사용자 선택"에 대한 "미리보기"이므로 Opera 또는 WebKit 기반 브라우저가이를 지원할 것입니다. 나는 또한 InternetplExplorer를 위해 무언가를 찾는 것을 기억하지만, 나는 무엇을 기억하지 못한다 :).
어쨌든 텍스트 선택으로 인해 동적 기능이 작동하지 않는 특정 상황이 아니라면 웹 페이지에서 사용자가 기대하는 것을 무시하고 원하는 텍스트를 선택할 수 있습니다.
여기에 설명 된 CSS로 어느 정도의 성공을 거두고 있습니다 http://www.quirksmode.org/css/selection.html :
::selection {
background-color: transparent;
}
AIR 응용 프로그램 (WebKit 엔진)의 일부 ThemeRoller ul
요소와 관련된 대부분의 문제를 해결했습니다. 여전히 작은 (약 15 x 15) 무의미한 패치가 선택되었지만 이전에는 페이지의 절반이 선택되었습니다.
Z- 색인이 더 높은 텍스트 영역 위에 div를 배치하고이 div에 투명한 GIF 배경 그래픽을 제공하십시오.
조금 더 생각한 후 참고 사항-이 '커버'를 연결해야 탭을 클릭하면 탭이 있어야 할 위치로 이동합니다. 즉 앵커 요소를 display:box
, 너비 및 높이 및 투명한 배경 이미지가 설정되었습니다.
Safari의 경우 -khtml-user-select: none
, Mozilla의 -moz-user-select
(또는 JavaScript에서 target.style.KhtmlUserSelect="none";
).
선택을 억제하는 것이 바람직한 이유에 대한 예를 보려면 SIMILE TImeline 을 참조하십시오. 드래그 앤 드롭을 사용하여 타임 라인을 탐색합니다. 실수로 수직 마우스를 움직이면 레이블이 예기치 않게 강조 표시됩니다. 이상해 보인다.
관심있는 사람들을위한 Sass mixin (scss)이 있습니다. Compass /CSS 3에는 사용자 선택 믹스 인이없는 것 같습니다.
// @usage use within a rule
// ex. img {@include user-select(none);}
// @param assumed valid user-select value
@mixin user-select($value)
{
& {
-webkit-touch-callout: $value;
-webkit-user-select: $value;
-khtml-user-select: $value;
-moz-user-select: $value;
-ms-user-select: $value;
user-select: $value;
}
}
Compass가 더 강력한 방식으로 수행하지만 선택한 공급 업체에 대한 지원 만 추가하십시오.
"콘텐츠가 정말 흥미 롭다면 궁극적으로 콘텐츠를 보호하기 위해 할 수있는 일은 거의 없습니다"
그것은 사실이지만 대부분의 복사는 "궁극적으로"또는 괴짜 나 결정적인 표절 자 또는 그와는 아무 관련이 없습니다. 일반적으로 우둔한 사람들에 의한 우연한 복제이며 심지어 간단하고 쉽게 패배하는 보호 (우리와 같은 사람들이 쉽게 물리 치기)는 그것들을 막는 데 아주 효과적입니다. 그들은 "소스보기"나 캐시 또는 다른 것에 대해 전혀 모른다. 웹 브라우저가 무엇인지 또는 브라우저를 사용하고 있는지조차 모른다.
좋지 않은 경우 CSS를 사용하여 선택한 섹션의 모양을 변경할 수 있습니다.
이미지도 선택할 수 있습니다.
텍스트를 선택하려는 곳에서도 발생할 수 있으므로 JavaScript를 사용하여 텍스트를 선택 취소하는 데에는 제한이 있습니다. 풍부하고 성공적인 경력을 보장하기 위해 브라우저가 평소보다 영향력을 미치거나 관리하는 데 필요한 모든 요구 사항을 피하십시오.
Flickr의 경우와 같이 모든 JavaScript 또는 CSS 메소드는 Firebug로 쉽게 우회됩니다.
CSS에서 ::selection
pseudo-element 를 사용하여 강조 색상을 변경할 수 있습니다.
탭이 링크이고 활성 상태의 점선 사각형 이 문제가되는 경우 해당 탭도 제거 할 수 있습니다 (물론 사용성 고려).
선택성을 끄면 사용자 경험이 향상되는 경우가 많습니다.
예를 들어, 사용자가 연관된 인터페이스 요소의 텍스트를 복사하지 않고 페이지에서 텍스트 블록을 복사 할 수 있습니다 (복사되는 텍스트 내에 산재 될 수 있음).
다음은 쓰기 라인을 제거하면 작동하지 않는 Firefox에서 흥미롭게 작동합니다. 누구나 쓰기 라인이 필요한 이유를 알 수 있습니다.
<script type="text/javascript">
document.write(".");
document.body.style.MozUserSelect='none';
</script>