28221 sujets

CSS et mise en forme, CSS3

Bonjour à tous, j'utilise un conteneur en display:table avec 2 blocs en table-cell pour faire une mise en page en 2 colonnes de même hauteur.
Mon souci est le suivant : si je place quoi que ce soit avant ma balise conteneur (un bandeau de titre ou même une ligne de texte) ma mise en page devient instable : lors de plusieurs rafraichissements de pages (F5), un coup tout est calé, un coup j'ai la colonne de droite qui passe sous celle de gauche, puis ça se recale...

Y a-t-il des "conditions d'utilisation particulières" à cette propriété pour que l'interprêtation se fasse correctement ?

Voici mon code html :

<body>
<div id="conteneur"> 

<div id="gauche"> 
<h1>Titre</h1> 
<p>Premier paragraphe paragraphe paragraphe paragraphe paragraphe</p> 
<p>Deuxieme paragraphe paragraphe paragraphe paragraphe paragraphe</p> 
<div class="vignette"><img src="image.gif" /><br />Legende de l'image</div>
<div class="vignette"><img src="imagee.gif" /><br />Legende de l'image</div>
<div class="vignette"><img src="image.gif" /><br />Legende de l'image</div>
<div class="vignette"><img src="image.gif" /><br />Legende de l'image</div>
<div class="vignette"><img src="image.gif" /><br />Legende de l'image</div>
<hr class="clear">
<p>Troisieme paragraphe paragraphe paragraphe paragraphe paragraphe</p> 
</div> 

<div id="droite"> 
<p class="accroche">Accroche de droite</p> 
<img src="image.gif" /><br />
<p class="legende">Legende de l'image</p>
</div> 

</div>
</body> 


Et ma feuille de styles :

* {
	font-family:Verdana, Arial, Helvetica, sans-serif;
}
body {
	margin:0px;
	padding:0px;
}
#conteneur {
	width:760px;
	display:table; 
	background-image:url(images/fond.gif);
	background-repeat:repeat-y;
}
#top {
	margin-top:10px;
}
#gauche, #droite {
	display:table-cell;
	height:100%;
}
#gauche {
	width:470px;
}
#droite {
	text-align:center;
}
h1 {
	font-size:0.9em;
	margin:20px 15px 15px 15px;
	color: #E6793A; 
}
p {
	font-size:0.8em;
	color: #666666;
	text-align:justify;
	padding:0px 15px 0 15px;
}
.legende {
	color:#999999;
	font-size:0.6em;
	padding:0px 15px 0 15px;
	text-align:center;
}
.accroche {
	font-size:0.8em;
	color: #E6793A;
	text-align:center;
}
.vignette {
	float:left;
	width:120px;
	margin:0px 0px 15px 15px;
	color:#999999;
	font-size:0.6em;
	text-align:center;
}
.clear {
	visibility:hidden;
	clear:both;
}


Merci à vous Smiley smile
Modifié le 25 Nov 2004 - 12:00
Je ne suis sur de rien mais...

Il me semble que les display:table ne sont pas encore bien integrés par la plupart des navigateurs. Leur utilisation serait donc instables par la force des choses et leur emploi déconseillé.

Mais je peux me tromper
J'utilisais une mise en page tableau avant, je veux passer le site en css...
La propriété display:table me permet d'avoir une mise en page avec des colonnes de même hauteur, que ce soit la gauche ou la droite qui est la plus longue. Le tout fonctionne si je n'ai que ça comme code...

Dès lors qu'entre la balise body et la première balise en display:table j'ai quelque chose, tout devient instable.

Y a-t-il des exigences particulières à l'utilisation d'un bloc en display:table ?
Est-ce qu'il doit contenir tout les éléments placés eux en display:table-cell pour que tout fonctionne ?
alors là je n'en sais rien...

Mais en trifouillant un peu les tuto alsacréation et autres, tu trouveras probablement quelques trucs pour "simuler" des colonnes de même hauteur sans passer pas des display:table - le plus simple étant une image de fond que l'element contenant les deux colonnes qui simule visuellement la présence de deux colonne (background et border).
Administrateur
cktoon a écrit :

La propriété display:table me permet d'avoir une mise en page avec des colonnes de même hauteur, que ce soit la gauche ou la droite qui est la plus longue. Le tout fonctionne si je n'ai que ça comme code...

Sur ce sujet, je rejoins LapinLove : "display: table-cell" ne fonctionne pas sur IE, donc sur environ 80-90% des visiteurs.

Si tu veux poursuivre avec table-cell :
http://www.blog-and-blues.org/weblog/2004/09/24/304-des-colonnes-de-meme-hauteurs-en-css

Sinon ce sujet a été débattu plusieurs fois ici, et une Recherche devrait donner de bonnes pistes.
Bon, ok, je pourrais tester une autre méthode... Le problème est que j'ai testé plusieurs choses telles que tu le dis pendant longtemps, j'ai d'ailleurs demandé de l'aide ici, et on est finalement arrivé à la conclusion que le display:table était la réponse à mes attentes.
J'ai comme l'impression de tourner en rond depuis des jours...

J'aimerais comprendre ce qui se passe et comment utiliser cette propriété...

Pourquoi ça marche sans rien d'autre et qu'une seule ligne de texte avant rend tout instable ? Est-ce que l'utilisation d'un bloc en display:table impose de n'avoir rien d'autre que des blocs à l'intérieur de ce conteneur ?

[Edit]
Raphael a écrit :

Sur ce sujet, je rejoins LapinLove : "display: table-cell" ne fonctionne pas sur IE, donc sur environ 80-90% des visiteurs.

Si tu veux poursuivre avec table-cell :
http://www.blog-and-blues.org/weblog/2004/09/24/304-des-colonnes-de-meme-hauteurs-en-css

Sinon ce sujet a été débattu plusieurs fois ici, et une Recherche devrait donner de bonnes pistes.

Le sujet a effectivement été débattu, et tu y as participé, notamment sur mon post dont le titre est [comportement étrange] Mise en page 2 colonnes de même hauteur.
Je n'ai pas envie de reprendre tout le cheminement de cette discussion dans celui-ci, si j'ai créé un nouveau post c'est que mon problème identifié concerne précisément le display:table et qu'il m'a semblé qu'en ressortant ça dans un nouveau post celà permettrait de réfléchir ensemble à cette propriété particulière...
[Edit]
Modifié le 25 Nov 2004 - 13:04
Administrateur
a écrit :
on est finalement arrivé à la conclusion que le display:table était la réponse à mes attentes.

En théorie, oui. En pratique : non puisqu'il faut s'affranchir d'un affichage correct sur IE Smiley decu

a écrit :
J'aimerais comprendre ce qui se passe et comment utiliser cette propriété...

L'élément qui reçoit cette propriété se comporte comme une cellule de tableau.
http://www.yoyodesign.org/doc/w3c/css2/visuren.html#display-prop
http://www.yoyodesign.org/doc/w3c/css2/tables.html
http://www.alsacreations.com/blog/index.php?2004/06/09/22-display-vous-connaissez

a écrit :
Est-ce que l'utilisation d'un bloc en display:table impose de n'avoir rien d'autre que des blocs à l'intérieur de ce conteneur ?

Non, une cellule de tableau peut contenir des éléments en ligne.
Raphael a écrit :

Est-ce que l'utilisation d'un bloc en display:table impose de n'avoir rien d'autre que des blocs à l'intérieur de ce conteneur ?

Non, une cellule de tableau peut contenir des éléments en ligne.

Je m'exprime mal : je voulais dire est-ce qu'il est impossible d'avoir du contenu qui soit positionné en dehors du bloc déclaré en display:table ?

Schématiquement ma page se présente ainsi :

<body>
<div id="conteneur">
<div id="gauche">ma colonne de gauche</div>
<div id="droite">ma colonne de droite</droite>
</div>
</body>

Le conteneur a une image d'arrière plan pour habiller le tout et donner l'apparance que les 2 colonnes sont de même hauteur.
Le conteneur est en display:table et les blocs qu'il contient en display:table-cell
Jusque là, tout va bien. Même sous IE avec une toute petite correction - ce n'est donc pas un problème on oublie les commentaires qui concernent ça Smiley cligne

Maintenant, attention, je reprends le même code et j'ajoute un élément :

<body>
[b]<div id="top">Nouvel élément</div>[/b]
<div id="conteneur">
<div id="gauche">ma colonne de gauche</div>
<div id="droite">ma colonne de droite</droite>
</div>
</body>

Et là, ma présentation devient instable : un coup c'est calé, un coup ma colonne de droite passe sous celle d gauche... enfin braf ce que j'ai décrit en haut de ce post.

J'ai testé avec des éléments divers : un texte, une image, dans un <p> et pas une <div>, sans balise particulière... Bref, ça fait 2 jours que je fais des tests...

Édité par Stephan pour BBCode manquant
Modifié le 25 Nov 2004 - 16:42
Bon, je m'obstine et continue à essayer de comprendre la chose...

Lorsque mon élément ajouté avec le bloc en display:table est un bloc en display:table-header-group; le problème est réglé...
Pour le pied de page, ça passe aussi avec un bloc en display:table-footer-group.

Mais en revanche, la chose reste assez instable : je n'arrive pas à mettre des styles de textes par exemple dans le pied de page... Avec les styles de textes la mise en page redevient aléatoire, le texte en brut, ça redevient stable partout.

J'en reviens donc à me demander s'il faut respecter une certaine syntaxe particulière dès lors que l'on utilie un bloc en display:table - comme lorsqu'on fait un tableau html : si on place des <td> dans une balise <table> en oubliant la balise <tr>, le résultat est plus qu'imprévisible...

Est-ce que quelqu'un a une idée ?