2010-09-23 12 views
188

Possible en double:
CSS rule to disable text selection highlightingComment désactiver la sélection de texte avec CSS ou JavaScript?

Je fais un HTML/CSS/galerie jQuery, avec plusieurs pages.

J'ai en effet un bouton "suivant", qui est un lien simple avec un écouteur jQuery.

Le problème est que si l'utilisateur clique plusieurs fois sur le bouton, le texte du bouton est sélectionné, puis la ligne de texte complète. Dans mon design vraiment sombre, c'est vraiment moche et absurde.

Alors voici ma question: Pouvez-vous désactiver la sélection de texte sur HTML? Sinon, je vais terriblement manquer flash et son haut niveau de configuration sur textfields ...

Répondre

255
<div 
style="-moz-user-select: none; -webkit-user-select: none; -ms-user-select:none; user-select:none;-o-user-select:none;" 
unselectable="on" 
onselectstart="return false;" 
onmousedown="return false;"> 
    Blabla 
</div> 
+0

Ne fonctionnent toujours pas dans Safari et Chrome. Je garde cette solution, mais j'implémente aussi un travail pour le reste: à chaque clic, remplacez le html du lien par le html du lien. le texte est alors mis à jour, et la sélection s'éteint après 1 demi seconde! – daviddarx

+1

Le CSS pour webkit est similaire à celui de Firefox, j'ai édité la réponse pour l'ajouter. – Jerome

+1

@daviddarx Fonctionne dans Chrome 17 et Safari 5. – mhenry1384

4

Je ne sais pas si vous pouvez le désactiver, mais vous pouvez changer les couleurs de celui-ci :)

myDiv::selection, 
myDiv::-moz-selection, 
myDiv::-webkit-selection { 
    background:#000; 
    color:#fff; 
} 

correspondre les couleurs Ensuite, il suffit à votre conception de « Darky » et voir ce qui se passe :)

+1

Vous pouvez compresser ceci en une seule règle CSS. myDiv.webkit :: - sélection de webkit, myDiv.moz :: - moz-selection, myDiv.normal :: selection { fond: # 000; couleur: #fff; } – Yahel

+0

@yc: utilisez un sélecteur multiple, je vais éditer, merci :) – Kyle

+0

#galleryPagesNavigation a.normal :: selection { \t \t background: # 000; \t} \t #galleryPagesNavigation a.moz :: - moz-sélection { \t \t background: # 000; \t} \t #galleryPagesNavigation a.webkit :: - webkit-sélection { \t background: # 000; \t} – daviddarx

7

vous pouvez utiliser JavaScript pour faire ce que vous voulez:


if (document.addEventListener !== undefined) { 
    // Not IE 
    document.addEventListener('click', checkSelection, false); 
} else { 
    // IE 
    document.attachEvent('onclick', checkSelection); 
} 

function checkSelection() { 
    var sel = {}; 
    if (window.getSelection) { 
     // Mozilla 
     sel = window.getSelection(); 
    } else if (document.selection) { 
     // IE 
     sel = document.selection.createRange(); 
    } 

    // Mozilla 
    if (sel.rangeCount) { 
     sel.removeAllRanges(); 
     return; 
    } 

    // IE 
    if (sel.text > '') { 
     document.selection.empty(); 
     return; 
    } 
} 

Boîte à savon: Vous ne devriez vraiment pas vous tromper avec l'agent utilisateur du client de cette manière. Si le client souhaite sélectionner des éléments sur le document, il doit pouvoir sélectionner des éléments dans le document. Peu importe si vous n'aime pas la couleur de surbrillance, parce que vous ne sont pas celui qui regarde le document.

+22

** Refuttal de boîte de savon **: J'ai un bouton qui, lorsqu'on clique, exécute un peu de javascript pour changer l'échelle d'une image. Il n'y a aucune raison pour que l'utilisateur sélectionne le "+" ou "-" à l'intérieur de ce bouton, mais la plupart des navigateurs web finiront par le texte sélectionné après quelques clics. De même, si vous faites du glisser-déposer via javascript, vous ne voulez pas sélectionner les éléments sur lesquels vous glissez quelque chose. Cela dit, j'apprécie le fait que vous avez toujours répondu à la question même si vous n'êtes pas d'accord avec l'objectif. – Robert

+2

Je reconnais qu'il y a des circonstances où cela peut être un choix de conception valable. Mais la question a mentionné qu'il manquerait Flash avec l'implication qu'il manquerait de pouvoir contrôler le client de l'utilisateur. Je ne suis pas d'accord avec ce mode de pensée. En tant qu'utilisateur, je n'aime pas que le site redéfinisse le fonctionnement de mon logiciel local. C'est aussi un problème d'accessibilité. –

+1

@jsumners Il y a _plenty_ de circonstances. Faites des réflexions originales et vous aurez plusieurs scénarios. Ce n'est pas parce que les navigateurs activent cela par défaut que nous devons être conformes en tant que programmeurs. En outre, l'informatique mobile élimine les moyens traditionnels de sélection de texte. Cela devient donc de plus en plus pertinent. Vous donnez l'impression que c'est une sorte de hack obsolète ou quelque chose, c'est une fonction supportée __ (voir réponses ci-dessus.) –

25

Essayez ce code CSS pour la compatibilité entre les navigateurs.

-webkit-user-select: none; 
-khtml-user-select: none; 
-moz-user-select: none; 
-o-user-select: none; 
user-select: none; 
207

MISE À JOUR Janvier 2017:

Selon Can I use, le user-select est actuellement pris en charge dans tous les navigateurs sauf Internet   Explorer 9 et les versions antérieures (mais malheureusement encore a besoin d'un préfixe fournisseur).


Toutes les variations CSS correctes sont:

.noselect { 
 
    -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 */ 
 
}
<p> 
 
    Selectable text. 
 
</p> 
 
<p class="noselect"> 
 
    Unselectable text. 
 
</p>


Notez que c'est une fonction non standard (c.-à-pas une partie de spécification) . Il n'est pas garanti de fonctionner partout, et il peut y avoir des différences dans la mise en œuvre parmi les navigateurs et dans le futur les navigateurs peuvent abandonner le support pour cela.Les informations peuvent être trouvées dans Mozilla Developer Network documentation.

+8

"correct variations CSS" ...? La seule "variation" CSS correcte est 'user-select' – BoltClock

+14

ok donc les autres sont des préfixes spécifiques au vendeur, je suppose que quelqu'un d'autre classerait ces variations correctes. – Blowsie

+3

Ha ha, Avez-vous l'intention de gagner tous votre représentant avec la même réponse? NICE :) – Starx

Questions connexes