3 votes

Le sélecteur CSS enfant ne fonctionne pas sur ie9

J'ai une page comme celle-ci :

<body>
<table width="100%">...</table>
<table width="100%">...</table>
<table width="100%">...</table>
<table width="100%">...</table>
</body>

Ce que j'ai besoin de faire est de rendre tous ces tableaux 85% de largeur et centrés horizontalement sur la page. ce serait facile si la page était une page unique mais cela doit fonctionner sur 100+ pages et la seule chose qu'elles ont en commun est le fichier de feuille de style. donc j'ai besoin de faire cela avec css seulement. je ne peux pas couvrir les tableaux à l'intérieur d'un div ou utiliser jquery.

Ce que j'ai essayé de faire, c'est.. :

body { text-align:center; }
body > table { text-align: left; margin: 0 auto; width: 85%; }

cela fonctionne parfaitement sur firefox et google chrome mais cela ne semble pas fonctionner sur ie9 (je n'ai pas testé mais je suis sûr que cela ne fonctionnera pas avec les versions antérieures de ie)

J'ai essayé beaucoup de méthodes qu'ils ont écrites sur des questions similaires mais je n'ai pas pu résoudre ce problème.

EDIT :

Le doctype de la page était :

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

Je l'ai remplacé par :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

et ça marche aussi sur ie9 maintenant !

La question actualisée est la suivante : est-ce possible sans modifier le doctype ?

4voto

BoltClock Points 249668

Comme le dit Yi Jiang, votre déclaration doctype n'est pas correcte. IE9 ne sait probablement pas quoi faire à ce sujet et se réfugie dans son mode bizarre, où il ne voit pas le sélecteur d'enfant (ou devient 10 ans de moins ).

La méthode la plus simple et la plus recommandée consiste à modifier votre déclaration doctype afin de la ramener au mode standard et d'appliquer la règle :

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

Sinon, vous pouvez essayer de renoncer au sélecteur enfant et de réinitialiser les styles sur le reste de vos tableaux en utilisant les styles par défaut que vous souhaitez :

body { text-align:center; }
body table { text-align: left; margin: 0 auto; width: 85%; }
body * table { /* Styles for other tables */ }

Mais comme vous le voyez, le * n'a pas l'air très convivial, donc changer le doctype est certainement la meilleure voie à suivre.

1voto

Josheph Tighe Points 61

J'ai créé ce jsfiddle et il semble fonctionner sur IE9 :

http://jsfiddle.net/XFgLf/

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