JSを使用せずに画像をドラッグまたは選択できないようにする


132

JavaScriptに頼らずに、Firefoxで画像をドラッグも選択もできないようにする方法を誰かが知っていますか?ささいなことのようですが、ここに問題があります:

1)Firefoxでドラッグして強調表示できます。

<img src="...">

2)これを追加しますが、ドラッグ中に画像を強調表示することができます:

<img src="..." draggable="false">

3)これを追加して、強調表示の問題を修正しますが、直感に反して、画像は再びドラッグ可能になります。おかしい、わかった!FF 16.0.1の使用

<img src="..." draggable="false" style="-moz-user-select: none;">

では、なぜ「-moz-user-select:none」を追加すると、どういうわけか「draggable = false」が切り捨てられて無効になる理由を知っていますか?もちろん、webkitは期待どおりに動作します。これについてはインターウェブ上には何もありません...これにいくつかの光を当てることができれば素晴らしいと思います。

ありがとう!!

編集: これは、UI要素が誤ってドラッグされないようにし、使いやすさを向上させることです。


1
これが他の人があなたのイメージをディスクに保存するのを妨げるとは思わないでしょう。ブラウザの動作を少しでも理解している人なら誰でも簡単にこれを回避できます。
ジムギャリソン

もちろん、@ JimGarrisonではありません。申し訳ありませんが、もっと具体的に説明する必要があります。UI要素の一部が動かないようにしています。適切なコンテキストでは、ユーザビリティに悪影響を及ぼします。
tmkly3 2012年

デスクトップにドラッグされる背景要素がある場合(または、さらに悪いことに、hrefコード行が作業中にブラウザウィンドウの背後のバックグラウンドで開かれる場合)、それらが非常に小さなモダンスクロールバーに近く、巻物をテストするたびに正確にバーを叩かないでください。
Garavani、2016年

1
これは非常に長い間、Firefoxの既知の問題でした(判明しました(重複しますか?))
Coderer '21

回答:


210

次のCSSプロパティを画像に設定します。

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

3
おかげで、それらも同じ場所にありますが、問題はFirefoxのバグのように見え始めています。今のところこれを解決する唯一の方法はJavaScriptを使用することだと思います。
tmkly3 2012年

すべてのブラウザで動作しました。
Milad Abooali 2015

では、どのようにして効果を示さないようにして、ドラッグイベントを発生させるのでしょうか。
Ty_

6
Firefox 47でもドラッグできることに気づきましたが、Masdowのondragstart = "return false;"を追加しました。画像タグのプロパティで修正しました。
アンドリューパテ

3
私はまだクロムをドラッグできます
lonewarrior556

54

私は自分のソリューションを共有するのを忘れていました。JSを使用せずにこれを行う方法を見つけることができませんでした。@Jeffery A Woodenが提案したCSSでカバーできないコーナーケースがいくつかあります。

これはすべてのUIコンテナに適用されます。すべての子要素で再利用されるため、各要素に適用する必要はありません。

CSS:

.unselectable {
    /* For Opera and <= IE9, we need to add unselectable="on" attribute onto each element */
    /* Check this site for more details: http://help.dottoro.com/lhwdpnva.php */
    -moz-user-select: none; /* These user-select properties are inheritable, used to prevent text selection */
    -webkit-user-select: none;
    -ms-user-select: none; /* From IE10 only */
    user-select: none; /* Not valid CSS yet, as of July 2012 */

    -webkit-user-drag: none; /* Prevents dragging of images/divs etc */
    user-drag: none;
}

JS:

var makeUnselectable = function( $target ) {
    $target
        .addClass( 'unselectable' ) // All these attributes are inheritable
        .attr( 'unselectable', 'on' ) // For IE9 - This property is not inherited, needs to be placed onto everything
        .attr( 'draggable', 'false' ) // For moz and webkit, although Firefox 16 ignores this when -moz-user-select: none; is set, it's like these properties are mutually exclusive, seems to be a bug.
        .on( 'dragstart', function() { return false; } );  // Needed since Firefox 16 seems to ingore the 'draggable' attribute we just applied above when '-moz-user-select: none' is applied to the CSS 

    $target // Apply non-inheritable properties to the child elements
        .find( '*' )
        .attr( 'draggable', 'false' )
        .attr( 'unselectable', 'on' ); 
};

これは必要以上に複雑でした。


1
$(el).on( 'dragstart'、function(e){e.preventDefault();});
ピートB

3
<img src="..." draggable="false" style="-moz-user-select: none;" ondragstart="return false;">OPのコードと一致するように記述することもできます。
Masadow 2014年

38

pointer-eventsCSSでプロパティを使用して、「なし」に設定できます

img {
    pointer-events: none;
}

編集済み

これは(クリック)イベントをブロックします。だからより良い解決策は

<img draggable="false" (dragstart)="false;" class="unselectable">

.unselectable {
  user-drag: none; 
  user-select: none;
  -moz-user-select: none;
  -webkit-user-drag: none;
  -webkit-user-select: none;
  -ms-user-select: none;
}

1
このようにすると、画像アイコンがグリフィコンのように動作するようになるので、この方法が一番好きです。
Funkodebat 2015年

9
これにより、(onclick)などのイベントが使用できなくなります。このアプローチを使用する場合は注意してください。
Nicolas Bouvrette、2015

承認された回答が最新のソフトウェアバージョンではない場合でも、この回答は有効です。これは、新しく受け入れられた答えになるはずです。@ tmkly3
progyammer

画像のクリックイベントがある場合、これにより問題が発生します。クリックイベントをブロックします
Pratap AK

12

状況によっては、divCSS を使用して画像をの背景画像にすると便利な場合があります。

<div id='my-image'></div>

次にCSSで:

#my-image {
    background-image: url('/img/foo.png');
    width: ???px;
    height: ???px;
}

ボタンと別のサイズ変更オプションを使用した実際の例については、このJSFiddleを参照してください。


9

あなたはおそらく単に頼ることができます

<img src="..." style="pointer-events: none;">

これは受け入れられる答えであるはずです。ユーザーのドラッグはFirefoxではサポートされていません。これありがとう!
Merritt6616 2018

私にとっても、 "pointer-events"が解決策でした。クロスブラウザーで動作したため(少なくとも11.2018では、 "user-drag"はFirefoxに影響を与えません)
David Dal Busco

2

特にWindows Edgeブラウザーの一般的なソリューション(-ms-user-select:noneとして、CSSルールは機能しません):

window.ondragstart = function() {return false}

注:これにより、まだクリックイベントが必要な場合(つまり、を使用できない場合)draggable="false"にすべてのimgタグに追加する必要はpointer-events: noneありませんが、ドラッグアイコン画像を表示したくない場合があります。


実際に私のために働く唯一の答え!なぜそれが高位投票されなかったのか分からない。
AldaronLau

1

画像を背景画像として設定できます。それに常駐するのでdiv、及びdivundraggableであり、画像はundraggableあろう。

<div style="background-image: url("image.jpg");">
</div>

1

画像と同じサイズで、画像の上に配置されるdiv要素を作成しました。次に、マウスイベントはイメージ要素に移動しません。

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