28172 sujets

CSS et mise en forme, CSS3

Bonjour,
j'ai suivi le tutoriel ici :
http://www.alsacreations.com/tuto/lire/588-trois-colonnes-float.html

tout marque parfaitement bien sous n'importe quel navigateur ... jusqu'au moment ou le contenu ne dépasse pas du cadre central...

Sous tout navigateur récent, quand ça dépasse, ça cache (ce qui ma foi est pourri quand on aligne au centre du texte dans le bloc du milieu.

Et sur ie6, ça ne cache pas (logique, overflow:visible), donc ça apparait sous les 2 colonnes et coté et en plus ya une scrollbar énorme.

Comment régler le problème autre qu'en faisant 3 colonnes à l'aide d'un tableau (je n'ai trouvé aucune autre solution)
Je précise, j'ai utilisé l'exemple3 vu que dans l'exemple 2, dès que j'utilise un div avec clear, ça s'affiche en dessous du menu.
Tentons malgré tout une réponse dans le vent (vu que pas de code fourni et pas de page en ligne à tester...):

- Si tu as un conteneur pour tes trois colonnes flottantes et que ce conteneur a une hauteur fixe (height: ...px)... c'est une erreur. Ne pas utiliser de hauteur fixe si tu souhaites que le conteneur s'adapte à son contenu.
- Si par «cadre central» tu entends la colonne centrale, soit un DIV en overflow:hidden: là encore, à part un problème de hauteur fixe, je ne vois pas trop ce que ça pourrait être.
Ben prenez le code de l'exemple 3 (http://www.alsacreations.com/xmedia/tuto/exemples/3colonnes/exemple-3.html) et mettez du texte très long

et voilà ça :

edit: url : madri2.free.fr/exemple-3.html

<!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>Exemple : bloc central sans marges, mais avec un contexte de formatage</title>
	<style type="text/css">
		html {font-size: 100%;}
		body {padding: 1em; font-size: .85em; font-family: Verdana, "Bitstream Vera Sans", "Lucida Grande", sans-serif;}
		
		h1 {margin-top: 0; text-align: center; background: moccasin;}
		ol, ul, li {padding: 0; margin: 1em;}
		
		div#colonne1 {
			float: left;
			width: 160px;
			margin-right: 10px;
			padding: 1px 0;
			background: lightblue;
		}
		div#colonne2 {
			float: right;
			width: 300px;
			margin-left: 10px;
			padding: 1px 0;
			background: burlywood;
		}
		div#centre {
			overflow: hidden;
			padding: 1px 20px;
			background: khaki;
		}
	</style>
	
	<!--[if lte IE 6]><style type="text/css">
		div#colonne1 {
			margin-right: 7px;
		}
		div#colonne2 {
			margin-left: 7px;
		}		
		div#centre {
			overflow: visible;
			height: 1%;
			display:inline-block;
		}
	</style><![endif]-->
</head>

<body>
	<h1>Exemple : bloc central sans marges, mais avec un contexte de formatage</h1>
	
	<div id="colonne1">
	<h2>Navigation</h2>
	<ul>
		<li><a href="http://css.alsacreations.com/Faire-une-mise-en-page-sans-tableaux/design-trois-colonnes-positionnement-flottant">Tutoriel : un design fluide avec trois  colonnes Ÿ</a></li>
		<li><a href="exemple-1.html">Exemple : bloc central sans marges</a></li>
		<li><a href="exemple-2.html">Exemple : bloc central avec marges compensant les flottants</a></li>
		<li><strong>Exemple : bloc central sans marges, mais avec un contexte de formatage</strong></li>
	</ul>
	</div><!-- fin de div#colonne1 -->
	
	<div id="colonne2">
	<h2>Code CSS</h2>
	<pre>div#colonne1 {
	float: left;
	width: 160px;
	margin-right: 10px;
	background: lightblue;
}
div#colonne2 {
	float: right;
	width: 300px;
	margin-left: 10px;
	background: burlywood;
}
div#centre {
	overflow: hidden;
	background: khaki;
}</pre>
	<p>Et via un commentaire conditionnel visant Internet Explorer 6 et inférieurs :</p>
	<pre>div#colonne1 {
	margin-right: 7px;
}
div#colonne2 {
	margin-left: 7px;
}		
div#centre {
	overflow: visible;
	height: 1%;
}</pre>
	</div><!-- fin de div#colonne2 -->
	
	<div id="centre">
		<h2>Explications</h2>

<div style="clear:both;"></div>
		<ol>
			<li>Les deux colonnes aux extrémités sont dotées de <strong>largeurs fixes</strong>, et sont <strong>flottantes</strong> à gauche et à droite. Par conséquent, elles "flottent" <strong>par dessus</strong> les autres blocs (et n'en repoussent que le texte ou les images et éléments en-ligne), en l'occurence par dessus notre colonne centrale.</li>
			<li>Ce conteneur central <strong>n'a pas de largeur fixe, et il n'est pas flottant</strong>. Il prend donc 100% de la largeur disponible, soit <strong>toute la largeur</strong>, car les flottants ne sont pas pris en compte.</li>
			<li>Enfin, pour éviter que les limites (bordures, fond) du bloc conteneur central ne s'affichent par dessous les flottants, on rajoute à ce conteneur <strong>un contexte de formatage</strong> à l'aide de la propriété <code>overflow</code>.</li>
			<li>Accessoirement, de petites marges <em>ajoutées aux flottants</em> permettent de créer un retrait entre le bloc central et les flottants.</li>
		</ol>
		<p>Et le tour est joué… du moins pour les navigateurs qui appliquent les contextes de formatage. Pour les autres (pour l'essentiel : Internet Explorer 5 et 6), quelques petits correctifs sont nécessaires.</p>
		
		
		<div style="color: #9a7; margin-top: 50px;">
		<h2>Du texte de remplissage</h2>
		
		<p>LoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLoremLorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae, consequat in, pretium a, enim. Pellentesque congue. Ut in risus volutpat libero pharetra tempor. Cras vestibulum bibendum augue. Praesent egestas leo in pede. Praesent blandit odio eu enim. Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum. Maecenas adipiscing ante non diam sodales hendrerit.</p>
		
		<p>Ut velit mauris, egestas sed, gravida nec, ornare ut, mi. Aenean ut orci vel massa suscipit pulvinar. Nulla sollicitudin. Fusce varius, ligula non tempus aliquam, nunc turpis ullamcorper nibh, in tempus sapien eros vitae ligula. Pellentesque rhoncus nunc et augue. Integer id felis. Curabitur aliquet pellentesque diam. Integer quis metus vitae elit lobortis egestas. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi vel erat non mauris convallis vehicula. Nulla et sapien. Integer tortor tellus, aliquam faucibus, convallis id, congue eu, quam. Mauris ullamcorper felis vitae erat. Proin feugiat, augue non elementum posuere, metus purus iaculis lectus, et tristique ligula justo vitae magna.</p>
		</div>
		
	</div><!-- fin de div#centre -->
</body>
</html>



edit2:
ALors bon me dire, pourquoi mettre autant de texte etc etc.
Mais il suffit que sur un forum quelqu'un poste une image trop grosse ou s'amuse à mettre du texte sans espace et on se retrouve avec le tout collé en bas (mais juste sur ie6 heuresement)

edit3:
en utilisant un tableau, le texte trop grand va faire allonger la fenetre au lieu ici de couper ce qui dépasse.
S'il existe un moyen de faire ça et qui soit compatible ie6...
Parce que j'ai beau éplucher le net il n'y a rien qui soit compatible "texte très long".

edit4 (version 46464, fichues balises qui supportent pas le majuscule):
voici une image du magnifique ie6:
http://img150.imageshack.us/img150/6333/fuckie6.th.png
Modifié par madri2 (25 Aug 2009 - 20:05)
En même temps, ça t'arrive souvent d'utiliser des mots de plusieurs dizaines de lettres ?

Sinon, ajoutes :
word-wrap: break-word;
sur le div ou le paragraphe(ou ailleurs). Cala devrait règler le problème (qui n'avait rien à voir avec les colonnes)
a écrit :
En même temps, ça t'arrive souvent d'utiliser des mots de plusieurs dizaines de lettres ?

j'ai déjà répondu :
a écrit :
ALors bon me dire, pourquoi mettre autant de texte etc etc.
Mais il suffit que sur un forum quelqu'un poste une image trop grosse ou s'amuse à mettre du texte sans espace et on se retrouve avec le tout collé en bas (mais juste sur ie6 heuresement)


alors merci pour ta réponse, ça résoud effectivement le problème avec le texte très long, mais pas si quelqu'un met une image très large
à vrai dire sous ie6 même sans image large j'ai sur mon site pas mal de trucs qui font "dépasser" le contenu.

il suffit que je mette ceci :
<textarea style="width:100%;">blah</textarea>
dans le div du centre pour que ça fasse passer la colonne en dessous Smiley decu

merci de ta réponse
Bonjour,

Mettons nous d'accord: il ne s'agit pas de texte trop long (genre une phrase extraite de Topographie idéale pour une agression caractérisée), mais de longues chaines de caractères sans espaces, d'images ou animations Flash trop larges, voire de tableaux trop volumineux.

Si tu es auteur du site ou intégrateur de contenus, il t'appartient d'éviter ces écueils.

Ensuite, rappelons qu'on ne peut pas forcément attendre de l'intégration front-end qu'elle gère tous les écueils possibles dus au contenu. Les contenus, y compris ceux soumis par des utilisateurs non experts, ça se gère aussi en filtrant/modifiant côté serveur. Les chaines de caractères sans espaces peuvent être tronquées, notamment pour les URL (cas de figure le plus courant), les images uploadées sur le site peuvent (doivent?) être redimensionnées ou refusées si trop grandes, etc.

Enfin, pour l'intégration front-end (le CSS et éventuellement JavaScript), on fait ce qu'on peut pour limiter les dégâts vu que deux précautions valent mieux qu'une, mais il n'y a pas forcément de solution parfaite.

Pour les images:
#mon-conteneur img {max-width: 100%;}

Fonctionnel sous tout navigateur moderne. Ignoré par Papy IE6.

Pour les texte:
#mon-conteneur {word-wrap: break-word;}

Propriété propre à IE. Elle fait partie des brouillons de CSS3, et a été implémentée dans Firefox 3.5 (mais pas les versions précédentes). À voir pour Webkit et pour Opera. Il me semble aussi que l'implémentation dans IE ne correspond pas précisément au texte du brouillon CSS3. Notamment, il y a des cas où cette propriété ne fonctionnerait pas... il faudrait utiliser une largeur explicite sur le conteneur pour que le retour à la ligne (en coupant la chaine de caractères) soit forcé. (Ou bien forcer le HasLayout peut suffire?) À tester plus largement, en gardant à l'esprit que c'est une solution limitée.

(Je note enfin que Firefox 3.5 coupe tout seul les chaines de caractères trop longues, sur certains caractères comme les traits d'union et les barres obliques. Il se peut aussi que d'autres navigateurs fassent de même.)
merci de ta réponse.

Donc a ce que je vois il n'y a aucune méthode pour empêcher que le bloc central aille dessous autre qu'en adaptant le contenu pour qu'il ne dépasse pas.

Alors qu'avec des tableaux, la deuxième case sera toujours au même endroit, peu importe la taille des cases, c'est franchement un avantage.

Les tableau c'est quand même pratique et ça évite des bugs visuels, puisque de toute façon pour l'utilisateur final lui il s'en fout des tableau et verra juste que sous ie6 ça peut arriver que tout soit décalé

(heuresement que je n'ai que 3% de gens qui sont encore sur ce vieux machin)

Sur alsacréation vous mettez des largeurs fixes ou avec des pourcentages ou bien vous vérifiez la taille des éléments

edit: votre forum est composé de tableaux XD
Modifié par madri2 (26 Aug 2009 - 18:13)
madri2 a écrit :
Alors qu'avec des tableaux, la deuxième case sera toujours au même endroit, peu importe la taille des cases, c'est franchement un avantage.

À l'inverse, quand tu as des blocs de largeur fixe tu peux éviter qu'ils s'élargissent dans tous les navigateurs dont IE6 (en y travaillant un peu), tandis qu'avec un tableau ça peut être plus dur.

madri2 a écrit :
Sur alsacréation vous mettez des largeurs fixes ou avec des pourcentages ou bien vous vérifiez la taille des éléments

Tu veux dire sur AlsacréationS? Ben euh je sais pas trop, le conteneur principal (#global) a une largeur fixe (990px). Je ne sais pas si des mesures ont été prises pour les pages de type article ou actualités pour contourner la mauvaise implémentation de width dans IE6. Peut-être que non.
Pour le forum les contenus sont dans un tableau, et si jamais il est trop important ça va dépasser à droite (à voir dans IE6 également, aucune idée). Dans ce cas on a un truc efficace qui s'appelle des modérateurs, ça supprime les images de 2000px de large et ça fait remplace les liens de 458 caractères ininterrompus par des vrais liens en bonne et due forme.

madri2 a écrit :
edit: votre forum est composé de tableaux XD

Euh... et donc?