28172 sujets

CSS et mise en forme, CSS3

Salut zatouss,

Je viens de coder un calendrier qui affiche 7 mois avec 7 tableaux alignés grâce à un float: left.

Mes 2 problèmes :
- comment centrer cette série dans un div (j'ai tout essayé mais à chaque fois ça reste à gauche du div) ?
- comment faire pour que sous IE6, cette série de tableaux "flottants" ne sorte pas de son div parent (j'ai testé overflow: auto, ...) ? Ca marche bien sous FF et Opera.
Attention, ça marche sur IE si le div parent est flottant, mais je veux que mon parent prenne toute la largeur du navigateur (moins les marges fixes).

MERCI d'avance !

PS : voici un lien de ce je vois actuellement sous IE, on voit que les tableaux sortent du parent (bordure bleue). Par ailleurs on constate que les tableaux ne sont pas centrés.
Le lien
Modifié par jeyce (26 Jan 2008 - 23:42)
bonjour
si tu veux que le div parent soit toujours à 100%
-soit tu donnes une dimension en % à tes tableaux : (100/7) en tenant compte des marges etc
-soit tu mets un display:inline aux tableaux et un text-align: center au div parent (plus de float:left)
-ou tu renonces aux 100%, en fixant la largeur du div parent (calculée pour faire 7 fois la largeur d'un tableau), tu peux le centrer en mettant margin:auto;

-enfin, pour que les flottants ne sortent pas du tableau il faut terminer la "flottaison"par exemple avec <hr/> après le dernier tableau dans le code html et hr{clear:left;visibility;hidden;} dans le css.
le overflow:auto devrait alors fonctionner.
ceci permettra aussi d'avoir les tableaux à l'intérieur de la bordure bleue (pour autant que la div parent soit bien fermée après le dernier tableau évidemment)

mon conseil perso : fixer la largeur du div parent et le centrer...
Merci verdan, néanmoins j'ai encore quelques soucis :

- pour le hr ça évite que les tableaux sortent du parent MAIS, sous IE, j'ai un espace vide bien visible, pourtant voici mon style :

hr {
	clear: both;
	visibility: hidden;
	padding: 0;
	margin: 0;
	height: 0;
} 


- pour centrer les tableaux j'ai vraiment besoin d'avoir le parent à 100% donc j'ai essayé de mettre une largeur de 13% pour les 7 tableaux -> marche sous IE, mais sous FF les tableaux se retrouvent les uns en dessous des autres... Le "display: inline" sur chaque tableau + "text-align: center" sur le parent marche sous IE (mais malheureusement c'est aussi centré verticalement, et mes tableaux n'ont pas la même hauteur...) mais sous FF tout reste à gauche.

Je m'arrache les cheveux...
bonjour
tu ne pourrais pas mettre un lien ? ou alors le code complet car sans savoir en quoi consistent ces tableaux c'est un peu difficile ...
Il m'est difficile de mettre en ligne car c'est une page très complexe contenant d'autres choses sans rapport avec le sujet, bourrée de javascript et utilisant pas mal de css, donc c'est chaud de nettoyer ça pour n'avoir que l'essentiel.

Néanmoins si tu es capapble (ou n'importe qui d'autre) de me faire une page toute simple avec un div 100% (étirable) contenant 3 tableaux qui se centrent dans ce div et qui ne sortent pas de celui-ci, je suis preneur !
(et qui fonctionne sous IE et FF)

Merci.
Modifié par jeyce (04 Feb 2008 - 03:39)
Bonjour,

Le seul moyen à ma connaissance de faire ce que tu cherches à faire est d'utiliser des conteneurs div (un par table) en display: inline-block. Problème:
- pas implémenté par Firefox 2 (ok dans Firefox 3);
- pas implémenté pour les éléments de type bloc tels que div dans Internet Explorer.

En l'absence d'une implémentation correcte pour display: inline-block, la seule solution que je vois consiste à utiliser un tableau de mise en forme pour caser les tableaux de données. On peut utiliser un tableau à une seule cellule, qui a pour avantage de pouvoir être centré via les marges automatiques (margin: 0 auto;) même sans avoir de largeur déterminée à l'avance (contrairement à un élément de type bloc tel que div, qui a besoin d'un width ou d'un max-width).

Ce qui peut donner:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	<title>Test</title>
	<style type="text/css" media="screen">
	table#test {
		margin: 0 auto;
	}
	table#test table {
		float: left;
	}
	</style>
</head>

<body>

<table id="test"><tr><td>
	<table><tr><td>Table 1</td></tr><tr><td>Table 1</td></tr><tr><td>Table 1</td></tr></table>
	<table><tr><td>Table 2</td></tr><tr><td>Table 2</td></tr><tr><td>Table 2</td></tr></table>
	<table><tr><td>Table 3</td></tr><tr><td>Table 3</td></tr><tr><td>Table 3</td></tr></table>
</td></tr></table>

</body>
</html>


Voilà pour une première solution.

J'ai trouvé une deuxième solution qui n'oblige pas à utiliser un tableau de mise en forme à une seule cellule, en passant par un display: inline sur les tableaux. Bon, là c'est du pifomètre total, ça m'étonne un peu que ça marche (d'ailleurs ça marche avec IE 6-7, FF2 et Opera 9, mais pas avec Konqueror 3.5 et Safari 3). Mais voilà ce que ça donne:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	<title>Test</title>
	<style type="text/css" media="screen">
	div#test {
		text-align: center;
	}
	div#test table {
		display: inline;
	}
	</style>
</head>

<body>

<div id="test">
	<table><tr><td>Table 1</td></tr><tr><td>Table 1</td></tr><tr><td>Table 1</td></tr></table>
	<table><tr><td>Table 2</td></tr><tr><td>Table 2</td></tr><tr><td>Table 2</td></tr></table>
	<table><tr><td>Table 3</td></tr><tr><td>Table 3</td></tr><tr><td>Table 3</td></tr></table>
</div>

</body>
</html>


Pour information, la solution avec display: inline-block, qui pour le coup marche avec Safari et Konqueror (et Opera et Firefox 3) peut ressembler à ceci:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	<title>Test</title>
	<style type="text/css" media="screen">
	div#test {
		text-align: center;
	}
	div#test div.conteneur {
		display: inline-block;
	}
	</style>
</head>

<body>

<div id="test">
	<div class="conteneur"><table><tr><td>Table 1</td></tr><tr><td>Table 1</td></tr><tr><td>Table 1</td></tr></table></div>
	<div class="conteneur"><table><tr><td>Table 2</td></tr><tr><td>Table 2</td></tr><tr><td>Table 2</td></tr></table></div>
	<div class="conteneur"><table><tr><td>Table 3</td></tr><tr><td>Table 3</td></tr><tr><td>Table 3</td></tr></table></div>
</div>

</body>
</html>


PS pour Igor: je ne fais pas le travail de jeyce à sa place, je lui donne des informations et des solutions techniques, à lui maintenant de choisir la bonne solution ou d'en trouver une autre. Et s'il utilise une des solutions que je lui présente, il faudra qu'il se charge lui-même du travail d'adaptation pour son site, des tests complémentaires dans les navigateurs, etc. Smiley cligne

Ceci dit, ça ne fait jamais de mal de rappeler cette règle. Smiley smile
Modifié par Florent V. (04 Feb 2008 - 11:50)
Florent V. > merci pour ton aide ! Je vais tester ça.

Igor > je ne demandais pas à ce qu'on me mâche le travail, mais quand je dis "une page toute simple..." ça veut dire simplement l'imbrication de div (ou table) dont j'ai besoin et leur style, même moins que ce que Florent V. a fait Smiley cligne
En gros ce qui se fait en général sur ce forum.