Nous allons donc maintenant voir une autre technique, utilisant le Javascript.
Cette technique n'est utilisable qu'à partir de IE6!
Nous allons reprendre le même squelette que dans la partie précédente, tout en y insérant notre code Javascript
Code : HTML 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link href="test3.css" rel="stylesheet" type="text/css" />
<title>Document sans titre</title>
</head>
<body>
<div id="page">
Ceci est un essai de page de hauteur 100%
</div>
</body>
</html>
|
Définissons, dans la foulée, la feuille de style associée:
Code : CSS | body{
margin: 0px;
padding: 0px;
outline: 0px;
background-color: yellow;
}
#page{
background-color: red;
width: 100%;
}
|
Maintenant, réfléchissons...
Nous voulons que le bloc
page fasse exactement la même hauteur que la zone d'affichage du navigateur du visiteur.
Il faut donc pouvoir reprendre cette valeur

!
C'est ici que se pose un problème:
Tous les navigateurs ne fonctionnent pas de la même manière, ils ont chacun leur méthode de lecture du HTML et du Javascript, qui peuvent donc différer d'un navigateur à l'autre.
Revenons à nos moutons!
Nous voulons donc prendre la hauteur de la zone d'affichage du navigateur.
Deux propriétés se proposent alors à nous : la propriété
window.innerHeight et la propriété
document.documentElement.clientHeight.
À présent, nous devons vérifier le navigateur du visiteur, et donc utiliser la propriété appropriée à son navigateur.
Une simple condition vérifiant que les propriétés marchent fera l'affaire:
Code : JavaScript | var hauteur;
if( typeof( window.innerHeight ) == 'number' )
hauteur = window.innerHeight;
else if( document.documentElement && document.documentElement.clientHeight )
hauteur = document.documentElement.clientHeight;
|
Maintenant que nous avons la hauteur de notre zone d'affichage, il ne nous reste plus qu'à l'appliquer.
Nous allons en profiter pour faire de ce code une fonction, et appliquer cette fonction à l'événement
onload() de notre page :
Code : JavaScript 1
2
3
4
5
6
7
8
9
10
11
12 | function height(bloc){
var hauteur;
if( typeof( window.innerWidth ) == 'number' )
hauteur = window.innerHeight;
else if( document.documentElement && document.documentElement.clientHeight )
hauteur = document.documentElement.clientHeight;
document.getElementById(bloc).style.height = hauteur+"px";
}
window.onload = function(){ height("page") };
|
Il ne nous reste plus qu'un détail à régler !
Je ne sais pas si vous l'avez remarqué, mais la fonction est seulement appelée au chargement de notre page. Si le visiteur redimensionne son navigateur, le bloc ne sera pas redimensionné, il aura la même hauteur qu'au moment du chargement de la page. Pour remédier à ce problème, il suffit d'appeler notre fonction au moment où la page est redimensionnée, avec l'événement
onresize()
L'événement resize() a un comportement différent selon le navigateur, par exemple, Firefox fait appel à cette fonction pendant toute la durée du redimensionnement tandis que Safari l'appelle seulement une fois le redimensionnement terminé.
Code : JavaScript 1
2
3
4
5
6
7
8
9
10
11
12
13 | function height(bloc){
var hauteur;
if( typeof( window.innerWidth ) == 'number' )
hauteur = window.innerHeight;
else if( document.documentElement && document.documentElement.clientHeight )
hauteur = document.documentElement.clientHeight;
document.getElementById(bloc).style.height = hauteur+"px";
}
window.onload = function(){ height("page") };
window.onresize = function(){ height("page") };
|