Bonjour à tous,
Je suis webmaster d'un site e-commerce en production, et il y a quelques années, j'avais trouvé une astuce CSS pour centrer automatiquement des blocs dans une page. C'est une méthode qui ne doit pas être courante, car je l'ai jamais vue nulle part ailleurs.
Depuis quelques années donc, tout fonctionnait bien sur la plupart des navigateurs courants: IE, Firefox, Opera en tous cas. Jusqu'à ce que Firefox passe en 3.0.4 (je crois que ça marchait encore sur la 3.0.3). Et là, horreur, ils ont du modifier le moteur CSS car ça marche plus. Et sur le futur Firefox 3.1 non plus. Et sur IE8 pas mieux (ça marchait encore sur IE7).
Et j'ai beau me torturer les cheveux, je trouve rien pour remplacer. J'aurais donc besoin que quelqu'un de très fort passe par là pour m'aider. Même si c'est une solution en CSS 3.0 et que ça marche sur FF, je prends. Parce que mon e-commerce sans le centrage, c'est pas très joli.
Donc voilà. Mon centrage de bloc donne ça. Il faut modifier la largeur de la fenêtre pour voir le fonctionnement.
Si vous le regardez avec IE < 8, FF < 3.0.4 ou Opera, cela doit donner ça:
http://asgarel.free.fr/centrage-OUI.jpg
Les blocs noirs sont toujours bien centrés dans ma fenêtre.
Sinon, ça ne marche pas et ça donne ça:
http://asgarel.free.fr/centrage-NON.jpg
Les blocs noirs sont alignés à gauche dans ma fenêtre.
Je ne recopie pas le code pour ne pas alourdir le post: il suffit de regarder le source sur mon lien.
Le principe est donc d'imbriquer 3 niveaux de DIV qui sont tous en float:left. Le premier niveau #ensemblebloc (jaune) contient donc des blocs de tailles fixes mais de nombre variable. Il est décalé de 50% de la taille de son conteneur (#centrage) vers la gauche. La taille du deuxième niveau #centrage (rouge à droite) doit s'adapter en largeur à son contenu (#ensemblebloc, donc), et est décalé de 50% de son conteneur (#global, donc) vers la droite. Le dernier niveau #global est static et représente ici la page (le rouge de gauche).
Apparemment, le problème vient du width:auto de #ensemblebloc qui ne s'adapte plus automatiquement à la taille de son contenu, mais s'étend maintenant à 100% de son contenant #global. Mais pourquoi ils ont été modifier ce comportement ? Surtout si c'est pour supprimer des possibilités au CSS plutôt que d'en ajouter ?
Bon, je reconnais que le problème n'est pas simple. Disons que c'est un peu un défi .
Merci aux courageux qui se pencheront sur mon casse tête.
Modifié par Asgarel (20 Nov 2008 - 17:17)
Je suis webmaster d'un site e-commerce en production, et il y a quelques années, j'avais trouvé une astuce CSS pour centrer automatiquement des blocs dans une page. C'est une méthode qui ne doit pas être courante, car je l'ai jamais vue nulle part ailleurs.
Depuis quelques années donc, tout fonctionnait bien sur la plupart des navigateurs courants: IE, Firefox, Opera en tous cas. Jusqu'à ce que Firefox passe en 3.0.4 (je crois que ça marchait encore sur la 3.0.3). Et là, horreur, ils ont du modifier le moteur CSS car ça marche plus. Et sur le futur Firefox 3.1 non plus. Et sur IE8 pas mieux (ça marchait encore sur IE7).
Et j'ai beau me torturer les cheveux, je trouve rien pour remplacer. J'aurais donc besoin que quelqu'un de très fort passe par là pour m'aider. Même si c'est une solution en CSS 3.0 et que ça marche sur FF, je prends. Parce que mon e-commerce sans le centrage, c'est pas très joli.
Donc voilà. Mon centrage de bloc donne ça. Il faut modifier la largeur de la fenêtre pour voir le fonctionnement.
Si vous le regardez avec IE < 8, FF < 3.0.4 ou Opera, cela doit donner ça:
http://asgarel.free.fr/centrage-OUI.jpg
Les blocs noirs sont toujours bien centrés dans ma fenêtre.
Sinon, ça ne marche pas et ça donne ça:
http://asgarel.free.fr/centrage-NON.jpg
Les blocs noirs sont alignés à gauche dans ma fenêtre.
Je ne recopie pas le code pour ne pas alourdir le post: il suffit de regarder le source sur mon lien.
Le principe est donc d'imbriquer 3 niveaux de DIV qui sont tous en float:left. Le premier niveau #ensemblebloc (jaune) contient donc des blocs de tailles fixes mais de nombre variable. Il est décalé de 50% de la taille de son conteneur (#centrage) vers la gauche. La taille du deuxième niveau #centrage (rouge à droite) doit s'adapter en largeur à son contenu (#ensemblebloc, donc), et est décalé de 50% de son conteneur (#global, donc) vers la droite. Le dernier niveau #global est static et représente ici la page (le rouge de gauche).
Apparemment, le problème vient du width:auto de #ensemblebloc qui ne s'adapte plus automatiquement à la taille de son contenu, mais s'étend maintenant à 100% de son contenant #global. Mais pourquoi ils ont été modifier ce comportement ? Surtout si c'est pour supprimer des possibilités au CSS plutôt que d'en ajouter ?
Bon, je reconnais que le problème n'est pas simple. Disons que c'est un peu un défi .
Merci aux courageux qui se pencheront sur mon casse tête.
Modifié par Asgarel (20 Nov 2008 - 17:17)