33 votes

Pourquoi ce div/img ne se centre-t-il pas dans IE8 ?

J'ai une page d'attente très simple que j'ai construite en centrant un div, une ancre et une image. Pour une raison quelconque, elle ne se centre pas dans IE8 (quel que soit le mode), et j'espère que quelqu'un pourra me dire pourquoi. Je n'ai pas eu l'occasion de l'essayer dans d'autres navigateurs IE. Je l'ai essayé dans Chrome et FF3, où il fonctionne correctement.

<html>
<head>
<title>Welcome</title>
<style>
    #pageContainer {width:300px;margin:0 auto;text-align:center;}
    #toLogo{border:none; }
</style>
</head>
<body>
    <div id="pageContainer">
    <a href="http://portal.thesit.com" id="toSite"><img src="LOGO_DNNsmall.png" id="toLogo"></a>
    </div>
</body>
</html>

J'ai dit que c'était très simple. :)

Merci,

Brett

70voto

buti-oxa Points 6428

Voulez-vous vraiment que votre page fonctionne en mode bizarrerie ? Votre HTML se centre bien une fois que j'ai ajouté doctype to pour forcer le mode standards :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">

<head>
<title>Welcome</title>
<style>    
    #pageContainer {width:300px;margin:0 auto;text-align:center;}    
    #toLogo{border:none; }
</style>
</head>

<body>

<div id="pageContainer">
    <a href="http://portal.thesit.com" id="toSite">
    <img src="http://stackoverflow.com/content/img/so/logo.png" id="toLogo"></a> </div>

</body>
</html>

3voto

Nathan DeWitt Points 3398

La marge de auto sur les côtés de la division, laissant au navigateur le soin de décider de son emplacement. Rien n'indique au navigateur que la division doit être centrée dans le corps, ou alignée à gauche ou à droite. C'est donc au navigateur de décider. Si vous ajoutez une directive au corps, votre problème sera résolu.

<html>
  <head>
    <title>Welcome</title>
    <style>
      body { text-align: center;}
      #pageContainer {width:300px; margin:0px auto;
            text-align:center; border:thin 1px solid;}
      #toLogo{border:none; }
    </style>
  </head>
  <body>
    <div id="pageContainer">
      <a href="http://portal.thesit.com" id="toSite">
        <img src="LOGO_DNNsmall.png" id="toLogo">
      </a>
    </div>
  </body>
</html>

J'ai ajouté une bordure de 1px à la division pour que vous puissiez voir plus clairement ce qui se passe.

Vous laissez le navigateur s'en charger parce qu'il est en mode bizarrerie. Pour supprimer le mode bizarrerie, ajoutez une définition de doctype au début, comme ceci :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
  <head>
    <title>Welcome</title>
    <style>
      #pageContainer {width:300px; margin:0px auto;
            text-align:center; border:thin 1px solid;}
      #toLogo{border:none; }
    </style>
  </head>
  <body>
    <div id="pageContainer">
      <a href="http://portal.thesit.com" id="toSite">
        <img src="LOGO_DNNsmall.png" id="toLogo">
      </a>
    </div>
  </body>
</html>

Vous pouvez maintenant voir votre div de 300 px au centre de la page.

2voto

Bryan Points 1210

Ajouter text-align:center au corps. Cela devrait le faire quand il est combiné avec le margin:0 auto sur le div.

Vous pouvez centrer sans utiliser le text-align:center sur le corps de la page en enveloppant l'ensemble du contenu de la page dans un conteneur pleine largeur, puis en mettant en place l'option text-align:center sur ce point également.

<html>
<head>
<title>Welcome</title>
<style>
    #container {text-align:center;border:1px solid blue}
    #pageContainer {width:300px; margin:0 auto; border:1px solid red}
    #toLogo{border:none; }
</style>
</head>
<body>
    <div id="container">
        <div id="pageContainer">
        <a href="http://portal.thesit.com" id="toSite"><img src="LOGO_DNNsmall.png" id="toLogo"></a>
        </div>
    </div>
</body>
</html>

(J'ai ajouté le container div). Mais cela ne change pas grand-chose... juste une div supplémentaire. Vous avez toujours besoin des mêmes propriétés css.

0voto

Darryl Hein Points 33819

Vous voudrez probablement le remplacer par ce qui suit :

<html>
<head>
<title>Welcome</title>
<style>
    body { text-align: center; }
    #pageContainer {width:300px;margin:0 auto;}
    #toLogo{border:none; }
</style>
</head>
<body>
    <div id="pageContainer">
    <a href="http://portal.thesit.com" id="toSite"><img src="LOGO_DNNsmall.png" id="toLogo"></a>
    </div>
</body>
</html>

El text-align:center; est déplacé vers le corps. Si vous souhaitez placer un autre contenu aligné à gauche dans le div #pageContainer alors vous aurez besoin text-align:left; pour cette classe. C'est la solution que j'ai utilisée dans un certain nombre de sites Web et qui semble fonctionner sur tous les navigateurs (c'est ce que Dreamweaver utilise dans ses modèles de démarrage).

0voto

Alex Angelico Points 509

POUR LES UTILISATEURS DE BLUEPRINT Cela m'a rendu fou, jusqu'à ce que je trouve ce post : problème avec ie8 et blueprint Pour faire court, dans votre code html, changez la balise

 <!--[if IE]>
 <link rel="stylesheet" href="../css/blueprint/ie.css" type="text/css" media="screen, projection" /> 
<![endif]--> 

pour

<!--[if lt IE 8]>
<link rel="stylesheet" href="../css/blueprint/ie.css" type="text/css" media="screen, projection" />
<![endif]-->

Salutations Alex

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X