Centrer verticalement un élément HTML à l’aide de jQuery

Les CSS ne proposent pas de centrer verticalement un élément HTML dans un autre. Un peu de JavaScript est alors nécessaire.

Prenons le cas d’une image à centrer verticalement dans un élément div conteneur. Marquons dans un premier temps l’élément à centrer avec la classe CSS vertical-align-center :

<div style="width: 300px; height: 300px; background-color: #cbc;">
	<img alt="" src="myimage.jpg" class="vertical-align-center"/>
</div>

Un peu de JavaScript centrera l’image :

<script type="text/javascript">//<!--
$(document).ready(function() {
	verticalAlignCenter();
});

function verticalAlignCenter() {
	$(".vertical-align-center").each(function() {
		var $elem = $(this);
		var elemHeight = $elem.height();
		if (elemHeight == 0)	// perhap's an element is no loaded
			return;
		var $container = $elem.parent();
		var marginTop = Math.floor(($container.height() - elemHeight) / 2);
		if (marginTop > 0)
			$elem.css("margin-top", marginTop);
		$elem.removeClass("vertical-align-center");
	});
}
//--></script>

Cas particulier d’une image

En production, sur les navigateurs disposant d’une connexion à débit réduit, le script s’exécutera parfois avant le chargement de l’image. Dans ce cas, et si la hauteur de l’image n’est pas précisée par une propriété CSS, alors il n’est pas possible de centrer l’image au chargement de la page Web. Il faut alors relancer l’exécution de la fonction verticalAlignCenter() plus tard. Afin d’éviter de recalculer plusieurs fois les mêmes éléments, le script retire la propriété CSS des éléments centrés.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>