2013-05-23 1 views
1

HTMLComment est-ce que je peux aligner verticalement img et le texte dans l'envergure sans employer le remplissage?

<div class="cs1"> 
    <span class="cs2">Label</span> 
    <span class="cs3"><img src="icon.png" /></span> 
    <span class="cs4">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.</span> 
</div> 

CSS

.cs1{ 
    width:600px; 
    height:auto; 
    background-color:#f00; 
    overflow:hidden; 
} 
.cs2{ 
    width:170px; 
    float:left; 
    height:100%; 
} 

.cs3{ 
    width:30px; 
    float:left;  
} 
.cs4{ 
    width:400px; 
    float:left; 
} 

http://jsfiddle.net/Lwmhy/1/

Le code ci-dessus, différentes longueurs des valeurs saisies. Alors, comment puis-je aligner verticalement les valeurs sans utiliser de remplissage?

+0

connaissez-vous la taille de la rangée? (est-ce toujours la même chose?) –

+0

non pas même, c'est changeable, mais j'utilise un commentaire conditionnel pour ie7 et change l'affichage: inline-block, c'est du travail. Pensez-vous que cela causera des problèmes => http://jsfiddle.net/Lwmhy/13/ – midstack

+0

Je sais que le blocage en ligne est également problématique dans IE7. voir http://stackoverflow.com/questions/6544852/ie7-does-not-understand-display-inline-block ... mais je suis venu avec une solution qui implique JS pour définir la hauteur de façon dynamique. voir ci-dessous. –

Répondre

2

ici est votre résolu jsFiddle:

Working FIDDLE Demo

la solution est d'utiliser la propriété d'affichage des cellules de table (notez que cela ne fonctionnera pas sur IE7, mais il se dégrade gracieusement):

div span { 
    display: table-cell; 
    vertical-align: middle; 
} 

.. et retirer le flotteur et la hauteur des travées ...

solution alternative qui fonctionne aussi dans IE7:

Working FIDDLE Demo

.cs1{ 
    width:600px; 
    background-color:#f00; 
    overflow:hidden; 
    position: relative; 
} 

div span { 
    display: block; 
    float: left; 
} 
.cs2, 
.cs3{ 
    width:100px; 
    position: relative; 
    top: 50%; 
    height: 30px; 
    margin-top: -15px; 
} 

.cs3{ 
    height: 80px; 
    margin-top: -40px; 
} 

.cs4{ 
    width:400px; 
} 

et régler la hauteur du conteneur en utilisant javascript (avec jQuery dans mon exemple):

$('.cs1').height($('.cs1').height()); 

Si les lignes ont une hauteur fixe, vous pouvez ajouter le hauteur dans le CSS et vous n'avez pas besoin de la javascript:

.cs1{ 
    width:600px; 
    height: 300px; 
    background-color:#f00; 
    overflow:hidden; 
    position: relative; 
} 
+0

Vous devez mentionner que IE7 ne supporte pas 'display: table-cell;', +1 de toute façon :) – Morpheus

+0

true. mais dans la plupart de nos projets, le support IE7 complet n'est plus demandé par le client. –

+0

Je devrais dire bon pour vous, parce que nous sommes toujours requis IE7 support – Morpheus

1

Vérifiez this lien, résolu mon problème avec l'alignement vertical d'une image.

Questions connexes