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 selected
al 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 hidden
atributo 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.
hidden
atributo , 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: none
con CSS.hidden
en unoption
en unselect
no 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 simplementeselected
en HTML. Parece que confundióselected
atributo conselected
propiedad, que se cambia así:myOption.selected = true;
omyOption.selected = false;
hidden
(que "normalmente se implementa en CSS" usando dedisplay: none
todos modos), usardisplay: none
enoption
y 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 :
option
elemento como primer hijo delselect
value
= ""
option
option
required
atributo alselect
Esto obligará al usuario a seleccionar otra opción para poder enviar el formulario, y los navegadores deben representar el formulario
option
como 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
:selected
atributo, para hacerlo seleccionado por defectodisabled
atributo, para que el usuario no pueda seleccionarlo.display: none
, para ocultarlo de la lista de valoresfuente
hidden
atributo a la etiqueta de opción del marcador de posición en lugar de,display: none
ya que parece que la mayoría de los navegadores móviles ignoran eldisplay: none
atributo CSS y es aún más semánticamente correcto en mi opinión.hidden
generalmente se implementa comodisplay: none
bajo 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, quehidden
funcionaran perodisplay: none
no funcionaran. ¿Puede darnos algún ejemplo?Debido a que no puede usar asignar marcadores de posición para las
select
etiquetas, 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
span
usarlolegend
y eso sería perfecto olabel
pointer-events: none
en 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
esc
botó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