2010-08-25 6 views
0

J'ai un div qui peut avoir différentes hauteurs en fonction de la taille du texte qu'il contient. J'utilise jquery pour l'afficher lorsqu'un utilisateur survole une icône. Je veux que la div apparaisse au centre vertical de cette icône. Je ne peux pas utiliser la méthode normale de:Élément de position centre vertical basé sur la hauteur

height: 100px; top: 50%; margin-top: -50px; 

parce que je ne peux pas préciser la hauteur de l'élément en raison des variations de hauteur.

Des idées sur comment je pourrais faire ceci? Merci.

+0

Pouvez-vous poster plus de code? Je pense avoir une idée, mais je ne peux pas te comprendre complètement – NicolasT

Répondre

2

Voici une solution très simple qui devrait fonctionner pour n'importe quelle hauteur d'élément.

HTML:

<div class="container"> 
     <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> 
    </div> 

jquery:

var margin = $('.container').height()/2; 
$('.container').css({'margin-top' : -margin}); 

Nous obtenons la hauteur de l'élément, puis la diviser en deux. Nous fixons ensuite le margin-top au négatif de la moitié de la hauteur de la div.

+0

J'ai plusieurs divs avec le même nom de classe. Cela fonctionnera-t-il toujours? – Cameron

+0

J'ai essayé ce qui suit mais il n'arrête pas d'alerter la même valeur $ ("div.MoreResultsInfo"). Each ( function (intIndex) { var intIndex = $ ('div.MoreResultsInfo'). Height()/2; $ ('div.MoreResultsInfo'). css ({'margin-top': -intIndex}); alert (intIndex); }); et ne semble pas le stocker en tant que valeurs uniques par élément de répétition – Cameron

+0

Vous référencez div.MoreResultsInfo dans chaque boucle, ce qui donne à toutes les instances de div.MoreResultsInfo une marge supérieure de la moitié de la hauteur de la dernière. instance de .MoreResultsInfo. Utilisez $ (this) dans chaque boucle pour définir la marge supérieure de cet élément spécifique. $ (document) .ready (function() { \t \t \t $ ("div.MoreResultsInfo"). Each (function() { \t \t \t \t marge var = $ (this) .height()/2 ; \t \t \t \t $ (this) Css ({ 'margin-top': -margin}); \t \t \t}); \t \t}); –

Questions connexes