DIVを選択不可にする方法はありますか?


140

ここにあなたのための興味深いCSS質問があります!

透かしの一種として使用したいテキストをオーバーレイする透明な背景のテキストエリアがあります。テキストは大きく、textareaの大部分を占めます。それは見栄えがよく、問題は、ユーザーがテキスト領域をクリックすると、代わりに透かしテキストが選択される場合があることです。透かしのテキストを選択できないようにしたい。z-indexの値がそれより低いと選択できなくなると思っていましたが、ブラウザーはアイテムを選択するときにz-indexレイヤーを気にしないようです。このDIVを決して選択できないようにするためのトリックまたは方法はありますか?


JavaScriptソリューションに満足しますか?
joshcomley 2009年

回答:


203

しばらく前に選択を無効にする単純なjQuery拡張機能を書きました:Disableing Selection in 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/…)を追加しました。
アンガン

それが私が移動可能なブートストラップモーダルヘッダーに欲しかったものです!ありがとう!
開発者

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 2013年

1
よく分かりません。ただし、<code> unselectable = "on" </ code>がIEに含まれている可能性があり、W3Cバリデーターはその属性を受け入れません。
KimKha 2013

最新のブラウザーでは動作しますが、W3Cではまだ指定されていません。
Ciro Santilli郝海东冠状病六四事件法轮功

41

aleembの元の非常に支持された回答をcssにいくつか追加して更新するだけです。

以下のコンボを使用しています。

.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;
}

webkit-touchエントリを追加するための提案がありました:http ://phonegap-tips.com/articles/essential-phonegap-css-webkit-touch-callout.html

2015 4月:自分の回答を更新して、役立つバリエーションを追加します。DIVをその場で選択/選択解除できるようにする必要があり、Modernizrを使用したい場合は、次のコードがJavaScriptで適切に機能します。

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

に適用user-select: nonedivても効果はありません。私はかなりuser-selectテキストのためだと確信しています。div選択不可能にする他の方法はありますか?
オールドボーイ、

22

ヨハネスがすでに示唆したように、背景画像はCSSだけでこれを実現するためのおそらく最良の方法です。

JavaScriptソリューションは、「ドラッグスタート」に影響を与えて、一般的なすべてのブラウザで効果を発揮する必要があります。

JavaScript:

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

jQuery:

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

リッチ



6

あなたはこれを試すことができます:

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

1
ダブルクリックで選択することも可能です。
2015

6

textareaの単純な背景画像で十分ではないでしょうか?


1
まあ、透かしというよりは透明な背景画像でもかまいません。また、非常に小さな画像を並べて表示しないでください。その場合、一部のブラウザは非常に遅くなります:)
Joey

特に、1000x1000の透過png(またはgif)はわずか4kbです。
ライアンフローレンス

1 KiBに似ていますが、実際には:-)
Joey

4

WebKitブラウザー(Google 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 = "falseを返す"

コンテンツのコピーを防ぎます。


4
このソリューションは他のユーザーによって投稿されました。
dazedconfused 14

-1

z-indexを選択できるようにするには、絶対位置または相対位置を明示的に設定してください。同様の問題があり、これで解決しました。


-2

ユースケースはわかりませんが、ドラッグ可能にすることができます。


その不愉快で有効な答え。
Rusty
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.