28173 sujets

CSS et mise en forme, CSS3

Bonjour @ tous

Petit soucis avec une demande d'un client.
Je travail avec des div et une structure classique.

<body>
	<div id="container">
	<div id="header">
		<div style="height: 50px; width: 80%"><h2>Accueil</h2></div>

		<div style="width: 95%">
			<div id="menu_onglet">
				<ul>
				<li class="onglet_courant"><span>
					<a href="accueil1.html">Onglet 1</a>
				</span></li>
				</ul>
			</div>
		</div>
	</div>
	<div style="clear:both;">
	<div id="menu">
	<div class="menuTitre">Accueil </div>
	<div class="menuItem"><a href="accueil1.html">Accueil</a> </div>
	<div class="menuItem"><a href="presentation.html">Présentation</a> </div>
	<div class="menuItem"><a href="projets_de_developpement.html">Projets de développement</a> </div>
	</div>  
	<div id="contenu"><h3 align="center">Page d'accueil</h3>
	</div>
	</div>
	<div id="footer">
Copyright etc...
	</div>
	</div>
</body>


Et j'ai ajouté un p'tit bout de script pour faire en sorte que le menu ou le contenu s'agrandisse et aient la même taille avec un minimum de 300px.

<script language="JavaScript" type="text/javascript">
	var h_mini = 300;
	var menu = document.getElementById("menu");
	var contenu = document.getElementById("contenu");
	/*alert(menu.offsetHeight);*/
	if ((menu.offsetHeight < h_mini) && (contenu.offsetHeight < h_mini))
	{
		menu.style.height = (h_mini+21)+'px';
		contenu.style.height = h_mini+'px';
	}
	else if (menu.offsetHeight < contenu.offsetHeight)
	{
		menu.style.height = (contenu.offsetHeight)+'px';
	}
	else if (contenu.offsetHeight < menu.offsetHeight)
	{
		contenu.style.height = (menu.offsetHeight-21)+'px';
	}
	</script>

Mon soucis se situe au niveau de contenu.style.height la modif est bien faite mais cela provoque un décalage entre les blocks menu et contenu laissant apparaitre l'image de fond.
Ce problème ne se rencontre que sous IE6
Tester sous FF, Opera, IE7

Pour un apperçu des dégats sur le site en construction : Association Beauregard

Si quelqu'un avait une idée pour moi.
Merci d'avance

Lynx
Modifié par dominique (29 Aug 2007 - 16:51)
Salut,

Pourquoi utiliser un script pour avoir 2 colonnes de même hauteur ? il y a moyen d'y arriver en CSS (colonnes factices) ou d'utiliser un tableau de mise en page de 2 cellules ...
J'ai créer un modele qui s'adapte a tout mes sites et les clients peuvent modifier les largeurs #menu et #container dynamiquement.

Pour "colonnes factices"
Il faudrait refaire une image dynamiquement a chaque fois... pas côôl (ou alors j'ai pas tout compris a l'explication).

Et pour la table a 2 colonnes c'est essentielement pcq c'est plus facile de gérer l'insertion d'un bout de js a la fin pour un seul client plutot que de pourrir le code de tout mes clients avec des tables.
Re,
Je suis toujours coincé avec mon soucis, si quelqu'un à une idée...

Je suis preneur pour des solutions alternatives si vous en connaissez, en tenant compte du fait que je ne connais ni la taille du conteneur, ni celle du menu et que autant que possible je voudrais éviter d'utiliser les tables.

Merci d'avance
Je fais un petit retour sur le topic je suis toujours coincé.
J'ai vraiment besoin de ce script. Si quelqu'un peu me trouver une solution.

<modéré par Thomas D.>
Modifié par Thomas D. (29 Aug 2007 - 15:29)
Bonjour,

Si j'ai bien compris, ton menu a un width fixe de 200px ton bloc droit lui à un width variable en fonction de la taille de la fenêtre du navigateur.
A priori as besoin de JS pour cela.
Une piste:
un conteneur en width 100%
à l'interieur ton menu en float: left,
ton bloc droit et un div "vide" en clear: left.
L'astuce ton conteneur, une image de fond composée à gauche de 200px de gris (menu) et à droite de 1500px par exemple de bleu mauve.
Si ton menu est plus long, le conteneur suit et du mauve suit aussi et inversement ...

<edit> ce n'est pas la "mort" comme maintenance en cas de changement de fond ... Smiley biggol </edit>
Modifié par ghost (29 Aug 2007 - 14:20)
Le menu à une largeur variable le conteneur aussi ainsi que le contenu.
Actuellement 8 sites differents utilise ce systeme et une 12ene de plus d'ici la fin de l'année.
Chaque site peut définir les dimentions qu'il veut pour les 3 elements en question.
J'ai déjà regarder du coté des colonnes factices mais c'est pas très satisfaisant car :
les largeurs sont variable de même pour les couleurs de fond ainsi que les bordures (si il y en a)
La solution que j'aimerai trouver c'est qq chose (probablement au niveau du js) qui ne créerait pas d'écart entre les 2 blocs.
Il doit y avoir un truc a faire au niveau des propriétés CSS mais je ne trouve pas sur quel attribut jouer.

if ((menu.offsetHeight < h_mini) && (contenu.offsetHeight < h_mini))
{
	menu.style.height = (h_mini+21)+'px';
	contenu.style.height = h_mini+'px';
	[b]contenu.style.MachinQuiEmpecheLaCreationDeL_Ecart = 'Valeur';[/b]
}
else if (menu.offsetHeight < contenu.offsetHeight)
{
	menu.style.height = (contenu.offsetHeight)+'px';
}
else if (contenu.offsetHeight < menu.offsetHeight)
{
	contenu.style.height = (menu.offsetHeight-21)+'px';
	[b]contenu.style.MachinQuiEmpecheLaCreationDeL_Ecart = 'Valeur';[/b]
}
Re,

Compris, Le problème du JS, c'est qu'il va falloir utiliser une détection d'IE6 et je ne crois pas trop en la fiabilité de la chose.

En fait il semblerait que tu sois victime du 3px jog bug et encore que si le contenu de #contenu est plus court que le menu. Smiley biggol

Comme je suis une bille en JS, via un commentaire conditionnel pour IE6, éliminer ce bug en passant contenu en relative et left: -3px et profiter pour ajouter un border-bottom: 1px solid #fff pour la différence de traitement de hauteur.


#contenu {
	border: 1px solid #FFFFFF;
	border-top: none;
	border-bottom: none;
	background: #EAECFE;
	padding: 10px;
	color: #555555;
	font-size: 13px;
	position: relative;
	left: -3px;/* en commentaire conditionnel pour ie6 //
	border-bottom: 1px solid #fff;/* en commentaire conditionnel pour ie6 //
}


Ps: je n'ai testé que sur l'accueil, faudrait voir pour les autres pages ?? Smiley cligne
Salut,

Utiliser un tableau de mise en forme à deux cellules pour ce problème précis, ce n'est pas "pourrir le code" de tes clients. Au contraire, ça me semble bien plus sain qu'utiliser un bricolage en javascript Smiley decu
Modérateur
Bonjour,
<edit> Smiley smile il ya du monde sur la ligne ! que de choix possible s ... (je n'ecarte pas ton js dans ma proposition)</>
effectivement ce probleme de largeur "variable est genant" et pourtant comme la hauteur si elle sont specifier en css (MAJ par js , ok je pense , sinon au moment de determiner la largeur de #container ).

elles vont te permettre de doté aussi l'element div#contenu de layout dans IE qui n'a aucunes dimensions de preciser dans ta feuille de style.

Sitot doté du layout , il faut se defaire de la marge gauche , et appliqué un comportement similaire dans les autres navigateurs avec overflow:hidden par exemple.

Pour l'exemple en ligne , par exemple :
#contenu {
	border: 1px solid #FFFFFF;
	border-top: none;
	border-bottom: none;
	background: #EAECFE;
	padding: 10px;
	width:800px;/* layout pour IE , se degage du flottant completement */
	color: #555555;
	font-size: 13px;
	overflow:hidden;/* FF et CIE , se dgage aussi des flottants plus de marge necessaires */
}

reste le 3 pixel jog de IE sur les flottants qui se regle avec par exemple une marge negatives de -3px; en commentaire conditionnels .


oki , ça commence a faire compliqué , un js , des cc ....

<!--[if IE]>
<style type="text/css">
#menu
{
	margin-right:-3px; /* 3 px jog */
}
</style>
<![endif]-->


sinon simplement , en dotant #contenu d'une couleur de fond de la couleur des bordures , le decallage ne serait plus visible , seule l'aspect des bordures serait differents ... plus larges dans IE . Si les bordures persistent dans tous les site usant de ta feuille de style.

GC
Modifié par gcyrillus (29 Aug 2007 - 15:37)
Salut,

Je trouve assez comique que ce post traine depuis un mois...
Alors son propriétaire propose une rémunération...
Et pléthores de solutions se présentent ... Gratuites Smiley lol

Vous ne deviendrez jamais riche ... (moi encore moins!)

Décidément j'aime bien l'esprit qui règne sur ce forum Smiley biggol Smiley biggol