I need to disable the highlighting of selected text on my web app. I have a good reason for doing this and know that this is generally a bad idea. But I need to do it anyway. It doesn't matter if I need to use CSS or JS to do it. What I'm mainly going for is the removal of the blue color given to highlighted elements.
-
1This question can't really be answered in it's current form. What is causing the highlighting? Are you talking about keyword highlighting, or something else, like rollovers? We need more information.zombat– zombat2009-08-03 20:30:57 +00:00Commented Aug 3, 2009 at 20:30
-
what do you mean exactly by highlighting? When I left-click and hold the mouse button and drag over the text, it gets highlighted. Is that what you mean?Russ Cam– Russ Cam2009-08-03 20:31:15 +00:00Commented Aug 3, 2009 at 20:31
-
Do you mean selection? Like when you drag over text? There are several ways to do it in IE and different ways to do it in other browsers.Nosredna– Nosredna2009-08-03 20:32:58 +00:00Commented Aug 3, 2009 at 20:32
-
Browsers usually select with a gray or black background, so do you mean the coloring of links?Nosredna– Nosredna2009-08-03 20:37:01 +00:00Commented Aug 3, 2009 at 20:37
8 Answers
You can use the CSS pseudo class selector ::selection and ::-moz-selection for Firefox.
For example:
::-moz-selection {
background-color: transparent;
color: #000;
}
::selection {
background-color: transparent;
color: #000;
}
.myclass::-moz-selection,
.myclass::selection { ... }
2 Comments
I believe what you mean is selecting text (e.g. dragging the mouse across to highlight). If so, this will cancel the selection action in IE and Mozilla:
window.onload = function() {
if(document.all) {
document.onselectstart = handleSelectAttempt;
}
document.onmousedown = handleSelectAttempt;
}
function handleSelectAttempt(e) {
var sender = e && e.target || window.event.srcElement;
if(isInForm(sender)) {
if (window.event) {
event.returnValue = false;
}
return false;
}
if (window.event) {
event.returnValue = true;
}
return true;
}
function isInForm = function(element) {
while (element.parentNode) {
if (element.nodeName.ToUpperCase() == 'INPUT'
|| element.nodeName.ToUpperCase() == 'TEXTAREA') {
return true;
}
if (!searchFor.parentNode) {
return false;
}
searchFor = searchFor.parentNode;
}
return false;
}
2 Comments
I just used * to disable highlighting or outline highlight for all elements
*{
outline: none;
}
answer reference: How to remove focus border (outline) around text/input boxes? (Chrome)
Comments
I think you're looking for the :focus pseudo class. Try this:
input:focus {
background-color: #f0f;
}
It will give your input a pretty purple/pink color when selected.
I'm not sure which properties you have to (un)set, but I think you can find out yourself using trial and error.
Also note that the highlighting or absence thereof is browser specific!
Comments
If your ultimate goal is to make copy and paste of text more difficult, Javascript and CSS are not the right technology because you cannot disable the browser's view-source function.
Some other ideas (none of them ideal):
- a java applet (you control both display and retrieval of text)
- same in a different browser plugin (flash, silverlight, etc.)
- server-side created images (poor performance)