Cómo cambiar el color del texto de la primera opción de selección

5 minutos de lectura

Avatar de usuario de Joshua
Josué

Tengo un elemento de selección que tiene varios elementos. Quiero cambiar el color de su primer elemento, pero parece que el color solo se muestra cuando hace clic en el menú desplegable de selección. Lo que quiero es cambiar el color (como el gris) cuando se carga la página para que los usuarios puedan ver que el color de la primera opción es diferente.

Vea el ejemplo aquí…
http://jsbin.com/acucan/4/

CSS:

select{
  width: 150px;
  height: 30px;
  padding: 5px;
  color: green;
}
select option { color: black; }
select option:first-child{
  color: green;
}

html:

<select>
    <option>Item1</option>
    <option>Item2</option>
    <option>Item3</option>
</select>

  • No entiendo lo que estás tratando de lograr. Los elementos solo son visibles cuando el menú está abierto. Entonces, ¿qué hay de malo en su solución?

    – Wottensprels

    12 de julio de 2013 a las 6:48

  • Sprottenwels, lo siento, no aclaré la pregunta 🙁

    – Josué

    12 de julio de 2013 a las 7:02

  • Hola Máximo, lo siento. Hice mi mejor esfuerzo para buscar en este sitio… pero no pude encontrar la respuesta.

    – Josué

    12 de julio de 2013 a las 7:05

  • ¿Responde esto a tu pregunta? ¿Cómo cambio el color del texto de la opción del cuadro de selección?

    – Flamm

    8 de julio de 2020 a las 12:47

Si el primer elemento se utilizará como marcador de posición (valor vacío) y su selección es required entonces puedes usar el :invalid pseudo-clase para apuntarlo.

select {
  -webkit-appearance: menulist-button;
  color: black;
}

select:invalid {
  color: green;
}
<select required>
  <option value="">Item1</option>
  <option value="Item2">Item2</option>
  <option value="Item3">Item3</option>
</select>

  • Esto también coloreó las opciones válidas en la lista para mí. Pude mantener el color esperado con un select:invalid option:not(:disabled) { color: black } regla

    – AlbinoSequía

    3 jun 2019 a las 22:45

  • ¡Esta es una forma realmente inteligente de resolver este problema! Gracias. funcionó perfectamente

    – Melvin Idea

    14 de agosto de 2019 a las 13:52

  • Por qué necesitamos -webkit-appearance: menulist-button?

    – Vitaly Zdanévich

    29 sep 2019 a las 20:52

  • La apariencia predeterminada ignorará el cambio de color, ya que muestra el elemento con el estilo nativo de la plataforma.

    – Óscar Barrett

    1 de octubre de 2019 a las 1:53

avatar de usuario de mnsr
mnsr

¿Qué pasa con esto?

select{
  width: 150px;
  height: 30px;
  padding: 5px;
  color: green;
}
select option { color: black; }
select option:first-child{
  color: green;
}
<select>
  <option>one</option>
  <option>two</option>
</select>

http://jsbin.com/acucan/9

  • ¡Asombroso! Nunca pensé en eso, gracias 🙂

    – Josué

    12 de julio de 2013 a las 7:00

  • ¿Cómo se cambia el color a negro una vez que se selecciona una opción?

    – sQuijeW

    17/10/2013 a las 17:45

  • todo <option> tener el color:black para mí. (Cromo/Mac)

    – Ametralladora

    31 de marzo de 2014 a las 12:07

  • Para que esto funcione en los navegadores Webkit en Mac (Chrome y Safari), deberá deshabilitar Chrome para seleccionar usando -webkit-appearance:none. Por supuesto, eso habilitará el estilo, pero también eliminará todo el resto del cromo seleccionado, por lo que también deberá cambiar el estilo de todo lo demás en el elemento. Violín: jsfiddle.net/wFP44/1

    – Ben Dyer

    13/04/2014 a las 18:20


  • @sQuijeW Eso es exactamente lo que quiero saber. ¿Alguien tiene alguna pista sobre esto?

    – JohnnyThan

    19 dic 2017 a las 20:35

Para la Opción 1 utilizada como marcador de posición:

select:invalid { color:grey; }

Todas las demás opciones:

select:valid { color:black; }

  • La mejor respuesta hasta ahora.

    – Awais Tariq

    14 de octubre de 2020 a las 6:06


  • Este trabajo para mí. ¡La mejor respuesta!

    – Gabriel Fagnani

    15 de abril de 2022 a las 9:12

Aquí tienes una forma para que cuando selecciones una opción, se ponga negra. Cuando lo vuelve a cambiar al marcador de posición, vuelve al color del marcador de posición (en este caso, rojo).

http://jsfiddle.net/wFP44/166/

Requiere que las opciones tengan valores.

$('select').on('change', function() {
  if ($(this).val()) {
return $(this).css('color', 'black');
  } else {
return $(this).css('color', 'red');
  }
});
select{
  color: red;
}
select option { color: black; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select>
<option value="">Pick one...</option>
<option value="test1">Test 1</option>
<option value="test2">Test 2</option>
<option value="test3">Test 3</option>
</select>

Puedes hacer esto usando CSS: JSFiddle

HTML:

<select>
    <option>Text 1</option>
    <option>Text 2</option>
    <option>Text 3</option>
</select>

CSS:

select option:first-child { color:red; }

O si es absolutamente necesario usar JavaScript (no recomendado para esto): JSFiddle

JavaScript:

$(function() {
    $("select option:first-child").addClass("highlight");
});

CSS:

.highlight { color:red; }

  • Desafortunadamente, ninguno de estos funciona en Chrome 60 (PC), incluso con el modificador !important agregado

    – Bill_VA

    10 de agosto de 2017 a las 17:26

avatar de usuario de smoyth
suave

Tenía muchas ganas de esto (¡los marcadores de posición deberían tener el mismo aspecto para los cuadros de texto que para los cuadros de selección!) Y el CSS directo no funcionaba en Chrome. Aquí esta lo que hice:

Primero asegúrese de que su etiqueta de selección tenga un .has-prompt clase.

Luego inicialice esta clase en algún lugar de document.ready.

# Adds a class to select boxes that have prompt currently selected.
# Allows for placeholder-like styling.
# Looks for has-prompt class on select tag.
Mess.Views.SelectPromptStyler = Backbone.View.extend
  el: 'body'

  initialize: ->
    @$('select.has-prompt').trigger('change')

  events:
    'change select.has-prompt': 'changed'

  changed: (e) ->
    select = @$(e.currentTarget)
    if select.find('option').first().is(':selected')
      select.addClass('prompt-selected')
    else
      select.removeClass('prompt-selected')

Luego en CSS:

select.prompt-selected {
  color: $placeholder-color;
}

  • Desafortunadamente, ninguno de estos funciona en Chrome 60 (PC), incluso con el modificador !important agregado

    – Bill_VA

    10 de agosto de 2017 a las 17:26

Avatar de usuario de Flo Develop
Flo Desarrollar

Este código funciona en Chromium y cambia el color a negro una vez que se selecciona una opción:

select {
  appearance: none;
}

select:invalid {
  color: green;
}

select option {
  color: black;
}

¿Ha sido útil esta solución?