2010-02-13 7 views
50

J'ai cherché ce à travers le web et ne peut même trouver quelqu'un d'autre même demander cela, et encore moins une solution ...Changer la couleur de surbrillance lors de la sélection du texte dans une entrée de texte HTML

est-il un moyen de changer la couleur de la zone de surbrillance dans une entrée de texte lorsque le texte est sélectionné? Pas la bordure en surbrillance ou l'arrière-plan, mais la partie qui apparaît autour du texte lorsque vous avez sélectionné le texte.

+0

Je recommande, que si vous utilisez text-shadow, vous devez être très prudent avec cela, comme décrit ici, http://www.jqui.net/tips-tricks/highlight-text-et-common-design-failure/et aussi ici http://www.welcomebrand.co.uk/thoughts/using-text-shadow-dont-forget-highlighting/ :) – Val

Répondre

0

Merci pour les liens, mais il ne semble que si le texte actuel en soulignant que n'est pas exposé. En ce qui concerne le problème actuel, j'ai opté pour une approche différente en éliminant le besoin d'une saisie de texte et en utilisant innerHTML avec du JavaScript. Non seulement il contourne la mise en évidence du texte, mais il a l'air beaucoup plus propre.

Ce granular d'un tweak à un contrôle de formulaire HTML est juste un autre bon argument pour éliminer les contrôles de formulaire tout à fait. Haha!

+7

vous pouvez utiliser HTML5 tag éditable contenu sur un élément pour créer le même effet avec la sélection :: CSS, bien que cela ne fonctionnera pas avec les anciens navigateurs – Alex

+0

@Alex Content editable est étonnamment efficace pour les anciens navigateurs, il a fonctionné depuis IE 5.5 . –

+0

Vérifiez la réponse de Saeed em, vous couvre tout le chemin – bobbdelsol

42
+0

Ce n'est pas exactement ce que je Je cherche, mais c'est vraiment une bonne chose à savoir. Je dois faire cela mais à l'intérieur d'une boîte de saisie de texte. J'ai essayé d'appliquer le code des exemples à une entrée et cela n'a pas fonctionné. – Eric

+3

@Eric: Je crains que cela ne puisse pas être fait à l'intérieur de la zone de texte, car je n'ai jamais rencontré une telle chose, peut-être un autre a. – Sarfraz

+2

Bien que cela puisse théoriquement répondre à la question, [il serait préférable] (// meta.stackoverflow.com/q/8259) d'inclure les parties essentielles de la réponse ici, et de fournir le lien pour référence. –

-5

Je suppose que cela peut aider:

styles de sélection

Il est possible de définir la couleur et le fond du texte l'utilisateur sélectionne.

Essayez ci-dessous. Si vous sélectionnez quelque chose et qu'il ressemble à ceci, votre navigateur prend en charge les styles de sélection.

Ceci est le paragraphe avec normal ::selection.

Ceci est le paragraphe avec ::-moz-selection. Il s'agit du paragraphe avec ::-webkit-selection.

Testsheet:

p.normal::selection { 
    background:#cc0000; 
    color:#fff; 
} 

p.moz::-moz-selection { 
    background:#cc0000; 
    color:#fff; 
} 

p.webkit::-webkit-selection { 
    background:#cc0000; 
    color:#fff; 
} 

Quoted de Quirksmode

+2

Mais est-ce que cela fonctionne dans un champ de saisie de texte (par opposition à un tag p), comme l'OP demandé? –

18

Je sais que c'est une vieille question, mais pour tous ceux qui ne viennent à travers elle, cela peut être fait en utilisant contenteditable comme indiqué in this JSFiddle.

Bravo à Alex qui l'a mentionné dans les commentaires (je ne l'ai pas vu jusqu'à maintenant!)

+5

+1 * Ceci devrait être la réponse acceptée. –

+2

Les navigateurs OMG sont tellement stupides de ne pas supporter cela hors de la boîte! –

0

@ Mike Eng,

En sélectionnant la couleur de fond du texte, la couleur du texte peut être modifié à l'aide de :: sélection, notez que :: sélection œuvres en chrome, pour faire que travailler dans les navigateurs basés sur firefox essayer celui-ci :: - moz-selection

Essayez l'extrait de code suivant dans reset.css ou la page css où exactement vous voulez appliquer l'effet.

::selection{ 
    //Works only for the chrome browsers 
    background-color: #CFCFCF; //This turns the background color to Gray 
    color: #000; // This turns the selected font color to Black 
} 

::-moz-selection{ 
    //Works for the firefox based browsers 
    background-color: #CFCFCF; //This turns the background color to Gray 
    color: #000; // This turns the selected font color to Black 
} 

Le code ci-dessus fonctionnera même dans les zones de saisie.

25

c'est le code.

/*** Works on common browsers ***/ 
::selection { 
    background-color: #352e7e; 
    color: #fff; 
} 

/*** Mozilla based browsers ***/ 
::-moz-selection { 
    background-color: #352e7e; 
    color: #fff; 
} 

/***For Other Browsers ***/ 
::-o-selection { 
    background-color: #352e7e; 
    color: #fff; 
} 

::-ms-selection { 
    background-color: #352e7e; 
    color: #fff; 
} 

/*** For Webkit ***/ 
::-webkit-selection { 
    background-color: #352e7e; 
    color: #fff; 
} 
+3

Nice fonctionne pour tous les navigateurs. J'aime même les couleurs qu'il a choisies – bobbdelsol

+3

C'est la bonne réponse – mdikici

+2

Nice, sauf que cela ne répond pas à la question, bien sûr. –

5

Toutes les réponses ici sont correctes en ce qui concerne l'élément pseudo ::selection, et comment il fonctionne. Toutefois, la question ne demande en fait spécifiquement comment l'utiliser sur entrées de texte.

La seule façon de le faire est d'appliquer la règle par l'intermédiaire d'un parent de l'entrée (tout parent pour cette matière):

.parent ::-webkit-selection, [contenteditable]::-webkit-selection { 
 
\t background: #ffb7b7; 
 
} 
 

 
.parent ::-moz-selection, [contenteditable]::-moz-selection { 
 
\t background: #ffb7b7; 
 
} 
 

 
.parent ::selection, [contenteditable]::selection { 
 
\t background: #ffb7b7; 
 
} 
 

 
/* Aesthetics */ 
 
input, [contenteditable] { 
 
    border:1px solid black; 
 
    display:inline-block; 
 
    width: 150px; 
 
    height: 20px; 
 
    line-height: 20px; 
 
    padding: 3px; 
 
}
<span class="parent"><input type="text" value="Input" /></span> 
 
<span contenteditable>Content Editable</span>

-1

Essayez ce code à utiliser:

/* For Mozile Firefox Browser */ 

::-moz-selection { background-color: #4CAF50; } 

/* For Other Browser*/ 
::selection { background-color: #4CAF50; } 
+0

Cela n'ajoute rien à la réponse existante de Conspiria. –

+0

Mozile? Ils doivent vraiment vous poursuivre en justice ... –

1

est ici que le bât blesse:

 ::selection { 
     background: #ffb7b7; /* WebKit/Blink Browsers / 
    } 
    ::-moz-selection { 
     background: #ffb7b7; / Gecko Browsers */ 
    }
Dans le sélecteur de sélection, la couleur et l'arrière-plan sont les seules propriétés qui fonctionnent. Ce que vous pouvez faire pour une touche supplémentaire, c'est changer la couleur de sélection pour différents paragraphes ou différentes sections de la page.

Tout ce que je ne faisais utiliser différentes couleurs de sélection pour les paragraphes avec différentes classes:

 p.red::selection { 
     background: #ffb7b7; 
    } 
    p.red::-moz-selection { 
     background: #ffb7b7; 
    } 
    p.blue::selection { 
     background: #a8d1ff; 
    } 
    p.blue::-moz-selection { 
     background: #a8d1ff; 
    } 
    p.yellow::selection { 
     background: #fff2a8; 
    } 
    p.yellow::-moz-selection { 
     background: #fff2a8; 
    }
Notez comment les sélecteurs ne sont pas combinés, même si> le bloc de style fait la même chose. Il ne fonctionne pas si vous les combinez:

<pre>/* Combining like this WILL NOT WORK */ 
p.yellow::selection, 
p.yellow::-moz-selection { 
    background: #fff2a8; 
}</pre> 

C'est parce que les navigateurs ignorent tout le sélecteur s'il y a une partie qu'ils ne comprennent pas ou ne sont pas valides. Il y a quelques exceptions à cela (IE 7?) Mais pas par rapport à ces sélecteurs.

DEMO

LINK WHERE INFO IS FROM

Questions connexes