Estoy usando marcadores de posición para las entradas de texto, que está funcionando bien. Pero también me gustaría usar un marcador de posición para mis cajas de selección. Por supuesto, solo puedo usar este código:
<select>
<option value="">Select your option</option>
<option value="hurr">Durr</option>
</select>
Pero el 'Seleccione su opción' está en negro en lugar de gris claro. Entonces, mi solución podría estar basada en CSS. jQuery también está bien.
Esto solo hace que la opción sea gris en el menú desplegable (así que después de hacer clic en la flecha):
option:first {
color: #999;
}
La pregunta es: ¿cómo crean las personas los marcadores de posición en las cajas de selección? Pero ya ha sido respondido, saludos.
Y usar esto da como resultado que el valor seleccionado siempre sea gris (incluso después de seleccionar una opción real):
select {
color: #999;
}
html
css
html-select
placeholder
Thomas
fuente
fuente
Respuestas:
Un no CSS - sin respuesta JavaScript / jQuery:
fuente
<select> <option value="" disabled selected>Select your option</option> </select>
Me topé con esta pregunta, y esto es lo que funciona en Firefox y Chrome (al menos):
La opción Desactivado detiene la
<option>
selección con el mouse y el teclado, mientras que el solo uso'display:none'
permite al usuario seleccionar a través de las flechas del teclado. El'display:none'
estilo solo hace que el cuadro de lista se vea 'agradable'.Nota: el uso de un
value
atributo vacío en la opción "marcador de posición" permite la validación (atributo requerido) para evitar tener el "marcador de posición", por lo que si la opción no se cambia, pero es obligatorio, el navegador debe solicitar al usuario que elija una opción de la lista.Actualización (julio de 2015):
Se confirma que este método funciona en los siguientes navegadores:
Actualización (octubre de 2015):
Quité el
style="display: none"
favor de HTML5 atributohidden
que tiene un amplio apoyo. Elhidden
elemento tiene rasgos similaresdisplay: none
a los de Safari, Internet Explorer (Project Spartan necesita verificación) dondeoption
está visible en el menú desplegable, pero no es seleccionable.Actualización (enero de 2016):
Cuando el
select
elemento estárequired
, permite el uso de la:invalid
pseudoclase CSS que le permite diseñar elselect
elemento cuando está en su estado de "marcador de posición".:invalid
funciona aquí debido al valor vacío en el marcador de posiciónoption
.Una vez que se ha establecido un valor,
:invalid
se eliminará la pseudoclase. Opcionalmente, también puede usar:valid
si lo desea.La mayoría de los navegadores admiten esta pseudoclase. Internet Explorer 10 y posterior. Esto funciona mejor con
select
elementos de estilo personalizados ; en algunos casos, es decir (Mac en Chrome / Safari), deberá cambiar la apariencia predeterminada delselect
cuadro para que se muestren ciertos estilos, es decir,background-color
ycolor
. Puede encontrar algunos ejemplos y más sobre compatibilidad en developer.mozilla.org .Apariencia de elemento nativo Mac en Chrome:
Usando el elemento de borde alterado Mac en Chrome:
fuente
display:none
estilo.:invalid
mucho antes que yo.color
las opciones en los navegadores compatibles como en este violín . Esto ayudaría a reforzar que el discapacitadooption
es un marcador de posición. (Editar: veo que MattW ya ha cubierto esto en su respuesta)Para un campo obligatorio, existe una solución de CSS puro en los navegadores modernos:
fuente
required
funcionar, por lo que no sirve de nada si quieres que el campo sea opcional.:required
selector no es compatible con IE8 y versiones inferiores. El:invalid
selector no es compatible con IE9 y versiones posteriores. quirksmode.org/css/selectorsrequired
condición es la que hace que el navegador aplique la:invalid
pseudoclase cuando se selecciona el marcador de posición.[value=""]
no funcionará como reemplazo porque lo que se actualiza mediante la interacción del usuario es la propiedad del valor , pero esa sintaxis CSS se refiere a un atributo (inexistente) .Algo como esto:
HTML:
CSS:
JavaScript:
Ejemplo de trabajo: http://jsfiddle.net/Zmf6t/
fuente
Acabo de agregar un atributo oculto en un me
option
gusta a continuación. Está funcionando bien para mí.fuente
La solución a continuación también funciona en Firefox, sin JavaScript:
fuente
Tuve el mismo problema y mientras buscaba me encontré con esta pregunta, y después de encontrar una buena solución para mí, me gustaría compartirla con ustedes en caso de que alguien pueda beneficiarse de ella.
Aquí está:
HTML:
CSS:
JavaScript:
Después de que el cliente realiza la primera selección, no hay necesidad de color gris, por lo que el código JavaScript elimina la clase
place_holder
.Gracias a @ user1096901, como solución alternativa para el navegador Internet Explorer, puede agregar la
place_holder
clase nuevamente en caso de que la primera opción se seleccione nuevamente :)fuente
No hay necesidad de JavaScript o CSS, solo tres atributos:
No muestra la opción en absoluto; solo establece el valor de la opción como el predeterminado.
Sin embargo, si simplemente no le gusta un marcador de posición que sea del mismo color que el resto , puede arreglarlo en línea de esta manera:
Obviamente, puede separar las funciones y al menos el CSS de la selección en archivos separados.
Nota: la función de carga corrige un error de actualización.
fuente
El usuario no debe ver el marcador de posición en las opciones seleccionadas. Sugiero usar el
hidden
atributo para la opción de marcador de posición, y no necesita elselected
atributo para esta opción. Puedes ponerlo como el primero.fuente
select:invalid
también es válido.required
Aquí he modificado la respuesta de David (respuesta aceptada). En su respuesta, puso el atributo desactivado y seleccionado en la
option
etiqueta, pero cuando también ponemos una etiqueta oculta, se verá mucho mejor.Al agregar un atributo oculto adicional en la
option
etiqueta, evitará que la opción "Seleccione su opción" se vuelva a seleccionar después de seleccionar la opción "Durr".fuente
Aquí esta el mio:
fuente
<option value="" selected disabled>Please select</option>
como la primera opción.Veo signos de respuestas correctas, pero para reunirlo todo, esta sería mi solución:
fuente
Durr
está en gris después de seleccionarlo. Esto obliga a que el cuadro de selección cerrado sea gris siempre.Si está utilizando Angular, haga lo siguiente:
fuente
hidden
atributo para que esa opción no se muestre al abrirselect
. Pero gracias de todos modos por esa respuesta, funcionó para mí.Esta
HTML + CSS
solución funcionó para mí:Buena suerte...
fuente
Otra posibilidad en JavaScript:
JSFiddle
fuente
Me encanta la solución aceptada , y funciona muy bien sin JavaScript.
Solo quiero agregar cómo adopté esta respuesta para un componente React de selección controlada , porque me tomó algunos intentos descubrirlo. Sería realmente simple incorporarlo
react-select
y terminar con él, pero a menos que necesite la sorprendente funcionalidad que proporciona este repositorio, que no necesito para el proyecto en cuestión, no es necesario agregar más kilobytes a mi paquete. Nota,react-select
se encarga de marcadores de posición en selecciona a través de un complejo sistema de distintosinputs
yhtml
elementos.En React, para un componente controlado , no puede agregar el
selected
atributo a sus opciones. React maneja el estado de la selección a través de unvalue
atributo sobreselect
sí mismo, junto con un controlador de cambio, donde el valor debe coincidir con uno de los atributos de valor dentro de las propias opciones.Como por ejemplo
Dado que sería incorrecto y, de hecho, arrojaría un error al agregar el
selected
atributo a una de las opciones, ¿entonces qué?La respuesta es simple una vez que lo piensas. Dado que queremos que nuestro primero
option
seaselected
tan bueno comodisabled
yhidden
, debemos hacer tres cosas:hidden
ydisabled
al primero definidooption
.option
como una cadena vacía.select
que también sea una cadena vacía.Ahora puede diseñar la selección como se indicó anteriormente (o mediante un
className
si lo prefiere).fuente
[type="text"]
Marcador de posición de estilo de entrada para elementos seleccionadosLa siguiente solución simula un marcador de posición en relación con un
input[type="text"]
elemento:fuente
Quería que SELECT fuera gris hasta que fuera seleccionado, por lo que para este fragmento de HTML:
He agregado estas definiciones CSS:
Funciona como se esperaba en Chrome / Safari y quizás también en otros navegadores, pero no lo he comprobado.
fuente
Aquí hay una solución CSS que funciona muy bien. El contenido se agrega (y se posiciona absolutamente en relación con el contenedor) después del elemento contenedor (a través de: después de la pseudoclase ).
Obtiene su texto del atributo de marcador de posición que definí donde utilicé la directiva ( attr (marcador de posición) ). Otro factor clave son los eventos de puntero: ninguno : esto permite que los clics en el texto del marcador de posición pasen a la selección. De lo contrario, no se desplegará si el usuario hace clic en el texto.
Agrego la clase .empty en mi directiva select, pero normalmente encuentro que angular agrega / elimina .ng-empty para mí (supongo que es porque estoy inyectando la versión 1.2 de Angular en mi muestra de código).
(El ejemplo también muestra cómo envolver elementos HTML en AngularJS para crear sus propias entradas personalizadas)
fuente
No pude hacer que ninguno de estos funcione actualmente, porque para mí no es (1) obligatorio y (2) necesito la opción de volver al valor predeterminado seleccionable. Así que aquí hay una opción de mano dura si está utilizando jQuery:
fuente
No estoy contento con soluciones HTML / CSS solamente, así que decidí crear una personalizada
select
usando JavaScript.Esto es algo que he escrito en los últimos 30 minutos, por lo que se puede mejorar aún más.
Todo lo que tiene que hacer es crear una lista simple con pocos atributos de datos. El código convierte automáticamente la lista en un menú desplegable seleccionable. También agrega un oculto
input
para mantener el valor seleccionado, por lo que se puede usar en un formulario.Entrada:
Salida:
El texto del elemento que se supone que es un marcador de posición está atenuado. El marcador de posición es seleccionable, en caso de que el usuario quiera revertir su elección. También utilizando CSS,
select
se pueden superar todos los inconvenientes de (por ejemplo, la incapacidad del estilo de las opciones).Mostrar fragmento de código
Actualización : he mejorado esto (selección usando las teclas arriba / abajo / enter), ordené un poco la salida y la convertí en un objeto. Salida de corriente:
Inicializacion:
Para un examen más detallado: JSFiddle ,
GitHub(renombrado).Actualización: he vuelto a escribir esto de nuevo. En lugar de usar una lista, podemos usar una selección. De esta manera funcionará incluso sin JavaScript (en caso de que esté deshabilitado).
Entrada:
Salida:
JSFiddle , GitHub .
fuente
Necesita validación de formularios y los navegadores modernos ofrecen esto desde cero.
Por lo tanto, no necesita tener cuidado de que el usuario no pueda seleccionar el campo. Porque cuando lo está haciendo, la validación del navegador le dirá que esta es una selección incorrecta.
El navegador integrado en la función de validación checkValidity () .
Bootstrap también tiene un buen ejemplo.
HTML
Javascript
fuente
fuente
En Angular podemos agregar una opción como marcador de posición que se puede ocultar en el menú desplegable de opciones. Incluso podemos agregar un icono desplegable personalizado como fondo que reemplace el icono desplegable del navegador .
El truco es habilitar el marcador de posición css solo cuando el valor no está seleccionado
/ ** Mi plantilla de componente * /
/ ** My Component.TS * /
/**global.scss*/
fuente
Solución para Angular 2
Crear una etiqueta en la parte superior de la selección
y aplica CSS para colocarlo encima
pointer-events: none
le permite mostrar la selección cuando hace clic en la etiqueta, que se oculta cuando selecciona una opción.angular html css
fuente
Aquí está mi contribución. Haml + CoffeeScript + SCSS
Haml
CoffeeScript
SCSS
Es posible usar solo CSS cambiando el código del servidor y solo configurando los estilos de clase dependiendo del valor actual de la propiedad, pero de esta manera parece más fácil y limpio.
Puede agregar más CSS (
select option:first-child
) para mantener el marcador de posición gris cuando se abre, pero eso no me importó.fuente
Prueba esto para un cambio:
fuente
Aquí hay un ejemplo práctico de cómo lograr esto con JavaScript puro que maneja las opciones de color después del primer clic:
fuente
Sobre la base de la respuesta de MattW , puede hacer que la opción de selección de marcador de posición sea visible en el menú desplegable después de que se haya realizado una selección válida, ocultándola condicionalmente solo mientras el marcador de posición permanezca seleccionado (y la selección por lo tanto no es válida).
fuente
Según la respuesta de Albireo , esta versión no utiliza jQuery y la especificidad de CSS es mejor.
fuente