Rechercher : dans
Par :

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

Dernière réponse le 15 jan 2009 à 17:34:19 juanou, le 15 jan 2009 à 14:31:01 
 Signaler ce message aux modérateurs

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/... 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 ??

Configuration: Windows XP
Firefox 3.0.5

Meilleures réponses pour « Centrer un
dans la !! fenêtre !! » dans :
[Webmaster] Adapter un site à toutes les résolutions, le centrer VoirUne question récurrente sur ce forum est "Comment adapter mon site à la résolution du visiteur ? Quelle résolution choisir ?" Pas besoin de se compliquer la vie pour ça ! Comment faire Il suffit d'appliquer une largeur relative (=qui change selon...
Javascript - Centrer verticalement une page web VoirPour centrer verticalement une page web, impossible de s'en sortir en css. Une solution bien pratique : JavaScript. 1. Le fichier .js 2. La page .html 3. Utilisation 4. Inconvénients 5. Rappel Merci à Dalida pour la source du...
Windows 7 - Centre de maintenance VoirLE CENTRE DE MAINTENANCE Successeur du Centre de sécurité de Windows XP et Windows Vista, le Centre de maintenance donne accès à toute une série de réglages permettant de veiller à la sécurité et à la « bonne santé » de votre ordinateur. Car les...
Centres d'appel (Help Desk / Call center) VoirIntroduction aux centres d'appels On appelle Centre d'appel (en anglais Call Center) une plate-forme, hébergée par l'entreprise ou externalisée, chargée d'assister les utilisateurs. Les centres d'appels permettent d'assister des clients dans le...
Le fenêtrage de Microsoft Windows VoirLe vocabulaire relatif au fenêtrage Windows tient son nom (Windows = fenêtre en anglais) du fait qu'il constitue une interface graphique à multi-fenêtrage, c'est-à-dire que l'on peut ouvrir simultanément plusieurs fenêtres sous Windows. Pour les...

1

pazz, le 15 jan 2009 à 14:59:16
  • +2

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

Répondre à pazz

2

juanou, le 15 jan 2009 à 15:29:08

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>

Répondre à juanou

3

pazz, le 15 jan 2009 à 15:43:59
  • +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

Répondre à pazz

4

juanou, le 15 jan 2009 à 15:57:42

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 ?

Répondre à juanou

5

RAD ZONE, le 15 jan 2009 à 16:07:11

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 ?
♣  La plus grande erreur que puisse faire un homme est d'avoir peur d'en faire une. ♣

Répondre à RAD ZONE

6

pazz, le 15 jan 2009 à 16:10:31

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

Répondre à pazz

7

pazz, le 15 jan 2009 à 16:19:38

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

Répondre à pazz

9

juanou, le 15 jan 2009 à 16:30:49

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 ?

Répondre à juanou

8

juanou, le 15 jan 2009 à 16:25:34

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 ?

Répondre à juanou

10

pazz, le 15 jan 2009 à 16:41:32

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>

Répondre à pazz

11

RAD ZONE, le 15 jan 2009 à 16:44:59

C est ca que tu veux en gros ! ?
exemple fausse frame en css
♣  La plus grande erreur que puisse faire un homme est d'avoir peur d'en faire une. ♣

Répondre à RAD ZONE

13

juanou, le 15 jan 2009 à 17:11:00

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 ?

Répondre à juanou

12

pazz, le 15 jan 2009 à 16:54:59

Ha je me suis trompé je croyai que fixed ne marchai pas sous IE bon a savoir

Répondre à pazz

14

juanou, le 15 jan 2009 à 17:31:37

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

Répondre à juanou

15

 RAD ZONE, le 15 jan 2009 à 17:34:19

Looool a bas oui !!

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

A+
♣  La plus grande erreur que puisse faire un homme est d'avoir peur d'en faire une. ♣

Répondre à RAD ZONE