テキスト選択の強調表示を無効にする方法


5204

ボタンのように機能するアンカー(たとえば、質問、タグ)スタックオーバーフローページの上部にある[、[ ユーザー]など)またはタブの場合、ユーザーが誤ってテキストを選択した場合に強調表示効果を無効にするCSS標準の方法はありますか?

これはJavaScriptで実行できることを理解しています。少しグーグルするとMozillaのみが生成されました -moz-user-selectます。オプションが。

CSSでこれを達成するための標準に準拠した方法はありますか?そうでない場合、「ベストプラクティス」アプローチとは何ですか?


7
エレメントwitch内のエレメントで強調表示を無効にしたり、スタイルまたはクラス属性の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
私はただ言うことができます:これを行わないでください。私の経験から、ボタンとしても機能するテキストを実際に選択して、別の場所にコピーアンドペーストしたいことがよくあります。一部のWeb開発者が私に代わってこの機能を意図的に無効にしようとしたので、それができないことは想像を絶するほど苛立たしいことです。したがって、非常に正当な理由がない限り、これを行わないでください。
— kajacx

3
今年2017年に、それを使用するためのより良い方法であるpostcssとautoprefixer、その後、設定、ブラウザのバージョンpostcss、すべてのクールを作ります。
— AmerllicA

回答:


7324

2017年1月の更新:

よると、缶Iの使用、user-select現在のInternet Explorer 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
素敵なコードmolokoloco:D。ただし、ブラウザーによって値が異なる場合があり、JavaScriptに依存する場合があるため、個人的には使用しないようにします。クラスを作成し、それを要素に追加するか、CSSをスタイルシートの要素のタイプに適用することは、かなり弾丸の証拠です。
— ブロージー2011年

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に追加しました。
— ロバスタ2012年

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>。これが問題の場合は、代わりにJavaScriptを使用して、要素の子孫に対してこれを再帰的に行うことができます。

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
あなたはあなたの例から*セレクターを取り除くべきです、それは本当に非効率的であり、あなたの例でそれを使う必要は本当にありませんか?
— ブロージー2011年

66
@Blowsie:私はそうは思いません:CSS 2仕様では、*.fooと.foo正確に同等である(2番目のケースでは、ユニバーサルセレクター(*)が暗示されている)ため、ブラウザーの癖を除いて、*害を及ぼすことはわかりませんパフォーマンス。*私が最初にを読みやすくするために始めたを含めることは、私が長年の習慣です。一目で、著者がすべての要素に一致するつもりであることが明確に示されています。
— 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
ここでもう1つ。本文に追加すると、IEのtextareasまたは入力フィールド内のテキストを選択できなくなります。IEで修正した方法。body.onselectstart = function(e) { if (e.target.nodeName != "INPUT" && e.target.nodeName != "TEXTAREA") { e.preventDefault(); return false; } return true; }
— TheBrain、2013年

2
これはjQueryを使用して属性として追加できます-$( "p")。attr( "onselectstart"、 "return false")これは、IE8で私にとって唯一の信頼できる方法でした
— Matt

13
@Abudayahは、古いバージョンのInternet Explorerでは機能しないためですか?それがこの回答の要点です。
— Pekka 2013年

?? をinput使用しても、要素内のテキストを常に選択できますuser-select: none。私はこれを防ぐ方法を知る必要があります
— oldboy '13

191

CSS 3のuser-selectプロパティが利用可能になるまで、Geckoベースのブラウザー-moz-user-selectは既に見つけたプロパティをサポートします。WebKitおよびBlinkベースのブラウザーは、-webkit-user-selectプロパティをます。

もちろん、これはGeckoレンダリングエンジンを使用しないブラウザではサポートされていません。

「標準」に準拠した迅速で簡単な方法はありません。JavaScriptの使用はオプションです。

本当の質問は、なぜユーザーが特定の要素を強調表示できず、おそらくコピーして貼り付けられないようにしたいのですか?ユーザーが自分のWebサイトの特定の部分を強調表示しないようにしたいと思ったことが一度もありません。私の友人の何人かは、コードの読み書きに何時間も費やした後、ハイライト機能を使用して、ページのどこにいたかを思い出したり、マーカーを提供して目が次にどこを見ればよいかを知らせたりします。

ユーザーがWebサイトをコピーして貼り付けた場合に、コピーして貼り付けてはいけないフォームのボタンがある場合にのみ、これが役立つと私は思います。


20
ボタンのことはまさに私のモチベーションになるでしょう。
— クリーム、2009

27
これが必要なもう1つの理由は、Shiftキーを押しながらクリックしてグリッドまたはテーブルの複数の行を選択することです。テキストを強調表示するのではなく、行を選択する必要があります。
— Gordon Tucker

7
他の誰かのコンテンツが合法的に再発行されているという法的な問題もありますが、ライセンスの条項により、Webパブリッシャーはテキストを簡単にコピーして貼り付けることを禁止しています。これが私がこの質問を見つけたきっかけです。私は要件に同意しませんが、契約している会社はこの方法でそれを実装する法的義務があります。
— Craig M

5
@CraigM cssスタイルは、ユーザーがHTMLソースを取得してコピーすることを妨げません。コンテンツを保護したい場合は、より良い方法を見つける必要があります。
— アジャイルジェダイ

27
ドラッグアンドドロップの多いインタラクティブなウェブアプリ...誤ってハイライト表示することは、使いやすさの大きな問題です。
— マークヒューズ

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
1つの項目を除いて、すべてのコードでブラウザーUIの期待をオフにすることに注意してください。たとえば、リストアイテムの<li />テキストはどうですか?
— Jason T Featheringham

ただの更新... Firefox 21以降のMDNによる-moz-noneとnone、同じです。
— Kevin Fegan

2
このために、cursor:defaultとcursor:textをそれぞれ追加できます:)
— T4NK3R

爆弾。それは言うことです。終わり。 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

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画像の違いに似ています。
— イエティ

4
Firefoxが2019年でもベンダープレフィックスを必要とすることを発見して驚いた。user-select: none;標準は今では採用されるだろうと思って、私は無視してだけを使用したが、残念ながら採用していない。標準化委員会の人々がまだ議論しているのではないかと思わせるかもしれません。「いいえ、あなたたちは...私は本当にそれがあるべきだと思うuser-select: cant;あなたが知っている、それはより説明のようだから?」「これはもう終わりだ、マイク。アポストロフィは省略しなければならない。それは悪い形だ!」「これで十分です。来月もこの問題について検討します。標準委員会の会議が延期されました!」
— メンタリスト

109

FirefoxとSafari(Chromeも?)

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

121
実際には問題が修正されないため、これを行うことはお勧めしません。テキストの選択を無効にする-それは単にそれを隠すだけです。これは、カーソルをページの周りにドラッグすると、知らないうちに任意のテキストを選択できるため、使い勝手が悪くなる可能性があります。これは、あらゆる種類の奇妙なユーザビリティ「バグ」を引き起こす可能性があります。
— Keithamus

1
透明な領域のあるPNG画像では機能しません:は常に水色で選択されます...回避策はありますか?
— AvL 2013

80

WebKitの回避策:

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

CardFlipの例で見つけました。


1
transparentrgbaの代わりに使用すると、AndroidのChrome 42でも機能します。
— Clint 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:noneを使用します。(IE10のために)とあなたのjQueryの"場合"は、このする必要があります。if(($ .browser.msie && $ .browser.version <10)|| $ .browser.opera)
— mhenry1384

注意してください!!! Firefoxで選択可能にするには、使用する必要があります-moz-user-select: Normal;
— Nicolas Thery

7
@ mhenry1384 jQuery.browserはバージョン1.3で廃止され、バージョン1.9で削除されました-api.jquery.com/jQuery.browser
— WynandB

@Wynand良い点。しかし、どのCSSプロパティを使用するかを決定するために、どのような「機能検出」が存在しますか?
— トム・オージェ

@TomAuger jQuery.supportを使用すると、単一の機能をチェックできます:リンク
— 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属性として使用することもできます。
— 歯ブラシ2014年

6
これは非常にクリエイティブなソリューションです。特に、それがおそらくスクリーンリーダーに適しているため、title属性を使用した場合。
— 疑似サバント2014

4
私はそれを試しました(JSBin)がIEで動作しません。残念ながら、user-select動作しないのは古いIEだけです。
— 疑似サバント2014

1
これは、Chromeで動作する、JS以外の優れた代替手段です。驚くばかり!
— saricden

ゴージャス!......
— 孤独な

69

CSSまたはJavaScriptを使用できますそのを。

JavaScriptの方法がサポートされ、古いようなブラウザ、古いです同様のInternet Explorerのバージョンが、それはあなたのケースではない場合は、CSSの方法を使用します。

HTML / JavaScript:

<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を参照してください。
— pseudosavant

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以外のブラウザで-webkitプレフィックスサポートを導入するなど、非常に厄介なことにつながります。ルック、これは2012年にすでにました:dev.opera.com/articles/...
— 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 2017年

42

SASS(SCSS構文)

あなたはミックスインでこれを行うことができます:

// 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でお試しください。

自動プレフィックスを使用している場合は、他のプレフィックスを削除できます。

ブラウザの互換性はこちら。


36

Mozillaのみのプロパティは別として、いいえ、標準のCSSだけでテキスト選択を無効にする方法はありません(現時点では)。

気づいたら、Stack Overflowはナビゲーションボタンのテキスト選択を無効にしません。通常の選択動作を変更し、ユーザーの期待と矛盾するため、ほとんどの場合は無効にすることをお勧めします。


ユーザーが期待する動作を変更することに同意しますが、このフォームフィールドの隣にある[コメントを追加]ボタンなどの場合に意味があります...
— X-Istence

しかし、それは不必要な実装の詳細を公開していませんか?入力またはボタンのテキストは選択できません。

@anon:ほとんどのユーザーはおそらくボタンのテキストを選択しようとしないため、実際にはそれほど重要ではありません。また、そのためには、ボタンの外側で選択を開始する必要があります。ボタン自体の内側をクリックすると、代わりにonclickハンドラーがアクティブになります。さらに、特定のブラウザ(Safariなど)では、実際に通常のボタンのテキストを選択できます…
— hbw 2009

6
チャットスレッドからコメントのセットを選択していて、各コメントの横に[上/下]ボタンがある場合は、他の要素なしでテキストを選択すると便利です。それはユーザーが期待するか、または望んでいることです。コメントごとにボタンのラベルをコピーして貼り付けたくありません。
— Mnebuerquo 2013

2
また、たとえば、別のページにリダイレクトする代わりにdivを開くボタンをダブルクリックするとどうなるでしょうか。次に、ダブルクリックによりボタンのテキストが選択されます!
— Gigala 14

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のような2つのがあるとします。

.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 2016年

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 '13

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のドラフトに含まれていましたが、特にネストされた要素では動作が十分に指定されておらず、相互運用性が達成されていないようだったため、候補の推奨段階で削除されました。

ネストされた要素での::選択のしくみで説明されています。

これはブラウザーに実装されていますが、タブのデザイン(あなたの場合)と同じ色と背景色を使用して、テキストが選択されていないように見せることができます。

通常のCSSデザイン

p { color: white;  background: black; }

選択時

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

ユーザーがテキストを選択できないようにすると、ユーザビリティの問題が発生します。


これが、Netbeansのオートコンプリートが私が何を話しているのかまったくわからない理由です!
— 2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.