28172 sujets

CSS et mise en forme, CSS3

Hello,

J'ai un petit souci dans la mise en page du site sur lequel je suis en train de travailler et malgré pas mal d'essais et de recherches, je n'arrive pas à le résoudre.

Le principe serait d'avoir de chaque côté d'un bloc central de 997px un bloc de 10px contenant une image de fond afin de créer une bordure ; l'ensemble étant centré sur la page et occupant la totalité de l'espace en hauteur.
L'entête du bloc central est constitué d'un bloc à gauche contenant une image de fond et de 2 blocs superposés à droite contenant une bannière et des éléments de navigation. La taille de ces éléments est connue et fixe.

Voici pour l'instant mes styles CSS :

html {
	height: 100%;
}
body {
	background-color: #000000;
	margin: 0 0 0 0;
	padding: 0 0 0 0;
	border: none 0px;
	background-image: url(images/background.jpg);
	background-repeat: repeat-x;
	text-align: center;
	height:100%;
}
#divPage
{
	width: 1000px;
	text-align: left;
	height: 100%;
	background-color: #FFFFFF;
	padding: 0 0 0 0;
	position: relative;
	margin-left: auto; 
	margin-right: auto;
}
#divPageLeft
{
	width: 10px;
	height: 100%;
	background-image: url(images/left.jpg);
	background-repeat: repeat-y;
	position: absolute;
	left: 0px;
}
#divPageCenter
{
	width: auto;
	height: 100%;
	padding: 0 0 0 0;
	margin: 0 10px;
}
#divPageRight
{
	width: 10px;
	height: 100%;
	background-image: url(images/right.jpg);
	background-repeat: repeat-y;
	position: absolute;
	right: 0px;
}
#header-left
{
	float: left;
	margin: 0;
	padding: 0;
	width: 196px;
	height: 148px;
	background-color: Yellow;
}
#header-right
{
	display: block;
	margin: 0;
	padding: 0 0 0 196px;
	border: none 0px;
	background-color: Black;
}
#header-right-top
{
	border: none 0px;
	height: 39px;
	width: 781px;
	margin: 0 0 0 0;
	padding: 0 0 0 0;
	background-color: Blue;
}
#header-right-bottom
{
	border: none 0px;
	margin: 0 0 0 0;
	padding: 0 0 0 0;
	width: 781px;
	height: 109px;
	background-color: Red;
}


Le code de la page :

<div id="divPage">
    <div id="divPageLeft">
    </div>
    <div id="divPageRight">
    </div>
    <div id="divPageCenter">
        <div id="header-left">
        </div>
        <div id="header-right">
             <div id="header-right-top">
             </div>
             <div id="header-right-bottom">
             </div> 
        </div>
    </div>
</div>  


Et voilà ce que ça fait dans FF, sachant que dans IE, c'est la même chose que la bande noire qui est en trop apparaît entre le bloc de gauche de l'entête et les blocs de droite au lieu d'apparaître en bout de ligne :

upload/16356-headerFF.gif

En fait, je pense que cet espace en trop est du à la taille de mon div Page qui fait 1000px alors que la largeur cumulée des blocs est de 997px. Le truc c'est que si je choisis 997px comme taille, le résultat est alors nickel sous FF mais sous IE, j'obtiens ça :

upload/16356-headerIE.gif

En clair, les 2 blocs de droite de l'entête passent en dessous au lieu de rester à côté du bloc de gauche.

J'ai essayé de définir toutes les marges, padding et autres bordures à 0, je n'arrive pas à obtenir un résultat correct. De plus, j'ai un autre souci : sous FF, mes bordures ne remplissent pas 100% de la hauteur de la page dans le navigateur alors que sous IE, c'est bon...

Bref, j'ai besoin d'un petit coup de main là parce que je vois plus trop quoi faire !

Merci...
Modifié par Kornichon (17 Apr 2008 - 17:19)
Bon, mon problème n'a pas l'air de trop vous inspirer, c'est peut-être pas clair ?!

En fait, pour résumer, je n'arrive pas, sous IE, à afficher côte à côte plusieurs divs de taille fixe englobés dans un autre div dont la taille, fixe également, correspond exactement à la somme des tailles des divs enfants, de manière à n'avoir aucun espace vierge restant.
Ca marche bien sous FF, IE me décale le bloc de gauche sur la ligne inférieure, sauf si la taille du div englobant est supérieure d'au moins 3px par rapport à la somme des largeurs des divs enfants.

FF :
-------------------------------- div parent 997px --------------------------------
div bordure gauche 10px | div gauche 196px | div droit 781 px | div bordure droit 10px

IE :
-------------------------------- div parent 997px --------------------------------
div bordure gauche 10px | div gauche 196px |_______________| div bordure droit 10px
div bordure gauche 10px |________________| div droit 781 px | div bordure droit 10px

J'espère que c'est plus clair et surtout que quelqu'un va pouvoir éclairer ma lanterne !
Modifié par Kornichon (16 Apr 2008 - 14:00)
Salut,

Les idées de réponses viendront surement si tu précises le contenu de tes différentes colonnes surtout des latérales (images différentes? repeat?) ce qui conditionnera la structure initiale qui m'a l'air sur ton test bien compliquée Smiley cligne et encore mieux si il y a un bout de page en ligne !
[Edit]Je précise, après tests, que le problème ne concerne que IE6 et que tout fonctionne sous IE7[/Edit]

OK, donc je tente à nouveau une explication illustrée de mon problème, j'espère que ça sera plus clair.

Déjà, les CSS utilisés :

html {
	height: 100%;
}
body {
	background-color: #000000;
	margin: 0 0 0 0;
	padding: 0 0 0 0;
	border: none 0px;
	background-image: url(images/background.jpg);
	background-repeat: repeat-x;
	text-align: center;
	height:100%;
}
div#page
{
	width: 300px;
	text-align: left;
	height: 100%;
	background-color: #FFFFFF;
	padding: 0 0 0 0;
	position: relative;
	margin-left: auto; 
	margin-right: auto;
}
div#page-left
{
	width: 10px;
	height: 100%;
	background-image: url(images/left.jpg);
	background-repeat: repeat-y;
	position: absolute;
	left: 0px;
}
div#page-center
{
	width: auto;
	height: 100%;
	padding: 0 0 0 0;
	margin: 0 10px;
}
div#page-right
{
	width: 10px;
	height: 100%;
	background-image: url(images/right.jpg);
	background-repeat: repeat-y;
	position: absolute;
	right: 0px;
}
div#header-left
{
	float: left;
	margin: 0;
	padding: 0;
	width: 80px;
	height: 148px;
	background-color: Yellow;
}
div#header-right
{
	display: block;
	margin: 0;
	padding: 0 0 0 80px;
	border: none 0px;
	background-color: Black;
}
div#header-right-top
{
	border: none 0px;
	height: 39px;
	width: 200px;
	margin: 0 0 0 0;
	padding: 0 0 0 0;
	background-color: Blue;
}
div#header-right-bottom
{
	border: none 0px;
	margin: 0 0 0 0;
	padding: 0 0 0 0;
	width: 200px;
	height: 109px;
	background-color: Red;
}
div#content
{
	clear:both;
	display: block;
	margin: 20px 0 20px 0;
	padding: 0 0 0 0;
	background-color: #FFFFFF;
}


En fait, ce que je veux, et ce que j'arrive à obtenir sous Firefox, c'est ça : (dimensions horizontales des divs réduites)

upload/16356-pageFF.gif

Page globale : div "page" de largeur fixe centré horizontalement
Bordures : div "page-left" et "page-right" de largeurs fixes qui contiennent une image répétée verticalement
Contenu central : div "page-center" de largeur auto avec marges à gauche et à droite pour les bordures
Partie gauche de l'entête en jaune : div "header-left", largeur fixe, contient un logo
Partie droite de l'en-tête en noir : div "header-right", non visible, sert à contenir les éléments suivants
Partie haute/droite de l'en-tête en bleu : div "header-right-top", largeur fixe, contient un arrière-plan et des éléments de navigation
Partie basse/droite de l'en-tête en rouge : div "header-right-bottom", largeur fixe, contient un arrière-plan et le titre du site
Contenu : div "content"

Don là, tout va bien, sauf que dans l'idéal mes bordures gauche et droite devraient occuper toute la hauteur de la page au lieu de s'adapter à la hauteur du div de contenu mais bon, ça on verra plus tard.

Le gros souci, c'est qu'avec IE, j'obtiens ça :

upload/16356-pageIE.gif

En noir : l'arrière-plan mon div "header-right" qui est normalement complètement rempli par "header-right-top" et "header-right-bottom". Ces deux divs sont passés à la ligne au lieu de se placer à côté de "header-left".
Si j'agrandis légèrement la taille de de "div-page" pour avoir 3px de plus que nécessaire, ça fonctionne mais j'ai alors un "trou" qui apparaît entre mes divs !

J'espère avoir été plus clair et que quelqu'un pourra m'aider !
Modifié par Kornichon (17 Apr 2008 - 15:05)
Bon ben finalement je me réponds à moi-même : j'ai résolu mon problème en n'utilisant qu'un seul div pour le header dans lequel je place mon fond en bas à doite et mes éléments (logo, titre et bouton) en positionnement absolu.

C'est peut-être pas l'idéal mais ça marche sous IE6, 7 et Firefox 2 et 3.