2010-12-07 29 views
1

Un certain nombre de questions abordent ce problème, mais aucune ne porte sur l'alignement vertical relatif à une image flottante ou à un élément de niveau bloc.Comment aligner verticalement du texte par rapport à une image flottante?

... 
<td> 
    <span style="vertical-align: middle">This should be vertically centered relative to the image</span> 
    <img src="something" style="float: right" /> 
</td> 
... 

Cela ne produit pas le résultat souhaité, car l'image est flottante. J'ai essayé beaucoup de choses, y compris l'ajout d'un après le tag, l'affichage du span en tant qu'élément de niveau bloc, et d'autres façons de positionner l'image (aligné à la droite du conteneur) sans le flotter, mais sans succès .

MISE À JOUR: Je n'ai réussi à obtenir aucune des solutions proposées. Si cela ne peut pas être fait, qu'il en soit ainsi, mais je laisse cela ouvert jusqu'à ce que je puisse être sûr qu'il ne le peut pas. J'ai créé un jsFiddle avec le HTML, dans l'espoir que quelqu'un puisse écrire CSS qui démontre une solution.

+0

Le texte est-il assez long et/ou le contenant suffisamment petit pour que le texte puisse heurter l'image et s'enrouler? – Phrogz

Répondre

0

Cela ne peut se faire sans modifier la structure du document donné, au moins donné CSS2.1 . J'aimerais toujours voir une solution CSS3, si quelqu'un peut en fournir une.

0

Vous devez envelopper la plage et l'image dans le même <div> et appliquer le flotteur à la div à la place.

... 
<td> 
    <div style="float: right;"> 
    <span style="vertical-align: middle">This should be vertically centered relative to the image</span> 
    <img src="something" /> 
    </div> 
</td> 
... 

OU

... 
<td style="vertical-align: middle;"> 
    <span>This should be vertically centered relative to the image</span> 
    <img src="something" style="float: right;" /> 
</td> 
... 
+0

Cela ferait flotter le texte vers la droite aussi, correct? Le résultat souhaité est que le texte soit essentiellement aligné à gauche et que l'image soit alignée à droite. –

+1

Vous pouvez simplement garder ce que vous avez, et placez le vertical-align: middle sur votre à la place. J'ai mis à jour ma réponse avec cette option sous la RO. –

+0

Vous devrez peut-être ajouter un
sous le . –

2
... 
<td> 
    <table cellpadding="0" cellspacing="0"> 
    <tr> 
     <td>text here</td> 
     <td style="text-align: right">image here</td> 
    </tr> 
    </table> 
</td> 
... 

Le < td> est par défaut align milieu

+0

Oui, ce serait beaucoup plus simple. Gardez juste à l'esprit que vous devez colspan les autres cellules au-dessus et en dessous de celles-ci. Garçon est-ce que le design piloté par table me manque? O –

+0

Votre solution casse le en deux. Ceci est une image insérée dynamiquement dans le même que le texte. –

+0

Peut-être que vous pourriez avoir une table dans un td? Je ne sais pas comment votre code d'insertion dynamique fonctionne, mais ce serait beaucoup plus simple (et fiable) si vous pouviez utiliser des tableaux comme montré. J'ai mis à jour mon code. –