Dans la plupart des navigateurs, cela peut être réalisé en utilisant des variations propriétaires de la fonction proposé-mais-maintenant-défini CSS3 user-select
propriété :
*.unselectable {
-moz-user-select: 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'option unselectable
de l'élément que vous souhaitez rendre non sélectionnable. Vous pouvez définir ce paramètre à l'aide d'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 placer un attribut dans la balise de début de chaque élément à l'intérieur de la balise <div>
. Si cela pose un problème, vous pouvez utiliser JavaScript pour effectuer cette opération de manière 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"));
Mise à jour du 30 avril 2014 : Cette traversée de l'arbre doit être ré-exécutée chaque fois qu'un nouvel élément est ajouté à l'arbre, mais il semble, d'après un commentaire de @Han, qu'il est possible d'éviter cela en ajoutant un mousedown
qui définit unselectable
sur la cible de l'événement. Voir http://jsbin.com/yagekiji/1 pour les détails.
Cela ne couvre toujours pas toutes les possibilités. S'il est impossible d'initier des sélections dans des éléments non sélectionnables, dans certains navigateurs (IE et Firefox, par exemple), il est encore impossible d'empêcher les sélections qui commencent avant et se terminent après l'élément non sélectionnable sans rendre l'ensemble du document non sélectionnable.
8 votes
Peuvent être des éléments à l'intérieur de l'élément witch h
10 votes
Il y a un bug dans certains navigateurs où le fait de "Tout sélectionner" (CTRL+A et CMD+A) sélectionne encore des choses. Ce problème peut être résolu en utilisant une couleur de sélection transparente :
::selection { background: transparent; } ::-moz-selection { background: transparent; }
15 votes
Je me permets d'insister sur le fait qu'il ne faut pas faire cela. D'après mon expérience, j'ai plus souvent qu'à mon tour vouloir pour sélectionner un texte qui sert également de bouton, afin de le copier-coller ailleurs. Il serait incroyablement exaspérant de ne pas pouvoir le faire parce qu'un développeur web s'est ingénié à désactiver volontairement cette fonction pour moi. Alors, s'il vous plaît, ne le faites pas à moins que vous n'en ayez très envie, très pour une bonne raison.
1 votes
@cram2208 Je suis d'accord sauf que l'autre question liée est le duplicata. Cette question est plus ancienne et a plus/meilleures réponses.
3 votes
En 2017, il est préférable d'utiliser
postcss
yautoprefixer
et définir la version du navigateur, puispostcss
rendre tout cool.1 votes
L'interface utilisateur a changé. En 2019, les trois éléments mentionnés se trouvent désormais dans un menu hamburger en haut à gauche. "Tags" y "Utilisateurs" s'y trouvent, et "Questions" s'appelle désormais "Stack Overflow" (avec une icône devant).