Empêcher la sélection en HTML

j'ai une div sur une page HTML et chaque fois que j'appuie sur la souris et que je la déplace, elle montre que le curseur" ne peut pas tomber " comme il sélectionne quelque chose. Est-il un moyen de désactiver la sélection? J'ai essayé CSS user-select sans succès.

75
demandé sur Whitewall 2010-02-24 15:41:47

5 réponses

les variantes propriétaires de user-select fonctionneront dans la plupart des navigateurs modernes:

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

pour IE < 10 et Opera, vous devrez utiliser l'attribut unselectable de l'élément que vous souhaitez être unselectable. Vous pouvez définir ceci en utilisant un attribut en HTML:

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

malheureusement cette propriété n'est pas héritée, ce qui signifie que vous devez mettre un attribut dans la balise de début de chaque élément à l'intérieur du <div> . Si c'est un problème, vous pourrait plutôt utiliser JavaScript pour le faire de façon récursive pour les descendants d'un élément:

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"));
151
répondu Tim Down 2012-08-09 09:49:58

Il semble CSS utilisateur-sélectionnez ne pas empêcher l'image de glisser-déposer... si..

HTML:

<img src="ico.png" width="20" height="20" alt="" unselectable="on" /> Blabla bla blabla

CSS:

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

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

JS:

$(function(){
    $('*:[unselectable=on]').mousedown(function(event) {
        event.preventDefault();
        return false;
    });
});
10
répondu molokoloco 2011-03-25 17:19:46

j'utilise cancelBubble=true et stopPropagation() dans la souris et déplacer les gestionnaires.

5
répondu kennebec 2015-11-08 18:23:31

event.preventDefault() semble faire l'affaire (testé en IE7-9 et Chrome):

jQuery('#slider').on('mousedown', function (e) {
    var handler, doc = jQuery(document);
    e.preventDefault();
    doc.on('mousemove', handler = function (e) {
        e.preventDefault();
        // refresh your screen here
    });
    doc.one('mouseup', function (e) {
        doc.off('mousemove', handler);
    });
});
4
répondu leaf 2013-05-22 15:29:42

Avez-vous une sorte d'image transparente de votre sélection? Habituellement, l'icône "déverrouillage" apparaît lorsque vous faites glisser une image. Sinon, il sélectionne normalement texte lorsque vous faites glisser. Si c'est le cas, vous pourriez avoir à mettre l'image derrière tout en utilisant z-index.

1
répondu Michal Ciechan 2010-02-24 12:46:22