Réglage des hauteurs égales pour les div avec jQuery
Je veux égale hauteur divs avec jQuery.
Tous les divs peut avoir un nombre différent de contenu et des différents hauteur par défaut. Voici un échantillon de ma mise en page html:
<div class="container">
<div class="column">This is<br />the highest<br />column</div>
<div class="column">One line</div>
<div class="column">Two<br />lines</div>
</div>
<div class="container">
<div class="column">One line</div>
<div class="column">Two<br>lines</div>
<div class="column">One line</div>
</div>
Je suis réglage de la hauteur avec la prochaine fonction jQuery:
$(document).ready(function(){
var highestBox = 0;
$('.container .column').each(function(){
if($(this).height() > highestBox){
highestBox = $(this).height();
}
});
$('.container .column').height(highestBox);
});
Cela fonctionne bien, mais pas dans mon cas car je veux que tous les "colonnes" de l'égalité qu'à l'intérieur d'un "container". Cela signifie que, dans le premier contenant toutes les cases doivent être aussi haut que le premier div, mais dans le second, ils doivent être égaux à la deuxième colonne.
Donc, la question est: comment dois-je modifier mon jQuery pour atteindre cet objectif?
Merci!
Vous devez vous connecter pour publier un commentaire.
Réponse à votre question
Votre code a été la vérification de toutes les colonnes à l'intérieur d'un conteneur, ce que vous devez faire est de:
Rapide (Bruts) Par Exemple
JS:
CSS:
HTML:
Adressage @Mem question
D'égalisation des hauteurs après le chargement de l'image
Si vous êtes le chargement des images, vous trouverez que cette solution ne fonctionne pas toujours. C'est parce que
document.prêt
est tiré le plus tôt possible, ce qui signifie qu'il n'attend pas de ressources externes pour être chargé dans l' (comme les images).Lors de vos images, enfin, de la charge, ils peuvent fausser la hauteur de leurs contenants après l'égalisation de script, à l'origine trop ne semblent pas trop de travail.
De problèmes d'égalisation de hauteurs avec des images
C'est la meilleure solution (au moment de la rédaction) et implique la liaison à la
img.load
événement. Tout ce que vous avez à faire est d'obtenir un décompte du nombre de dhceu il y a$('img').length
et puis, pour chacun desload
,-1
de comptage jusqu'à ce que vous frappez à zéro, alors le feu de l'égaliseur.La mise en garde ici est
load
ne peut pas tirer dans tous les navigateurs, si l'image est dans le cache. Regardez autour de google/github, il devrait y avoir une solution de script là-bas. Au moment de l'écriture, j'ai trouvé waitForImages de Alexander Dickson (non testé, ce n'est pas une approbation).window.charger
événement. Cela devrait généralement toujours. Toutefois, si vous cochez la docs, vous remarquerez que cet événement se déclenche après TOUTES les ressources externes sont chargés. Cela signifie que si vos images sont chargées, mais il y a un peu de javascript (en attente de téléchargement, il ne sera pas le feu jusqu'à ce que s'achève.Si vous chargez la majorité de vos alias asyncronously et sont à l'aise avec la minimisation, la compression et la répartition de la charge que vous avez probablement l'habitude ont des problèmes avec cette méthode, mais tout à coup une lente CDN (arrive tout le temps) peut causer des problèmes.
Dans les deux cas, vous pourriez prendre un muet approche et d'appliquer de secours des chronomètres. Ont la égaliser script de s'exécuter automatiquement après quelques secondes, juste au cas où l'événement n'a pas d'incendie ou de quelque chose est lente hors de votre contrôle. Il n'est pas infaillible, mais en réalité, vous aurez satisfaire 99% de vos visiteurs avec ce secours, si vous réglez la minuterie correctement.
Vous avez besoin de ceci:
Explication
L'extrait de code suivant crée un tableau des hauteurs:
Math.max.apply( Math, array )
trouve le maximum d'éléments du tableau$columns.height(maxHeight);
définit toutes les colonnes de hauteur de hauteur maximale.Démonstration en direct
Important d'amélioration de la! (J'ai ajouté $(this).hauteur('auto'); avant de faire la mesure de la hauteur -, nous devons rétablir l'auto. Ensuite, nous pouvons utiliser cette fonction sur redimensionner)
C'est ma version de blocs de la même hauteur... Par exemple, vous avez un divthat contient des divs avec le nom "col"
JS:
CSS:
Vous avez besoin imagesLoaded si le conteneur des images à l'intérieur.
Cela fonctionne pour sensible aussi.
Donc, ci-dessous le script jquery pour définir la hauteur égale à la colonne des Mathématiques.max calculera les deux divs hauteur et prend de la hauteur la plus élevée soit peut être à gauche ou à droite.
Démonstration En Direct
Vous pouvez écrire la fonction de cette façon aussi, ce Qui aide à bâtir votre code une seule fois
juste pour ajouter un nom de classe ou un ID à la fin
Je souhaite que j'avais lu ce post avant que je (avec l'aide de Earl) créé ce
Vous pouvez atteindre chaque conteneur à l'aide de
.parent()
API.Comme,
Il y a un plugin jQuery pour cet objectif précis: https://github.com/dubbs/equal-height
Si vous voulez faire toutes les colonnes de même hauteur, utilisation:
Si vous souhaitez les regrouper par leur position de tête, par exemple. au sein de chaque conteneur: