Centrer un <div> dans la !! fenêtre !!

Résolu/Fermé
juanou Messages postés 137 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 23 août 2013 - 15 janv. 2009 à 14:31
RAD ZONE Messages postés 5224 Date d'inscription samedi 20 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 - 15 janv. 2009 à 17:34
Salut.

Comme le dit le titre de mon message, je chercher à centrer un bloc <div> dans la fenêtre de mon navigateur.

Après quelques recherches, j'ai bien réussi à trouver un début de réponse, qui me permet de centrer ma balise dans la page plutôt que dans la fenêtre.

( voir : http://css.alsacreations.com/Faire-une-mise-en-page-sans-tableaux/Centrer-les-elements-ou-un-site-web-en-CSS pour le tuto, et http://css.alsacreations.com/xmedia/exemples/centrer/csscentrer.htm pour l'exemple )

C'est déjà pas mal, mais ce qui me manque dans ce script css, c'est le moyen de garder mon <div> au milieu de ma fenêtre quand le contenu de la page est assez long et implique de "scroller" vers le bas pour tout lire (comme c'est le cas dans un blog, par exemple.)

Quelqu'un sait-il comment s'y prendre ??
A voir également:

13 réponses

salut,

je ne suis pas sur d'avoir bien compris mais je tente.. :D

se que tu peux faire c'est de le positioné en absolute et de lui donné une taill relative (%) et de faire la difference
exemple:
#div_fix{
position: absolute;
left:40%;
top:40%;
height:20%;
width:20%;
}


car: 100-20 = 80 ---- 80 / 2 = 40;

sinon ta toujour la position fixed mais elle ne fonctione pas sur IE

pour fini il y a aussi javascript qui peut le faire

par exemple:

html
....
<body onload="PositionFix('div_fix')>
<div id="contenu">
  <div id="div_fix" style="position:absolute;"></div>
</div>
</body>
....

Javascript

function PositionFix(id){
var OBJ=document.getElementById;

var Wco=OBJ(id).offsetWidth;
var Wfix=OBJ('div_fix').offsetWidth;

var Hfix=OBJ('div_fix').offsetHeight;

     OBJ('div_fix').style.left=Wco/2-Wfix/2
     OBJ('div_fix').style.top=document.body.offsetHeight/2-Hfix/2;
}



voila j'ai pas testé mais sa devrai allez c'est fait un peu a larache
pazz
1
voila comme sa

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
<head> 
<title>centrer ds la fenetre</title> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 

<style type="text/css"> 
#conten{
width:100%;
}
#div_fix{ 
position: absolute; 
top:0px;
left:0px;
border:1px solid red;
} 
</style> 

<script type="text/javascript"> 
function PositionFix(id){ 
var OBJ=document.getElementById; 

var Wco=OBJ(id).offsetWidth; // ligne 21 
var Wfix=OBJ('div_fix').offsetWidth; 

var Hfix=OBJ('div_fix').offsetHeight; 

OBJ('div_fix').style.left=Wco/2-Wfix/2+"px"; 
OBJ('div_fix').style.top=document.body.offsetHeight/2-Hfix/2+"px"; 
alert(Wco);
} 
</script> 

</head> 

<body onload="PositionFix('contenu');"> 

<div id="contenu"> 
<div id="div_fix">test</div> 
</div> 

<p>plein de blabla pour forcer le scroll</p> 
</body> 
</html>¨



je texplique le calcule ,

tu a le dic conteneur qui va contenir ton div_fix, on va l'appeler "X"

Pour centrer div_fix il nous faut connaitre le centre de "X" donc la largeur de X / 2
pui ensuite il nous faut aussi connaitre le centre de div_fix donc la meme chose, div_fix.offsetWidth/2
et pour finir il faut simplement faire la moitier de X moi la moitié de div_fix

----- > OBJ('div_fix').style.left=Wco/2-Wfix/2+"px";

et tu procède de la meme manière pour le top sauf que la jai pris la tail de la fenetre
1
juanou Messages postés 137 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 23 août 2013 58
15 janv. 2009 à 15:29
Salut Pazz.

La réponse que tu me fais là me paraît très intéressante.
Je me doutais bien que j'aurais besoin de javascript.

Mais on dirait qu'il reste un petit bug dans ton code, que je n'arrive pas à identifier. (Il faut dire que vu mon niveau, un script donnée "à l'arrache", c'est encore tout un casse-tête).
Voilà ce que me rapporte la console d'erreur de Firefox :

Erreur : uncaught exception: [Exception... "Illegal operation on WrappedNative prototype object" nsresult: "0x8057000c (NS_ERROR_XPC_BAD_OP_ON_WN_PROTO)" location: "JS frame :: http://localhost/centrer-un-div.htm :: PositionFix :: line 21" data: no]

La ligne 21, dans ma page, c'est : var Wco=OBJ(id).offsetWidth;


Je sais pas trop quoi faire de cette erreur... Est-ce que tu pourrais m'éclairer là encore ?

Je te redonne le code de ma page, un peu moins "à l'arrache", pour que tu puisses repérer le genre d'erreur que j'aurais pu faire :

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>centrer ds la fenetre</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<style type="text/css">
#div_fix{
position: absolute;
left:40%;
top:40%;
height:20%;
width:20%;
}
</style>

<script type="text/javascript">
function PositionFix(id){
var OBJ=document.getElementById;

var Wco=OBJ(id).offsetWidth; // ligne 21
var Wfix=OBJ(id).offsetWidth;

var Hfix=OBJ(id).offsetHeight;

OBJ(id).style.left=Wco/2-Wfix/2;
OBJ(id).style.top=document.body.offsetHeight/2-Hfix/2;
}
</script>

</head>

<body onload="PositionFix('div_fix');">

<div id="contenu">
<div id="div_fix" style="position:absolute; border:1px solid red;">test</div>
</div>

<p>plein de blabla pour forcer le scroll</p>
</body>
</html>
0
juanou Messages postés 137 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 23 août 2013 58
15 janv. 2009 à 15:57
Déso, mais même en copiant-collant le code que tu viens de me donner, ça ne marche pas.
C'est toujours la même ligne qui buggue.
J'ai bien corrigé la faute de frappe (à une autre ligne) dans " #conten{ " mais comme je m'y attendais ça ne vient pas de là.

Est-ce que ça marche chez toi ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
RAD ZONE Messages postés 5224 Date d'inscription samedi 20 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 1 353
15 janv. 2009 à 16:07
Mais qu est ce que tu veux faire ??

je t avoue ne pas comprendre ? tu veux que la page s ouvre toujours au milieu ?? c est a dire que si ta page fais 4OOOpx de haut tu veux qu elle s ouvre a 2000px du top ! ?????????????????? c est etrange ?
0
sur IE il me met aucune faute .. mais je peut pas test sur FF je les pas sous la main mais essaie de remplacer offsetWidth et offsetHeight par clientHeight et clientWidth
0
re

sa pourait aussi venir de sa:

var OBJ=document.getElementById;

donc remplace les OBJ par Document.getElementById(id)....... et enlève le var OBJ=document.getElementById;

voila

pazz
0
juanou Messages postés 137 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 23 août 2013 58
15 janv. 2009 à 16:30
Ah bah oui, tiens comme ça ça règle le bug.

Par contre
le résultat est assez rigolo
mais c'est pas ce que je cherchais à faire ! :)

Est-ce que l'explication que j'ai donnée à Rad Zone te paraît plus claire ?
0
juanou Messages postés 137 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 23 août 2013 58
15 janv. 2009 à 16:25
Pazz,
avec clientHeight ça n'a pas l'air de marcher mieux sous Firefox...
Je viens d'essayer sous IE. Le code à l'air de s'exécuter (avec offsetHeight), puisque l'alert() se déclenche, mais le div semble ne pas répondre quand je scroll, ni même quand je redimentionne ma fenêtre.

Rad Zone,
merci de t'intéresser aussi à mon petit souci.
Mon idée c'est de centrer mon div non pas par rapport aux 4000px de haut de la page, mais par rapport aux 600px de haut de ma fenêtre, de telle manière qu'il reste visible quand je lis les premières lignes de ma page aussi bien que quand je lis les dernières lignes.
Est-ce que c'est plus clair ? (Et si ça l'est, est-ce que tu sais comment faire ?)

Pazz,
En répondant à Rad Zone je me rends compte que je ne me suis peut-être pas bien fait comprendre de toi non plus.
Est-ce que le code que tu me propose permet de garder le div au milieu de la fenêtre même quand on fait défiler la page ?
0
oui grace a position absolute mais il ne faut pas que contenu soi aussi en position absolute.

pour que sa marche lorsque tu resize la fenetre il te faut soi le faire en relative donc la premiere solution

exemple:

div_fix{
position:absolute;
top:20%;
left20%;
height:60%;
width60%;
}

100-60 = 40

40 / 2 = 20;

sinon avec javascript tu utilise onresize dans body "<body onresize="ta fonction()">

j'ai fait des correction sur le script peut être qu'il marchera redi moi

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
<head> 
<title>centrer ds la fenetre</title> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 

<style type="text/css"> 
#contenu{
width:100%;
}
#div_fix{ 
position: absolute; 
top:0px;
left:0px;
border:1px solid red;
} 
</style> 

<script type="text/javascript"> 
function PositionFix(){ 

var Wco=document.body.clientWidth; // ligne 21 
var Wfix=document.getElementById('div_fix').clientWidth; 

var Hfix=document.getElementById('div_fix').clientHeight; 

document.getElementById('div_fix').style.left=Wco/2-Wfix/2+"px"; 
document.getElementById('div_fix').style.top=document.body.clientHeight/2-Hfix/2+"px"; 

} 
</script> 

</head> 

<body onload="PositionFix();" onresize="PositionFix();"> 

<div id="contenu"> 
<div id="div_fix">test</div> 
</div> 

<p>plein de blabla pour forcer le scroll</p> 
</body> 
</html>
0
RAD ZONE Messages postés 5224 Date d'inscription samedi 20 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 1 353
15 janv. 2009 à 16:44
c est ca que tu veux en gros ! ?
exemple fausse frame en css
0
juanou Messages postés 137 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 23 août 2013 58
15 janv. 2009 à 17:11
Non.

Le lien que tu me donnes est intéressant. Il m'est en effet déjà arrivé de chercher à faire ça.
Mais ça n'est pas ce que je recherche aujourd'hui.

Alors je vais essayer de m'expliquer autrement :

Tu vois comment se positionne une alerte javascript de type : alert('blabla');
Dans un blog, que tu sois en train de lire le premier ou le dernier post de la page, ce genre d'alerte prendra toujours place au milieu de la fenêtre. C'est je genre de positionnement que je recherche.

Mais j'ai aussi besoin que quand on tourne la roulette de la souris, mon <div> se repositionne au fur et à mesure, pour rester toujours au milieu de la fenêtre. (C'est la différence avec une alert javascript, qui empêche de faire défiler la page avec la souris).

Est-ce que je suis clair ce coup-ci ?
0
ha je me suis trompé je croyai que fixed ne marchai pas sous IE bon a savoir
0
juanou Messages postés 137 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 23 août 2013 58
15 janv. 2009 à 17:31
Je crois que j'ai trouvé ce que je cherchais.

Je dois partir dans une minute alors je prends pas le temps de regarder de plus prêt.
Mais cette fois je crois que c'est la bonne.

Je donne le lien :
* pour Pazz et Rad Zone, afin qu'ils voient enfin ce que je voulais dire. Merci à vous, et désolé de ne pas avoir su mieux me faire comprendre.
* pour tout ceux que ça intéresse.

http://slayeroffice.com/code/custom_alert/

à plus



ps :
Bon, en fait c'est pas parfait parce que j'aurais aimé que ça réagisse autrement au redimensionnement de la fenêtre. Mais le plus important c'était la réaction au scroll.
Avec ça plus lles codes que vous m'avez donné, Pazz et Rad Zone, j'arriverais peut-être à avoir tout à fait ce que je recherche.
Merci encore
0
RAD ZONE Messages postés 5224 Date d'inscription samedi 20 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 1 353
15 janv. 2009 à 17:34
looool a bas oui !!

si tu avais directement demander comment customiser une alert ca aurais ete plus simple !! ;-))

A+
0