La solución de Kyle funcionó perfectamente bien para mí, así que hice mi investigación para evitar cualquier J y CSS, pero solo me quedé con HTML. Agregar un valor de selectedal elemento que queremos que aparezca como encabezado obliga a que se muestre en primer lugar como un marcador de posición. Algo como:
<option selected disabled>Choose here</option>
El marcado completo debe estar en estas líneas:
<select>
<option selected disabled>Choose here</option>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
<option value="4">Four</option>
<option value="5">Five</option>
</select>
Puedes echar un vistazo a este violín y aquí tienes el resultado:

Si no desea que el tipo de texto de marcador de posición aparezca en las opciones una vez que el usuario haga clic en el cuadro de selección, simplemente agregue el hiddenatributo así:
<select>
<option selected disabled hidden>Choose here</option>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
<option value="4">Four</option>
<option value="5">Five</option>
</select>
Compruebe el violín aquí y la captura de pantalla a continuación.

hiddenatributo , utilizado en la respuesta anterior, es un atributo que se puede configurar en cualquier elemento HTML y, por lo general (pero no necesariamente), se implementa para ser equivalente a la configuracióndisplay: nonecon CSS.hiddenen unoptionen unselectno funciona en Safari, ya sea en iOS o Mac. Por lo tanto, esta respuesta ofrece solo compatibilidad parcial con el navegador.Esta es la solucion:
fuente
selected="true"no es válido. En su lugar, utilíceloselected="selected"en (X) HTML o simplementeselecteden HTML. Parece que confundióselectedatributo conselectedpropiedad, que se cambia así:myOption.selected = true;omyOption.selected = false;hidden(que "normalmente se implementa en CSS" usando dedisplay: nonetodos modos), usardisplay: noneenoptiony no funciona en Safari; la opción sigue apareciendo.La forma correcta y semántica es usar una opción de etiqueta de marcador de posición :
optionelemento como primer hijo delselectvalue= ""optionoptionrequiredatributo alselectEsto obligará al usuario a seleccionar otra opción para poder enviar el formulario, y los navegadores deben representar el formulario
optioncomo desee:Sin embargo, la mayoría de los navegadores lo mostrarán como normal
option. Así que tendremos que arreglarlo manualmente, agregando lo siguiente aoption:selectedatributo, para hacerlo seleccionado por defectodisabledatributo, para que el usuario no pueda seleccionarlo.display: none, para ocultarlo de la lista de valoresfuente
hiddenatributo a la etiqueta de opción del marcador de posición en lugar de,display: noneya que parece que la mayoría de los navegadores móviles ignoran eldisplay: noneatributo CSS y es aún más semánticamente correcto en mi opinión.hiddengeneralmente se implementa comodisplay: nonebajo el capó (y la especificación sugiere explícitamente esto como una implementación "típica"). Como tal, me sorprendería si hubiera navegadores, móviles o de otro tipo, quehiddenfuncionaran perodisplay: noneno funcionaran. ¿Puede darnos algún ejemplo?Debido a que no puede usar asignar marcadores de posición para las
selectetiquetas, no creo que haya ninguna forma de hacer exactamente lo que está pidiendo con HTML / CSS puro. Sin embargo, puede hacer algo como esto:"Seleccionar idioma" aparecerá en el menú desplegable, pero una vez que se seleccione otra opción, no será posible volver a seleccionarla.
Espero que eso ayude.
fuente
Prueba esto:
En el CSS:
fuente
Tengo una solución con un intervalo que se muestra sobre la selección hasta que se realiza una selección. El intervalo muestra el mensaje predeterminado, por lo que no está en la lista de propuestas:
HTML:
CSS:
Javascript (con JQuery):
Hice un jsfiddle para demostración . Probado con Firefox e IE8.
fuente
spanusarlolegendy eso sería perfecto olabelpointer-events: noneen su intervalo para permitir que los clics pasen para seleccionar.por supuesto, puede mover el css a un archivo css si lo desea, y poner un script para capturar el
escbotón y seleccionar el deshabilitado nuevamente. A diferencia de las otras respuestas similares que pusevalue="", esto es así que si envía los valores de su lista de selección con un formulario, no contendrá "eligió algo". En asp.net mvc 5 enviado como json compilado convar obj = { prop:$('#ddl').val(),...};yJSON.stringify(obj);el valor de prop será nulo.fuente
Op1:
Op2:
fuente