28173 sujets

CSS et mise en forme, CSS3

salut, j'utilise des pseudo-codes php et css pour une mise en page qui est la suivante: en haut bannière, à gauche le menu, au milieu le contenu, en bas une barre et un logo. Chaque bloc est défini par des DIV. Voir le code ci-après.
Le problème est le suivant: l'affichage de mon bloc du bas c.à.d mon logo et ma barre colorée se superpose à mon contenu du milieu SAUF sous IE. Je voudrais que ma barre et mon logo suivent la hauteur de mon contenu. PAr ex. si le texte est court la barre et le logo remontent, si le texte est plus long, tout redescend. Donc le bloc du bas se positionne automatiquemernt selon la longueur du texte de mon bloc du milieu définit par frames.css tandis que le bloc du bas est défini par bas.css



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title></title>

<link href="frames.css" rel="stylesheet
" type="text/css" />
</head>
<body>
<div id="haut"><img src="image/banner2.gif" /></div>
<div id="menu">

<table width="100" border="0">
  <tr>
    <td><li><strong><a href="index.php?page=home">Home</a><br />
    </strong></li></td>
  </tr>
  <tr>
    <td><li> <strong><a href="index.php?page=profil">Profil</a><br />
    </strong></li></td>
  </tr>
    <tr>
    <td><li><strong><a href="index.php?page=presentation">Présentation</a><br />
    </strong></li></td>
  </tr>
  <tr>
    <td><li><strong><a href="index.php?page=categorie">Catégories</a> <br />
    </strong></li></td>
  </tr>
  <tr>
    <td><li><strong><a href="index.php?page=compte">Compte</a> <br />
    </strong></li></td>
  </tr>
   <tr>
    <td ><li><strong><a href="index.php?page=aide">Aide</a> <br />
    </strong></li></td>
  </tr>
  <tr>
    <td><li><strong><a href="index.php?page=contact">Contact</a><br />
    </strong></li></td>
  </tr>
  <tr>
    <td><li><strong><a href="index.php?page=form">Formulaire</a><br />
    </strong></li></td>
  </tr>
    <tr>
    <td><li><strong><a href="index.php?page=condition">Conditions</a> <br />
    </strong></li></td>
  </tr>
  </table>

</div>
<div id="frame">
<?php 
if (!isset($_GET['page'])) $page= 'home'; else $page= $_GET['page']; 
 switch($page)
{
case 'home': include ('home.htm');break;
case 'profil': include ('profil.htm');break;
case 'presentation': include ('presentation.htm');break;
case 'categorie': include ('categorie.htm');break;
case 'compte': include ('compte.htm');break;
case 'aide': include ('aide.htm');break;
case 'contact':include ('contact.htm');break;
case 'form':include ('formulaire.htm');break;
case 'condition':include ('condition.htm');break;
} 
?>
</div>
<div id="bas">
<table width="1024" cellpadding="0">
  <tr>
    <td width="378">&nbsp;</td>
    <td width="182"><img src="bilder/logo3.gif" width="65" height="62" /></td>
    <td width="281">&nbsp;</td>
  </tr>
</table>
<table height="60" width="1024" align="left">
      <tr>
        <td bordercolor="#807555" bgcolor="#817656"></td>
    </tr>
</table>
    <p align="center">&nbsp;</p>
</div>
</body>
</html>


Merci de votre aide.
a+
Bonsoir midiweb,

Tu ne documentes pas assez ton problème pour que l'on puisse t'aider. On a ici un code PHP (il faut qu'on l'interprète en local pour obtenir le HTML qui sera vraiment utile pour te conseiller ?... je doute que ça marche), mais pas de CSS, et encore moins les images de la mise en page. Ça risque donc d'être dur.

Je te conseillerais donc de mettre en ligne cette page, ou une version simplifiée et/ou anonymisée (surtout pour un projet professionnel), afin que l'on puisse constater directement et de visu les problèmes de positionnement et plus généralement de rendu que tu rencontres.
Sinon, même sans voir la feuille de style : quand on a des blocs qui se superposent, c'est soit dû à une mauvaise gestion des flottants (ce qui arrive parfois), soit à une mauvaise gestion du positionnement absolu (ce qui arrive souvent).
Salut.

J'ajouterais qu'avant d'aller à la pêche aux bugs & erreurs, il est indispensable de valider son code (xhtml & css). En effet, la validité du code est une garantie d'obtenir un rendu identique sur tous les navigateurs respectueux des standards (ce qui est déjà un bon début), ainsi qu'un gage de pérennité de la page.

En l'occurrence, il me semble que le validateur aurait des choses à dire Smiley cligne
Ben déjà c'est une mise-en-page avec des tableaux et en plus tu met des <li> orphelins en plein dans les cellules du tableau. Ne le prends pas mal, mais le code est un peu loufoque... Smiley cligne
Modifié par Patidou (28 Nov 2006 - 12:04)
Merci de vos conseils mais je suis débutant en css. Voici ma feuille css pour vous aider ci-dessous.
Les <li> et les <li> sont le seul moyen que j'ai trouvé de mettre des puces en plus de la fonction css list-style-type: square;
Les tableaux sont pour mes menus et les pseudo-frames. Je voudrais les remplacer par seulement des css mais j'ai pas encore réussi.J'y travaille. Comme déjà dit, tout en fait fonctionne sauf le bloc du bas qui se superpose sur les textes du bloc central où j'ai mon texte. Et aussi j'oubliais, mes puces ne s'affiche sous IE mais je crois que c'est lié à mon border-right: dotted thin; quand je le déselectionne, les puces carrées s'affichent. J'attends votre aide. Merci

/* CSS Document */

<style type="text/css">

div#arial {

	font-family: Arial, Helvetica, sans-serif;
	font-size: 12px;
}

body {
	margin: 0px;
	margin-left:0px;
	padding: 0px;
	position: absolute;
	width: 100%;
	height: 100%;
	font-family: verdana, arial, sans-serif;
	font-size: 12px;

}

div#haut {
	width: auto;
	height: 50px;
	background-color: White;
}

div#conteneur {
	
	height: 338px;
	width: 100%;
	float:left;
}

div#menu {
	position: absolute;
	left: 24px;
	width: 107px;
	height: 1200px;
	margin-top: 130px;
	top: 16px;
	font-family: Arial, Helvetica, sans-serif;
	font-size: 12px;
	float: right;
	list-style-type: square;
	list-style-position: outside;
	border-right: dotted thin;
	
	
}

div#frame {
	position:relative;
	margin-top: 100px;
	margin-left: 140px; 
	padding-top: 0px;
	width: 860px;
	height: auto;
	font-size: 12px;
	/*background-position: top;
	vertical-align: top;*/
	font-family: Arial, Helvetica, sans-serif;
		
}

div#bas {
	position: relative;
	margin-top: auto;
	width: 1024px;
	height: 0px;
	font-size: 12px;
	text-align: center ;
}

A {
	color: #00008B;
	
	
}

A:HOVER {
	color: #996633;

}
</style>
C'est une feuille de style externe (fichier .css) ? Auquel cas, il faut supprimer les éléments HTML qui y trainent, dont :
<style type="text/css">
</style>

On garde bien sûr les styles en syntaxe CSS. Smiley smile


Par contre, avec juste la feuille de style ce n'est pas évident de savoir d'où vient le problème. Ton pied de page passera en dessous du menu de gauche (celui-ci étant positionné en absolu), mais ne devrait pas se superposer avec le div#frame.

Encore une fois, le nec plus ultra pour constater un problème de positionnement c'est la page de test en ligne. À défaut, une capture d'écran pour accompagner les codes HTML et CSS déjà fournis.
voici un copie-coller de quelques pages du site. C'est de l'allemand mais cela ne change rien au contenu et à la mise en page. Vous voyez que la bannière du bas se superpose au texte. Quand le texte est plus court, la bannière s'affiche en bas du texte. Je voudrais que la bannière suive chaque fois le texte quelque soit sa longueur et ceci avec la même marge.

upload/3170-alsa1.jpg upload/3170-alsa2.jpg

merci de me conseiller
a+
C'est bizarre, j'ai l'impression que tes captures d'écran ne correspondent pas à la feuille de style fournie. À quoi correspond le pied de page dans ta feuille de style ? div#bas a une hauteur nulle, donc ça ne peut pas être ça...

De plus, il y a pas mal de choses qui me font tiquer dans cette feuille de style :
div#arial {
	font-family: Arial, Helvetica, sans-serif;
	font-size: 12px;
}

Faire une div avec un identifiant pour attribuer un style de caractères, c'est un peu comme utiliser une balise <font>... Smiley sweatdrop Alors qu'il suffirait d'attribuer le style de texte au conteneur voulu, par exemple (suivant le besoin) à body ou à un div#contenu ou un div#menu (enfin ce qu'on voudra, quoi)...

De plus, une taille de caractères fixée en pixels, c'est pas tip top pour l'accessibilité. Si je peux me permettre un conseil :
http://css.alsacreations.com/Tutoriels-et-articles-divers/gerer-la-taille-du-texte-avec-les-em

Encore un bout de code (commenté, cette fois) :
body {
	margin: 0px;
	margin-left:0px; /* Inutile */
	padding: 0px;
	position: absolute; /* ??????? */
	width: 100%; /* Inutile */
	height: 100%; /* Ne marchera pas si on n'a pas déjà html {height: 100%} */
	font-family: verdana, arial, sans-serif; /* Il y a des fontes plus intéressantes à utiliser comme alternatives à Verdana dans un font-family */
	font-size: 12px; /* Texte non redimensionnable */
}

Par ailleurs, j'ai cru voir un peu trop de position: absolute|relative... pas sûr que tous soient utiles.


Enfin, d'après les captures d'écran que tu fournis, je dirais qu'il peut y avoir plusieurs explications (difficile à dire sans avoir l'information complète, c'est à dire la page de test en ligne) :
- pied de page positionné en absolu ;
- bloc de contenu positionné en absolu ;
- bloc de contenu décalé vers le bas avec un positionnement relatif ;
- bloc de contenu flottant.

Dans le dernier cas, il faudra sans doute utiliser un clear: both sur le pied de page. Pour plus d'informations si nécessaire, faire une recherche sur le forum sur le dépassement des éléments flottants.
Administrateur
Hello,

Puisqu'il s'agit d'un problème de mise en forme (donc de CSS), et non de XHTML, je déplace le sujet dans le bon salon Smiley cligne