2010-05-14 10 views
72

Estoy tratando de centrar el enlace con la imagen, pero parece que no puedo mover el contenido verticalmente de ninguna manera.Alinear verticalmente CSS: antes y después del contenido

<h4>More Information</h4> 
<a href="#" class="pdf">File Name</a> 

El icono es de 22 x 22 píxeles

.pdf { 
    font-size: 12px; 
} 
.pdf:before { 
    padding:0 5px 0 0; 
    content: url(../img/icon/pdf_small.png); 
} 
.pdf:after { 
    content: " (.pdf)"; 
    font-size: 10px; 
} 
.pdf:hover:after { 
    color: #000; 
} 
+0

Considere usar flex: http://stackoverflow.com/a/22218694/435605 - la respuesta es para texto pero funciona en todos los elementos. –

+0

Gracias a los [selectores de atributo de coincidencia de subcadenas de CSS3] (https://www.w3.org/TR/css3-selectors/#attribute-substrings), ahora puede hacer 'a [href $ =". Pdf "] {... } 'y ni siquiera necesita la clase. –

Respuesta

93

respondido a mi propia pregunta después de leer su consejo sobre el atributo CSS vertical-align. ¡Gracias por el consejo!

.pdf:before { 
    padding: 0 5px 0 0; 
    content: url(../img/icon/pdf_small.png); 
    vertical-align: -50%; 
} 
+1

Agradable. Lo que funcionó para mí fue vertical-align: super; – DBUK

19

No soy experto en CSS, pero lo que sucede si se pone vertical-align: middle; en su directiva .pdf:before?

+2

Impresionante, el medio no funcionó, así que tuve que usar un porcentaje negativo, ¡gracias por el aviso! – theorise

+0

Me alegra ayudar. ¿"Middle" no hizo nada, o algo-pero-no-lo-que-quería? – Chowlett

5

Jugar con el atributo de altura de línea debería ser el truco. No he probado esto, por lo que el valor exacto puede no ser el correcto, pero empiece con 1.5em y modifíquelo en incrementos de 0.1 hasta que se alinee.

.pdf{ line-height:1.5em; } 
+0

que debería hacer el truco para el contenido de texto! – hereandnow78

2

Acabo de encontrar una solución bastante limpia, creo. El truco es establecer el line-height de la imagen (o cualquier contenido) height.

texto

El uso de CSS:

div{ 
    line-height: 26px; /* height of the image in #submit span:after */ 
} 

span:after{ 
    content: url('images/forward.png'); 
    vertical-align: bottom; 
} 

que probablemente también trabajar sin el lapso.

6

Creo que un enfoque más limpio es heredar la alineación vertical:

en HTML:

<div class="shortcut"><a href="#">Download</a></div> 

Y en css:

.shortcut { 
    vertical-align: middle; 
} 
.shortcut > a:after { 
    vertical-align: inherit; 
{ 

De esta manera el icono alinear correctamente en cualquier combinación de resolución/tamaño de letra. Ideal para utilizar con fuentes de iconos.

+0

Perfecto. Simple y elegante – kasongoyo

4

Pasé una buena cantidad de tiempo tratando de resolver esto hoy, y no pude hacer que las cosas funcionen usando line-height o vertical-align. La solución más fácil que pude encontrar fue establecer el < a/> para estar relativamente posicionado, por lo que contendría absolutos, y el: después de ser posicionado absolutamente sacándolo del flujo.

a{ 
    position:relative; 
    padding-right:18px; 
} 
a:after{ 
    position:absolute; 
    content:url(image.png); 
} 

La imagen posterior pareció centrarse automáticamente en ese caso, al menos en Firefox/Chrome. Tal vez sea un poco más descuidado para navegadores no compatibles: después, debido al exceso de espacio en el < a/>.

7

También puede utilizar tablas para lograr esto, como:

.pdf { 
    display: table; 
} 
.pdf:before { 
    display: table-cell; 
    vertical-align: middle; 
} 

He aquí un ejemplo: https://jsfiddle.net/ar9fadd0/2/

EDIT: También puede utilizar flex para lograr esto:

.pdf { 
    display: flex; 
} 
.pdf:before { 
    display: flex; 
    align-items: center; 
} 

Aquí hay un ejemplo: https://jsfiddle.net/ctqk0xq1/1/

+0

ninguno de estos violines funciona en Chrome 52 – stealthwang

+0

ambos funcionan para mí en Chrome versión 52.0.2743.116 (64 bits) (Linux) – fassl

+0

ni funciona en OSX. http://imgur.com/bqUQ09X – stealthwang

0

Tuve un problema similar. Aquí esta lo que hice. Como el elemento que estaba tratando de centrar verticalmente tenía una altura = 60px, logré centrarlo verticalmente usando:

arriba: calc (50% - 30px);

Cuestiones relacionadas