¿Por qué no vertical-align: middle
funciona? Y, sin embargo, vertical-align: top
hace el trabajo.
span{
vertical-align: middle;
}
<div>
<img src="http://lorempixel.com/30/30/" alt="small img" />
<span>Doesn't work.</span>
</div>
¿Por qué no vertical-align: middle
funciona? Y, sin embargo, vertical-align: top
hace el trabajo.
span{
vertical-align: middle;
}
<div>
<img src="http://lorempixel.com/30/30/" alt="small img" />
<span>Doesn't work.</span>
</div>
vertical-align
Respuestas:
En realidad, en este caso es bastante simple: aplique la alineación vertical a la imagen. Como todo está en una línea, es realmente la imagen que desea alinear, no el texto.
Probado en FF3.
Ahora puede usar flexbox para este tipo de diseño.
fuente
span
tamaño de la fuente. Mira mi respuesta .width:16px;height:16px
), puede ver que la imagen será demasiado baja ...Aquí hay algunas técnicas simples para alineación vertical:
Alineación vertical de una línea: media
Este es fácil: establezca la altura de línea del elemento de texto para que sea igual a la del contenedor
Varias líneas de alineación vertical: abajo
Coloque absolutamente un div interno en relación con su contenedor
Alineación vertical de líneas múltiples: medio
Si debe admitir versiones antiguas de IE <= 7
Para que esto funcione correctamente en todos los ámbitos, tendrás que hackear un poco el CSS. Afortunadamente, hay un error de IE que funciona a nuestro favor. Configurando
top:50%
el contenedor ytop:-50%
el div interno, puede lograr el mismo resultado. Podemos combinar los dos usando otra característica que IE no admite: selectores avanzados de CSS.Altura variable del contenedor alineación vertical: medio
Esta solución requiere un navegador un poco más moderno que las otras soluciones, ya que hace uso de la
transform: translateY
propiedad. ( http://caniuse.com/#feat=transforms2d )La aplicación de las siguientes 3 líneas de CSS a un elemento lo centrará verticalmente dentro de su elemento primario, independientemente de la altura del elemento primario:
fuente
display:table
ydisplay:table-cell
CSS funcionan muy bien, excepto, por supuesto, en IE7 y versiones posteriores. Después de arrancarme el cabello durante varias horas, decidí que realmente no necesitaba tratar con alguien que todavía usara IE7-.display:table
tiene algunas limitaciones en varios navegadores (en IE11max-height
no funciona si el elemento está dentro de una celda de tabla), por lo que en algunos casos extremos no es una buena idea alinearse verticalmente usando celdas de tabla.Conviértalo
div
en un contenedor flexible:Ahora hay dos métodos para centrar las alineaciones de todo el contenido:
Método 1:
MANIFESTACIÓN
Método 2:
MANIFESTACIÓN
Pruebe diferentes valores de ancho y alto en
img
y diferentes valores de tamaño de fuente enspan
y verá que siempre permanecen en el medio del contenedor.fuente
justify-content: center;
y para espaciar (sin usar etiquetas <br/>) también puede agregar unpadding: 1em;
. Gran actualización para nosotros los desarrolladores de navegadores modernos.Debe aplicar
vertical-align: middle
a ambos elementos para que se centre perfectamente.La respuesta aceptada centra el icono alrededor de la mitad de la altura x del texto al lado (como se define en las especificaciones CSS ). Lo que podría ser lo suficientemente bueno, pero puede verse un poco fuera de lugar, si el texto tiene ascendentes o descendentes que se destacan en la parte superior o inferior:
A la izquierda, el texto no está alineado, a la derecha es como se muestra arriba. Se puede encontrar una demostración en vivo en este artículo sobre alineación vertical .
¿Alguien ha hablado sobre por qué
vertical-align: top
funciona en el escenario? La imagen en la pregunta es probablemente más alta que el texto y, por lo tanto, define el borde superior del cuadro de línea.vertical-align: top
en el elemento span y luego simplemente lo coloca en la parte superior del cuadro de línea.La principal diferencia en el comportamiento entre
vertical-align: middle
ytop
es que el primero mueve elementos relativos a la línea base del cuadro (que se coloca donde sea necesario para cumplir con todas las alineaciones verticales y, por lo tanto, se siente bastante impredecible ) y el segundo relativo a los límites exteriores del cuadro de línea (que es más tangible)fuente
La técnica utilizada en la respuesta aceptada funciona solo para texto de una sola línea ( demostración ), pero no para texto de varias líneas ( demostración ), como se indica allí.
Si alguien necesita centrar verticalmente el texto de líneas múltiples en una imagen, aquí hay algunas maneras (Métodos 1 y 2 inspirados en este artículo de CSS-Tricks )
Método # 1: tablas CSS ( FIDDLE ) (IE8 + ( caniuse ))
CSS:
Método # 2: pseudo elemento en el contenedor ( FIDDLE ) (IE8 +)
CSS:
Método 3: Flexbox ( FIDDLE ) ( caniuse )
CSS (el violín anterior contiene prefijos de proveedor):
fuente
Este código funciona tanto en IE como en FF:
fuente
Debido a que debe establecer la
line-height
altura del div para que esto funcionefuente
Básicamente, tendrás que bajar a CSS3.
fuente
Para el registro, los "comandos" de alineación no deberían funcionar en un SPAN, porque es una etiqueta en línea , no una etiqueta de nivel de bloque . Cosas como la alineación, el margen, el relleno, etc. no funcionarán en una etiqueta en línea porque el punto de la línea no es interrumpir el flujo de texto.
CSS divide las etiquetas HTML en dos grupos: en línea y a nivel de bloque. Busque "css block vs inline" y aparecerá un gran artículo ...
http://www.webdesignfromscratch.com/html-css/css-block-and-inline/
(Comprender los principios básicos de CSS es una clave para que no sea tan molesto)
fuente
text-align
yvertical-align
(con la excepción de su aplicación entd
elementos para fines de herencia) están diseñadas específicamente parainline
yinline-block
elementos (span
,img
, etc).Úselo
line-height:30px
para el espacio para que el texto se alinee con la imagen:fuente
Otra cosa que puede hacer es establecer el texto
line-height
al tamaño de las imágenes dentro de<div>
. Luego configure las imágenes envertical-align: middle;
Esa es realmente la forma más fácil.
fuente
margin
Todavía no he visto una solución en ninguna de estas respuestas, así que aquí está mi solución a este problema.Esta solución solo funciona si conoce el ancho de su imagen.
El HTML
El CSS
fuente
Generalmente uso 3px en lugar de
top
. Al aumentar / disminuir ese valor, la imagen se puede cambiar a la altura requerida.fuente
Escribe estas propiedades de span
Usar
display:inline-block;
cuando usa lavertical-align
propiedad. Estas son propiedades asociadasfuente
Puede configurar la imagen como
inline element
usando ladisplay
propiedadfuente
En un botón en jQuery mobile, por ejemplo, puede modificarlo un poco aplicando este estilo a la imagen:
fuente
Solución multilínea:
http://jsfiddle.net/zH58L/6/
Funciona en todos los navegadores y ie9 +
fuente
Puede ser confuso, estoy de acuerdo. Intenta utilizar las características de la tabla. Utilizo este simple truco CSS para colocar modales en el centro de la página web. Tiene gran soporte de navegador:
y parte de CSS:
Tenga en cuenta que debe diseñar y ajustar el tamaño de la imagen y el contenedor de la tabla para que funcione como desee. Disfrutar.
fuente
Primero CSS en línea no se recomienda , realmente estropea tu HTML.
Para alinear la imagen y la amplitud, simplemente puede hacer
vertical-align:middle
.fuente
No estoy seguro de por qué no lo muestra en el navegador de su navegación, pero normalmente uso un fragmento como este cuando intento mostrar un encabezado con una imagen y un texto centrado, ¡espero que ayude!
https://output.jsbin.com/jeqorahupo
fuente
fuente
Probablemente quieras esto:
Como otros han sugerido, prueba
vertical-align
la imagen:CSS no es molesto. Simplemente no lees la documentación . ;PAGS
fuente