Este es uno de los problemas menores de CSS que me atormenta constantemente. ¿Cómo hacer la gente alrededor de desbordamiento de pila alinear verticalmente checkboxes
y su labels
constante entre navegadores ? Cada vez que los alineo correctamente en Safari (generalmente usando vertical-align: baseline
el input
), están completamente apagados en Firefox e IE. Solucionarlo en Firefox, y Safari e IE están inevitablemente en mal estado. Pierdo tiempo en esto cada vez que codifico un formulario.
Aquí está el código estándar con el que trabajo:
<form>
<div>
<label><input type="checkbox" /> Label text</label>
</div>
</form>
Usualmente uso el reinicio de Eric Meyer, por lo que los elementos de formulario están relativamente limpios de anulaciones. ¡Esperamos cualquier consejo o truco que tenga para ofrecer!
height
yline-height
atributos, eche un vistazo a jsfiddle.net/wepw5o57/3position
ytop
resolverá este problema Ejemplo: jsfiddle.net/ynkjc22sRespuestas:
Después de más de una hora de ajustar, probar y probar diferentes estilos de marcado, creo que puedo tener una solución decente. Los requisitos para este proyecto en particular fueron:
Antes de entrar en alguna explicación, solo te daré el código:
Aquí está el ejemplo de trabajo en JSFiddle .
Este código asume que está usando un reinicio como el de Eric Meyer que no anula los márgenes de entrada del formulario y el relleno (por lo tanto, coloca los reinicios de margen y relleno en el CSS de entrada). Obviamente, en un entorno en vivo, probablemente anidarás / anularás cosas para admitir otros elementos de entrada, pero quería mantener las cosas simples.
Cosas a tener en cuenta:
*overflow
declaración es un hack de IE en línea (el hack de propiedad de estrella). Tanto IE 6 como 7 lo notarán, pero Safari y Firefox lo ignorarán correctamente. Creo que puede ser CSS válido, pero aún así es mejor con comentarios condicionales; solo lo usé por simplicidad.vertical-align
declaración que fue consistente en todos los navegadores fuevertical-align: bottom
. Establecer esto y luego posicionarse relativamente hacia arriba se comportó de manera casi idéntica en Safari, Firefox e IE con solo un píxel o dos de discrepancia.overflow: hidden
por alguna razón, corta el espacio extra y permite que el posicionamiento de IE actúe de manera muy similar a Safari y Firefox.¡Espero que esto ayude a alguien más! No he probado esta técnica específica en ningún proyecto que no sea en el que estaba trabajando esta mañana, así que sin duda si se encuentra algo que funcione de manera más consistente.
fuente
A veces, la alineación vertical necesita dos elementos en línea (span, etiqueta, entrada, etc.) uno al lado del otro para funcionar correctamente. Las siguientes casillas de verificación están correctamente centradas verticalmente en IE, Safari, FF y Chrome, incluso si el tamaño del texto es muy pequeño o grande.
Todos flotan uno al lado del otro en la misma línea, pero el recuadro significa que todo el texto de la etiqueta siempre permanece junto a la casilla de verificación.
La desventaja son las etiquetas SPAN sin sentido adicionales.
Ahora, si tuviera un texto de etiqueta muy largo que necesitara ajustarse sin ajustarse debajo de la casilla de verificación, usaría relleno y sangría de texto negativo en los elementos de la etiqueta:
fuente
display: block; float: left;
parece ser redundanteAl trabajar con la solución de One Crayon , tengo algo que funciona para mí y es más simple:
Hace que píxel por píxel sea igual en Safari (en cuya línea de base confío) y tanto Firefox como IE7 funcionan como buenos. También funciona para varios tamaños de fuente de etiqueta, grandes y pequeños. Ahora, para arreglar la línea base de IE en selecciones y entradas ...
Actualización: (Edición de terceros)
¡La
bottom
posición adecuada depende de la familia de fuentes y el tamaño de fuente! Encontré que usar los elementosbottom: .08em;
de casilla de verificación y radio es un buen valor general. Lo probé en Chrome / Firefox / IE11 en Windows con fuentes Arial y Calibri usando varios tamaños de fuente pequeños / medianos / grandes.fuente
Una cosa fácil que parece funcionar bien es aplicar un ajuste de la posición vertical de la casilla de verificación con alineación vertical. Todavía variará según los navegadores, pero la solución es sencilla.
Referencia
fuente
vertical-align
yposition: relative
porque también funciona correctamente en IE9 :)em
tratar
vertical-align: middle
También parece que su código debería ser:
fuente
<label for="blah">
solo es necesario si está usando algo donde no tiene sentido que la etiqueta se ajuste (como un cuadro de texto; generalmente lo usaré<label for="blah">Foo</label><input id="blah" type="text" />
en esa instancia). Con las casillas de verificación, encuentro que es menos marcado para envolverlo.Pruebe mi solución, lo probé en IE 6, FF2 y Chrome y se procesa píxel por píxel en los tres navegadores.
fuente
La única solución que funciona perfectamente para mí es:
Probado hoy en Chrome, Firefox, Opera, IE 7 y 8. Ejemplo: Fiddle
fuente
No he probado completamente mi solución, pero parece funcionar muy bien.
Mi HTML es simplemente:
Luego configuro todas las casillas de verificación
24px
para altura y anchura. Para que el texto alineado hago la etiqueta esline-height
también24px
y asignarvertical-align: top;
este modo:EDITAR: Después de las pruebas de IE, agregué
vertical-align: bottom;
a la entrada y cambié el CSS de la etiqueta. Puede encontrar que necesita un caso condicional de CSS CSS para ordenar el relleno, pero el texto y el cuadro están en línea.Si alguien encuentra que esto no funciona, por favor hágamelo saber. Aquí está en acción (en Chrome e IE: disculpas porque las capturas de pantalla se tomaron en la retina y el uso de paralelos para IE):
fuente
Usualmente uso la altura de la línea para ajustar la posición vertical de mi texto estático:
Espero que ayude.
fuente
El truco es usar la alineación vertical solo en las celdas de la tabla o el bloque en línea si se usa la etiqueta de etiqueta.
fuente
Echemos un vistazo al origen del problema.
Las casillas de verificación se representan con imágenes (se pueden establecer las personalizadas a través de CSS). Aquí hay una casilla de verificación (sin marcar) en Firefox, resaltada con el inspector DOM:
Y aquí está la misma casilla de verificación sin estilo en Chrome:
Puedes ver el margen (naranja); el relleno no está presente (se mostraría en verde). Entonces, ¿qué es este pseudo-margen a la derecha y en la parte inferior de la casilla de verificación? Estas son partes de la imagen utilizada para la casilla de verificación . Es por eso que usa solo
vertical-align: middle
no es suficiente y esa es la fuente de los problemas entre navegadores.Entonces, ¿qué podemos hacer al respecto?
Una opción obvia es: ¡reemplazar las imágenes! Afortunadamente, uno puede hacer esto a través de CSS y reemplazarlos con imágenes externas, imágenes base64 (en CSS), svg en CSS o simplemente pseudoelementos. Es un enfoque robusto (¡navegador cruzado!), Y aquí hay un ejemplo de tal ajuste robado de esta pregunta :
Es posible que desee leer algunos artículos más detallados sobre este estilo, como algunos que se enumeran aquí ; está fuera del alcance de esta respuesta.
Ok, ¿qué pasa con la solución no-custom-images-or-pseudo-elements?
TL; DR: parece que esto no funcionará, use la casilla de verificación personalizada en su lugar
Primero, observemos que si en otros navegadores esos pseudo márgenes dentro del icono de la casilla de verificación fueran arbitrarios, no habría una solución consistente. Para construir uno, tenemos que explorar la anatomía de tales imágenes en los navegadores existentes.
Entonces, ¿qué navegadores tienen los pseudo márgenes en las casillas de verificación? He comprobado Chrome 75, Vivaldi 2.5 (basado en cromo), FireFox 54 (no pregunte por qué está tan desactualizado), IE 11, Edge 42, Safari. (tomé prestado uno por un minuto, olvidé revisar la versión). Solo Chrome y Vivaldi tienen tales pseudo-márgenes (sospecho que todos los navegadores basados en Chromium también, como Opera).
¿Cuál es el tamaño de esos pseudo márgenes? Para resolver esto, uno puede usar una casilla de verificación ampliada:
mi resultado es ~ 7% del ancho / alto y, por lo tanto, 0.9-1.0px en unidades absolutas. Sin embargo, la precisión puede ser cuestionada: pruebe diferentes valores de
zoom
para la casilla de verificación. En mis pruebas en Chrome y Vivaldi, el tamaño relativo del pseudo margen es muy diferente en loszoom
valores 10, 20 y en los valores 11-19 (??):scale
parece ser más consistente:entonces probablemente ~ 14% y 2px son los valores correctos.
Ahora que sabemos (?) El tamaño del pseudo margen, tengamos en cuenta que esto no es suficiente. ¿Los tamaños de los íconos de las casillas de verificación son los mismos para todos los navegadores? ¡Pobre de mí! Esto es lo que muestra el inspector DOM para las casillas de verificación sin estilo:
Ahora, antes de discutir cualquier solución o truco, preguntémonos: ¿cuál es el correcto? alineación ? ¿Qué queremos lograr? Hasta cierto punto es una cuestión de gustos, pero básicamente puedo pensar en los siguientes aspectos de alineaciones "agradables":
texto y casilla de verificación en la misma línea de base (deliberadamente no ajusto el tamaño de la casilla de verificación aquí):
o tener la misma línea media en términos de letras minúsculas:
o la misma línea media en términos de letras mayúsculas (es más fácil ver la diferencia para diferentes tamaños de fuente):
y también tenemos que decidir si el tamaño de la casilla de verificación debe ser igual a la altura de una letra minúscula, mayúscula o algo más (más grande, más pequeño o entre minúsculas y mayúsculas).
Para esta discusión, llamemos a una alineación agradable si la casilla de verificación está en la misma línea de base que el texto y tiene el tamaño de una letra mayúscula (una opción muy discutible):
Ahora qué herramientas tenemos para:
?
En cuanto al ajuste del tamaño de casilla : existen
width
,height
,size
,zoom
,scale
(me he perdido algo?).zoom
yscale
no permiten establecer el tamaño absoluto, por lo que pueden ayudar solo a ajustar el tamaño del texto, no establecer el tamaño del navegador cruzado (a menos que podamos escribir reglas específicas del navegador).size
no funciona con Chrome (¿funcionó con IE antiguo? de todos modos, no es tan interesante).width
yheight
funciona en Chrome y otros navegadores, por lo que podemos establecer un tamaño común, pero de nuevo, en Chrome establece el tamaño de toda la imagen, no la casilla de verificación en sí. Nota: es mínimo (ancho, alto) que define el tamaño de una casilla de verificación (si ancho ≠ alto, el área fuera del cuadrado de la casilla de verificación se agrega al "pseudo-margen").Una cosa desafortunada es que, por lo que puedo ver, los pseudo márgenes en la casilla de verificación de Chrome no están configurados en cero para ningún ancho y altura.
Me temo que actualmente no hay un método confiable de CSS solamente .
Consideremos la alineación vertical.
vertical-align
no puede dar resultados consistentes cuando se establece enmiddle
obaseline
debido al pseudo margen de Chrome, la única opción real para obtener el mismo "sistema de coordenadas" para todos los navegadores es alinear la etiqueta y la entrada atop
:(en la imagen: alineación vertical: superior, inferior e inferior sin recuadro)
Entonces, ¿qué resultado obtenemos de esto?
El fragmento anterior funciona con Chrome (navegadores basados en cromo), pero otros navegadores requieren un tamaño más pequeño de la casilla de verificación. Parece ser imposible ajustar tanto el tamaño como la alineación vertical de una manera que funcione en torno a la peculiaridad de la casilla de verificación de Chromium. Mi sugerencia final es: use casillas de verificación personalizadas en su lugar, y evitará la frustración :)
fuente
Ahora que flexbox es compatible con todos los navegadores modernos, algo como esto me parece un enfoque más fácil.
Aquí está la demostración completa de la versión prefijada:
Mostrar fragmento de código
fuente
Creo que esta es la forma más fácil.
fuente
No me gusta el posicionamiento relativo porque hace que el elemento se represente por encima de todo lo demás en su nivel (puede obtener algo superior si tiene un diseño complejo).
He descubierto que las
vertical-align: sub
casillas de verificación se ven lo suficientemente bien alineadas en Chrome, Firefox y Opera. No puedo verificar Safari ya que no tengo MacOS e IE10 está ligeramente apagado, pero he encontrado que es una solución lo suficientemente buena para mí.Otra solución podría ser tratar de crear CSS específico para cada navegador y ajustarlo con una alineación vertical en% / pixels / EM: http://css-tricks.com/snippets/css/browser-specific-hacks/
fuente
Esto funciona bien para mi:
fuente
La respuesta elegida con más de 400 votos a favor no funcionó para mí en Chrome 28 OSX, probablemente porque no se probó en OSX o porque funcionó en lo que sea que existiera en 2008 cuando se respondió esta pregunta.
Los tiempos han cambiado, y las nuevas soluciones CSS3 ahora son factibles. Mi solución usa pseudoelementos para crear una casilla de verificación personalizada . Entonces, las estipulaciones (pros o contras, como quiera que lo mires) son las siguientes:
Esta solución oculta la casilla de verificación y agrega y aplica estilos a los pseudoelementos a la etiqueta para crear la casilla de verificación visible. Debido a que la etiqueta está vinculada a la casilla de verificación oculta, el campo de entrada aún se actualizará y el valor se enviará con el formulario.
Y si está interesado, aquí está mi opinión sobre los botones de radio: http://jsfiddle.net/DtKrV/2/
¡Espero que alguien encuentre esto útil!
fuente
Nunca he tenido un problema al hacerlo así:
fuente
Si utiliza ASP.NET Web Forms , no necesita preocuparse por los DIV y otros elementos o tamaños fijos. Podemos alinear el
<asp:CheckBoxList>
texto configurandofloat:left
el tipo de entrada CheckboxList en CSS.Por favor verifique el siguiente código de ejemplo:
Código .ASPX:
fuente
Si usa Twitter Bootstrap, puede usar la
checkbox
clase en<label>
:fuente
Con una casilla de verificación de tipo de entrada envuelta dentro de la etiqueta y flotando a la izquierda de la siguiente manera:
esto funcionó para mí:
Asegúrese de que la altura de la es idéntica a la altura de la línea del (nivel de bloque).
fuente
Codifique la altura y el ancho de la casilla de verificación, quite su relleno y haga que su altura más los márgenes verticales sean iguales a la altura de la línea de la etiqueta. Si el texto de la etiqueta está en línea, flote la casilla de verificación. Firefox, Chrome e IE7 + muestran el siguiente ejemplo de forma idéntica: http://www.kornea.com/css-checkbox-align
fuente
fuente
Por lo general, dejo una casilla sin etiquetar y luego hago que su "etiqueta" sea un elemento separado. Es un dolor, pero hay tanta diferencia entre navegadores entre la forma en que se muestran las casillas de verificación y sus etiquetas (como habrás notado) que esta es la única forma en que puedo acercarme a controlar cómo se ve todo.
También termino haciendo esto en el desarrollo de winforms, por la misma razón. Creo que el problema fundamental con el control de la casilla de verificación es que en realidad son dos controles diferentes: el cuadro y la etiqueta. Al usar una casilla de verificación, le corresponde a los implementadores del control decidir cómo se muestran esos dos elementos uno al lado del otro (y siempre se equivocan, donde está mal = no es lo que quieres).
Realmente espero que alguien tenga una mejor respuesta a tu pregunta.
fuente
CSS:
HTML:
El código anterior colocará los elementos de su lista en tres grupos y solo cambiará los anchos para adaptarse.
fuente
Lo siguiente proporciona una consistencia perfecta en píxeles en todos los navegadores, incluso IE9:
El enfoque es bastante sensato, hasta el punto de ser obvio:
Esto da como resultado una regla general aplicable a nivel mundial:
Con tamaño de fuente adaptable por formulario, conjunto de campos o elemento.
Probado en los últimos Chrome, Safari y Firefox en Mac, Windows, Iphone y Android. Y IE9.
Es probable que este método sea aplicable a todos los tipos de entrada que no sean más altos que una línea de texto. Aplica una regla de tipo a tu medida.
fuente
Así que sé que esto ha sido respondido muchas veces, pero siento que tengo una solución mucho más elegante que las que ya se han proporcionado. Y no solo 1 solución elegante, sino 2 soluciones separadas para hacerle cosquillas. Dicho esto, todo lo que necesita saber y ver está contenido en 2 JS Fiddle's, con comentarios.
La solución n. ° 1 se basa en la "casilla de verificación" nativa del navegador dado, aunque con un giro ... Está contenida en un div que es más fácil de colocar en el navegador cruzado, con un desbordamiento: oculto para cortar el exceso de una casilla de verificación estirada de 1 px (Esto es para que no puedas ver los feos bordes de FF)
HTML simple: (siga el enlace para revisar el CSS con comentarios, el bloque de código es para satisfacer stackoverflow) http://jsfiddle.net/KQghJ/
La solución n. ° 2 utiliza el "Hack de alternancia de casilla de verificación" para alternar el estado CSS de un DIV, que se ha posicionado correctamente en el navegador, y se configura con un sprite simple para la casilla de verificación desmarcada y marcada. Todo lo que se necesita es ajustar la posición del fondo con dicho Hack de alternancia de casilla de verificación. Esta, en mi opinión, es la solución más elegante, ya que tiene más control sobre sus casillas de verificación y radios, y puede garantizar que se vean iguales en todo el navegador.
HTML simple: (siga el enlace para revisar el CSS con comentarios, el bloque de código es para satisfacer StackOverflow) http://jsfiddle.net/Sx5M2/
Si alguien no está de acuerdo con estos métodos, por favor déjenme un comentario, me encantaría escuchar algunos comentarios sobre por qué otros no han encontrado estas soluciones, o si lo han hecho, ¿por qué no veo respuestas aquí sobre ellas? Si alguien ve que uno de estos métodos falla, sería bueno verlo también, pero estos han sido probados en los últimos navegadores y se basan en métodos HTML / CSS que son bastante antiguos y universales hasta donde yo he visto.
fuente
Yay gracias! Esto también me ha estado volviendo loco por siempre.
En mi caso particular, esto funcionó para mí:
Estoy usando reset.css, lo que podría explicar algunas de las diferencias, pero esto parece funcionar bien para mí.
fuente
position: relative;
tiene algunos problemas en IE con z-index y animaciones como jQuery's slideUp / slideDown.CSS:
jQuery:
El estilo probablemente necesita ajustes dependiendo del tamaño de fuente utilizado en
<label>
PD:
uso ie7js para hacer que el css funcione en IE6.
fuente
Use simplemente
vertical-align: sub
, como pokrishka ya sugirió.Violín
Código HTML:
Código CSS:
fuente
Solución simple:
Probado en Chrome, Firefox, IE9 +, Safari, iOS 9+
fuente