28220 sujets

CSS et mise en forme, CSS3

Bonjour,

Je cherche un moyen de remplacer une mise en page à base de tableau pour un site, le modèle qui se rapproche le plus est celui-ci, mais je voudrais pouvoir avoir un div centrale de largeur variable.

Est-ce possible simplement ?

J'ai découvert ce site il y a un an, j'avais pas mal cherché à ce moment là, je me remets actuellement sur les feuilles de styles pour la présentation, mais je ne trouve pas plus la solution qu'avant...

Je suis arrivé à faire ça, au mieux Smiley ohwell

Cordialement,
mathias
Modifié par babar (15 Aug 2006 - 16:11)
Modérateur
Salut,

Si tu prends le modèle N°6 (Mise en page fluide à 3 colonnes) et que tu mets:

#conteneur {
position: absolute;
width: 80%;
margin: 0 10%;
background-color:#CCCCFF;
}

C'est çà non ? Smiley smile
Salut,

Non malheureusement, ce n'est pas ça, je me suis mal exprimé hier soir, dans ce cas là les marges auront une taille de 10%, quelque soit le contenu affiché, ce que je cherche à faire c'est avoir des marges de taille aléatoire.
C'est à dire partir d'un conteneur avec une taille minimal (mettons min-width:750px;), une colonne de chaque coté à taille fixe, et les marges hors du conteneur qui varient selon la taille de la fenêtre du navigateur.

Ceci afin d'avoir un contenu qui puisse faire varier la taille du conteneur, sans que la taille de la fenêtre ne change la présentation.

Voici les deux exemples : largeur min

la même chose avec un div centrale plus large.

Le problème est que j'utilise actuellement un centrage fixé à l'avance pour réalisé cela, ce qui ne peut marcher dans la réalité (je ne connais pas à l'avance la largeur des données à afficher) :

css2 :

#conteneur {
position: absolute;
min-width: 750px;
left: 50%;
margin-left: [b]-375px;[/b]
background-color:#CCCCFF;
}


css3 :

#conteneur {
position: absolute;
min-width: 750px;
left: 50%;
margin-left: [b]-475px;[/b]
background-color:#CCCCFF;
}


L'exemple fournit dans le premier message utilise ceci :

#conteneur {
position: absolute;
min-width: 750px;
margin-left: auto;
margin-right:auto;
background-color:#CCCCFF;
}


mais ne se centre pas.

J'espère avoir réussi à éclaircir la situation, cordialement,

mathias
Salut ...

Si j'ai bien compris, tu veux que le site soit toujours centré alors que sa largeur est variable d'une page à l'autre ?

A ma connaissance, il n'y a pas moyen de faire ça Smiley confus

Mais c'est un peu bizarre comme comportement pour un site !
Pourquoi est-ce un comportement bizarre ?

Ça force juste la largeur du site, tout comme peu le faire le modèle 5 dont le lien est plus haut, mais avec en plus la possibilité d'élargir la zone de données...

Ceci, c'est bien dommage que css ne permette pas cela, ça veut dire que je ne suis pas près de remplacer la mise en page faite par des tableaux par la même en css Smiley ohwell

a+
Ce qui est inhabituel, c'est d'avoir une largeur variable en fonction du contenu Smiley ohwell

On utilise habituellement une largeur fixée en px ou en pourcentage, mais indépendante du contenu des pages ...
Mon but est de récupérer des inforomations venant de bases de données, et d'avoir une présentation qui me permette de ne pas m'inquiéter du contenu ressorti (ie du nombre de colonne, de leur taille), je cherche donc à avoir un gabarit supportant le plus grand nombre de possiblités, avec tout de même une idée de présentation de départ.

J'aime beaucoup la présentation du modèle n°5, elle permet de garder un affichage compact des données même si ces données sont peu nombreuses, et même si l'utilisateur travaille sur un grand écran (avec une grosse définition, type 1600x1200 par exemple).

Le problème c'est quand les données à afficher deviennent trop nombreuses, le tableau de résultat risque fort de dépasser de la fixée au départ, ce qui n'intéresse certainement personne Smiley smile

Le but est donc juste d'améliorer ce modèle n°5.

Voilà a+

Un site utilisant ce type de présentation, pour les mêmes raisons : clanCalendar.NET.

Une solution pourrait être de faire un tableau mono-cellule contenant la mise en page css, ce qui n'est certes pas classe, mais si ça solutionne mon problème, je prends ^^
Modifié par babar (13 Aug 2006 - 16:43)
Bonjour,

La solution CSS2 à ce type de contrainte est simple. Mais elle passe par deux valeurs de la propriété display (inline-block et inline-table) non implémentées actuellement par Firefox et IE. Elle peut être en revanche exploitée dans Opera.

Ce qui rend amusante la lecture de cet avertissement trouvé sur le site de babar:

a écrit :
Ce site n'est malheureusement pas encore prévu pour fonctionner avec les produits Microsoft®

Non pas que je fasse de la résistance - bien que ^^ - mais simplement que leur produit ne respectent pas le standards de fait qu'est devenu CSS, et comme se site est en construction, je ne m'occuperai de celà qu'en dernier.

Vous pouvez télécharger Firefox si ce n'est pas encore fait en cliquant simplement sur le bouton en bas de page pour visiter ce site avec un affichage correct.


En réalité, babar devrait donc développer pour Opera uniquement, et ranger Firefox et IE au rang des mauvais élèves...

(Bien entendu, plus sérieusement, tous les navigateurs sont en réalité des mauvais élèves CSS2, aucun n'implémentant complètement cette norme).

D'autre part, sur le fond :

site de babar a écrit :
Pourquoi tout ça ? C'est très simple, le html m'ennuie terriblement, tandis que jouer avec une DB et l'attaquer en PHP m'amuse bien, alors j'essaie de faire faire une base de site dans laquelle je n'aurai pas à m'occuper du HTML Smiley smile


... est une démarche qui expose à certains déboires. Faut-il rappeler qu'on développe pour du contenu, et que le formattage de sa structure est l'étape clé de la réalisation d'un site ? J'ignore quel est le contenu de cette base de donnée, mais je doute fort que la production de tableaux génériques en guise de format de sortie soit la meilleure manière d'aboutir à des structures pertinentes...

Quoi qu'il en soit, et pour conclure: l'utilisation d'un tableau global de présentation est un repli naturel dans cette situation.
Modifié par Laurent Denis (14 Aug 2006 - 04:44)
Modérateur
Hello,

Lorsque je regarde clanCalendar.NET, il y a moyen d'émuler ce résultat sans se servir de table. Smiley rolleyes La seule contrainte, c'est de mettre du contenu peu intéressant dans la partie gauche (des pubs par exemple) car c'est la seule chose qui devient inaccessible lorsqu'on diminue la largeur de la fenêtre.

En fait, en repartant du modèle 1, on peut faire 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>
<title>Largeur fixe 750, header/contenu/footer.</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<style type="text/css">
/* CSS issu des tutoriels  www.alsacreations.com/articles  */
body
{
	font-family:Verdana, Arial, Helvetica, sans-serif;
	font-size: 0.8em;
	margin: 0;
	padding: 0;
	min-width:750px;
}
#conteneur
{
	position: absolute;
	width: 550px;
	left: 50%;
	margin-left: -275px;
}
#pubs
{
	position:absolute;
	top:0;
	left:-100px;
}
#menu
{
	position:absolute;
	top:0;
	right:-100px;
}
#pubs *,
#menu *
{
	margin:0;
	padding:0;
	width:100px;
	text-align:center;
}
#header
{
	height: 100px;
	background-color: #99CCCC;
}
#centre
{
	background-color:#9999CC;
}
#pied
{
	height: 30px;
	background-color: #99CC99;
}
p
{
	margin: 0;
}
</style>
</head>

<body><div id="conteneur">

	<div id="header">
		header <a href="http://www.alsacreations.com/articles/modeles">(voir tous les modèles)</a> - <a href="http://www.alsacreations.com/articles/modeles/contenu_fixe.css">(voir la feuille de style CSS)</a>
	</div>
	<div id="centre">
		<p>partie centrale</p>
		<p>partie avec du contenu occupant le reste de la largeur</p>
		<p>partie avec du contenu occupant le reste de la largeur</p>
		<p>partie avec du contenu occupant le reste de la largeur</p>
		<p>partie avec du contenu occupant le reste de la largeur</p>
		<p>partie avec du contenu occupant le reste de la largeur</p>
		<p>partie avec du contenu occupant le reste de la largeur</p>
		<p>partie avec du contenu occupant le reste de la largeur</p>
		<p>partie avec du contenu occupant le reste de la largeur</p>
		<p>partie avec du contenu occupant le reste de la largeur</p>
		<p>partie avec du contenu occupant le reste de la largeur</p>
		<p>partie avec du contenu occupant le reste de la largeur</p>
		<p>partie avec du contenu occupant le reste de la largeur</p>
		<div id="pubs">
			<h3>pubs</h3>
			<ul>
				<li><a href="#">pub</a></li>
				<li><a href="#">pub</a></li>
				<li><a href="#">pub</a></li>
				<li><a href="#">pub</a></li>
			</ul>
		</div>
		<div id="menu">
			<h3>menu</h3>
			<ul>
				<li><a href="#">lien</a></li>
				<li><a href="#">lien</a></li>
				<li><a href="#">lien</a></li>
				<li><a href="#">lien</a></li>
			</ul>
		</div>
	</div>
	<div id="pied">pied de page</div>

</div></body></html>

Modifié par koala64 (14 Aug 2006 - 09:12)
koala64 a écrit :
La seule contrainte, c'est de mettre du contenu peu intéressant dans la partie gauche (des pubs par exemple) car c'est la seule chose qui devient inaccessible lorsqu'on diminue la largeur de la fenêtre.

Bonjour,

Il est tout à fait possible de réaliser la même mise en page sans cette limitation.
Par rapport au modèle 5, on peut spécifier une position relative au conteneur et le centrant normalement (margin: auto) et ajouter top: 0 aux boîtes latérales tout en oubliant pas les marges pour le header.

On peut également se passer de positionnement en utilisant la propriété float, même si dans le document HTML le code des deux boîtes vient après celui du header et de la boîte centrale.

Toutefois cela ne concerne pas le problème de Babar.
Modérateur
Alan a écrit :
Il est tout à fait possible de réaliser la même mise en page sans cette limitation.
Par rapport au modèle 5, on peut spécifier une position relative au conteneur et le centrant normalement (margin: auto) et ajouter top: 0 aux boîtes latérales tout en oubliant pas les marges pour le header.
Exact oui. C'est plus judicieux. Smiley cligne
Modérateur
bonjour,

ce probleme m'a semble interessant et en partant de l'idée d'un display:table;
et qu'un "width correspont" a un min-width dans IE , j'ai penser qu'a l'aide de flottants que c'etait faisable, hmmmm , jusqu'au moment ou j'ai mis des couleurs au fond des differentes zone , et la bien sur IE s'elargie mais conserve la largeur de base exprime dans le css ! , un peu de width: expression ne suffit pas a le faire rentré dans l'ordre (enfin du moins , je ne maitrise pas assez pour allez plus loin et pas le temps cette semaine ).

bon le code pour un gabarits si c'est reprenable par un autre , (passe dans opera , firefoxe et IE en partie ...centrage et fextensibilité haut/bas presente, mais oups bug affichage dans la zone centrale . (probleme que j'ai deja rencontre mais jamais regle ) :
<!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>
<title>essai bloc centre extenseur</title>
<style type='text/css'>
* {margin:0;padding:0;}
#conteneur {
	background:#777;
	border:1px solid #444;
	width:750px;
	margin:1% auto;
	display:table;/* pour ff et cIe , IE comprend width comme min-width ! */
}
#gab {
	float:left;
	background:#aaa;
	border:1px solid #444;
	margin:0 155px;
	position:relative;
}
#gab p {padding:0.5em;text-indent:1em;}

#col1 , #col2 {
	width:150px;
}
#col1 {
	margin-left:-155px;
	float:left;
}
#col2 {
	margin-right:-155px;
	float:right;
}
#head , #pied {
	background:#ddd;
	clear:left;
}
</style>

<!--[if lte IE 6]><!-- a vrai dire tester sur IE 6  uniquement-->
<!-- IE 7 hors jeu ou encore a inclure ? -->
<style type='text/css'>

#head , #pied {/* probleme de taille se repercutant aussi sur le contenu de gab */
	width: expression(document.getElementById('conteneur').clientWidth  -0 -0);/* tester sur IE6 */

}
#conteneur {}
#gab {display:inline;/* bug marge double ! */}

#col1 , #col2 { 
	position:absolute;
}

p.ieagain {
	background:green;
	width:expression(document.getElementById('conteneur').clientWidth  155 -155 ); /*  tester sur IE6 */
	white-space:pre;/* ou nowrap ; entre 2 contraintes ...*/


}
#col1
 {
	left:0;
}
 #col2 {
	right:0;
}
</style>

<! endif -->
</head>
<body>
<div id="conteneur">
	<div id="head">head</div>
		<div id ="gab">
			<div id="col1">col1</div>
			<div id="col2">col2</div>
<p>fffffffffffffffffffffffffffffffffffffffffffffffdfdfdffddffdfdsssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss<br 

/>fhjhfjhfjhfjfjfhfhfj</p>

<p class="ieagain">Pour ce rendre compte du min width a 750px diminue la taille des polices. Et maintenant ? ?????</p>
<hr />
<p class="ieagain">opera et ff ok , IE heu bof , a tester avec du contenu , image , texte , tableau , etc ...
ça sent la bricole et le js/css a plein nez [smile] </p>
</div>
	<div id="pied">pied</div>
</div>
</body>
</html>


voila , c'est tout pour le moment , si ça fait avancé un peu.

++

<edit>
le pourquoi des flottants sortit du centrale ... j'etait partis sur au depart sur 3 flottants , padding lateraux sur le contenant et les colonne replacées en relative .. pour eviter ce bug de double marge ....
et ainsi eviter les absolute, j'y suis passe en pensant me defaire du bug de la largeur initiale du conteneur seul prise en compte pour l'affichage du texte et resigner a chercher du cote de width : expression(),
il s'agit bien d'un brouilon/bricole plein de bugs divers et variées ... </edit>
Modifié par gcyrillus (14 Aug 2006 - 23:54)
Bonsoir,
Il est difficile de se reposer sur la mauvaise interprétation faite par IE <=6 de la propriété width étant donné qu'IE 7 aura une interprétation plus conforme et, malheureusement, n'implémentera pas display:table.

Autant alors, si nécessaire, utiliser un tableau conteneur (ne serait-ce qu'en commentaire conditionnel si c'est si mal vécu que cela...)
Modifié par Alan (15 Aug 2006 - 00:17)
Bonjour et merci de vos réponses,

J'ai pris le temps de faire la présentation que je voulais c'est ici, et j'ai utilisé un tableau comme dit plus haut.

J'ai ajouté un morceau de javascript pour afficher ou non un div permettant d'élargir la zone centrale, afin de bien montrer le résultat que cherche à obtenir.

Je n'ai pas encore cherché à appronfondir vos remarques ni vos exemples, j'ai juste remarqué que la solution fournie par gcyrillus fonctionne avec Firefox, mais je m'y pencherai plus avant bientôt Smiley smile

Pour répondre Laurent, je me doutais qu'en laissant un lien vers cette adresse, j'aurais droit à quelques remarques sur mes élucubrations nocturnes, mais c'est plus fort que moi, j'aime dénigrer IE Smiley langue

Ensuite pour ce qui est de la génération de contenu, il est vrai qu'une présentation universelle n'est pas possible, mais en réalisant une série de présentations de base, dans lesquelles il est possible de rajouter des options a volonté, il y a déjà possibilité de générer quelques types contenus à l'aide de fonction de mise en page. Il sera toujours temps de rajouter et/ou modifier ces fonctions lorsque que l'affichage ne sera pas celui escompté.


Cordialement,

mathias

PS: je vois 2 écoles dans le développement php, le html contenant du php, ou le php générant du html, j'opte pour la seconde Smiley cligne
Modifié par babar (15 Aug 2006 - 15:26)