28173 sujets

CSS et mise en forme, CSS3

salut je teste un exemple de bandeau haut en image fixe.
Cela fonctionne, par contre la position absolue de ce bandeau m'empêche un centrage horizontal de ma page. Quelqu'un a t'il la solution SVP.

mon code:
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<style type="text/css">

/* début du hack "fixed" permettant de fixer le menu fixe sous IE */
body { /* redéfini les propriétés de toute la page */
	overflow-y: hidden; /* fonction microsoft supprimant les ascenseurs sous IE */
	margin: 0; /* la marge du body est à 0 pixels */
	padding:0;
	font-family: Verdana, Arial, Helvetica, sans-serif;
	font-size: 11px;
	color: #000000;
	text-align: justify;
} /* marge intérieure à 0 pixels */

html > body {overflow-y: auto} /* annule le overflow-y pour firefox 1.5 et supérieur */

.content { /* boite prenant toute la page sauf le menu fixe*/
	height: 100%; /* la hauteur de la boite occupe 100% de l'écran */
	overflow: auto;
	padding-top: 145px;
} /* on rajoute un ascenseur droit à la boite */
/* fin du hack "fixed" permettant de fixer le menu fixe sous IE */

.bandeauhaut { /* menu fixe en bas de l'écran */
	background-image: url(images/header.jpg);
	background-repeat: no-repeat;
	background-position: left top;
	position: absolute; /* La gauche du menu est à 0 pixels du bas de l'écran */
	width: 807px; /* largeur du menu = 98% de l'écran */
	height: 135px; /* hauteur du menu = 20 pixels */
	left: 0px;
	top: 0px;
} /* Bordure haute du menu */


body>.bandeauhaut {position:fixed} /* annule le hack "fixed" pour les autres navigateurs que IE */

.boite {
	width:807px;
	height:100%;
	padding-right: 10px;
	padding-left: 10px;
} /* boite servant à faire défiler l'écran, en débordant de la page */

</style>
</head>

<body>

<div class="bandeauhaut"> <!-- menu fixe en bas de l'écran -->
</div>

<div class="content"> <!-- début du contenu de la page -->
  <div class="boite">
    <p>La fonction position:fixed permet de fixer une boite ou une image &agrave; l'&eacute;cran.
      Malgr&egrave;s le d&eacute;filement de la page, l'objet ainsi fix&eacute; ne
      bouge pas. Mais, encore un bug d'IE, position:fixed ne marche pas.</p>
    <p>Il existe un &quot;hack&quot; &eacute;mulant sous IE cette fonction bien
      pratique. Il est d&eacute;crit ci-contre.<br>
      Son principe est assez simple : on force une boite &agrave; prendre tout
      l'&eacute;cran, et on affiche le menu ou la zone qu'on veut fixer quelque
      part dans cette boite. Le d&eacute;but du &quot;hack&quot; (body { overflow-y:
      hidden ; margin: 0;} ) n'est pas indispensable, mais am&eacute;liore l'affichage
      de la page. La partie .content { height: 100% ; overflow: auto} est par
      contre obligatoire.</p>
    <p>Si on utilise overflow-y:hidden, il faut ensuite mettre un html&gt;body
      {overflow-y:auto} pour l'annuler dans les autres logiciels que IE 6 et
      inf&eacute;rieur (lequel ne comprend pas html&gt;body - voir ci-dessous).
      En effet, &agrave; partir de firfox 1.5, overflow-y est interpr&eacute;t&eacute;,
      et le mettre en hidden dans firefox provoque des probl&egrave;mes.</p>
    <p>Enfin le body&gt;.menu1 {position:fixed} ne fait pas partie du &quot;hack&quot;.
      Mais il est obligatoire si on veut que la page fonctionne sous Mozilla
      ou Op&eacute;ra. Il repasse en effet le menu de position:absolute en position:fixed.
      On &eacute;crit body&gt;.menu1 car Internet Explorer ne comprend pas cette
      graphie (nouveau bug !) ce qui fait qu'il n'en fait rien, et que pour lui,
      position reste bien en absolute.</p>
    <p>On peut fixer la zone, en haut, &agrave; gauche ou en bas. Il sufit de
      changer les positionnements indiqu&eacute;s dans .menu1. On utilise g&eacute;n&eacute;ralement
      ce genre de zone pour fixer un menu.</p>
    <p>Attention, avec une DTD stricte, ce &quot;hack&quot; ne marche plus sous
      IE. Il faut alors cacher la DTD &agrave; IE en la faisant pr&eacute;c&eacute;der
      d'un commentaire &lt;!-- blabla --&gt;, que IE ne comprend pas (encore
      un bug !).</p><p>La fonction position:fixed permet de fixer une boite ou une image &agrave; l'&eacute;cran.
      Malgr&egrave;s le d&eacute;filement de la page, l'objet ainsi fix&eacute; ne
      bouge pas. Mais, encore un bug d'IE, position:fixed ne marche pas.</p>
    <p>Il existe un &quot;hack&quot; &eacute;mulant sous IE cette fonction bien
      pratique. Il est d&eacute;crit ci-contre.<br>
      Son principe est assez simple : on force une boite &agrave; prendre tout
      l'&eacute;cran, et on affiche le menu ou la zone qu'on veut fixer quelque
      part dans cette boite. Le d&eacute;but du &quot;hack&quot; (body { overflow-y:
      hidden ; margin: 0;} ) n'est pas indispensable, mais am&eacute;liore l'affichage
      de la page. La partie .content { height: 100% ; overflow: auto} est par
      contre obligatoire.</p>
    <p>Si on utilise overflow-y:hidden, il faut ensuite mettre un html&gt;body
      {overflow-y:auto} pour l'annuler dans les autres logiciels que IE 6 et
      inf&eacute;rieur (lequel ne comprend pas html&gt;body - voir ci-dessous).
      En effet, &agrave; partir de firfox 1.5, overflow-y est interpr&eacute;t&eacute;,
      et le mettre en hidden dans firefox provoque des probl&egrave;mes.</p>
    <p>Enfin le body&gt;.menu1 {position:fixed} ne fait pas partie du &quot;hack&quot;.
      Mais il est obligatoire si on veut que la page fonctionne sous Mozilla
      ou Op&eacute;ra. Il repasse en effet le menu de position:absolute en position:fixed.
      On &eacute;crit body&gt;.menu1 car Internet Explorer ne comprend pas cette
      graphie (nouveau bug !) ce qui fait qu'il n'en fait rien, et que pour lui,
      position reste bien en absolute.</p>
    <p>On peut fixer la zone, en haut, &agrave; gauche ou en bas. Il sufit de
      changer les positionnements indiqu&eacute;s dans .menu1. On utilise g&eacute;n&eacute;ralement
      ce genre de zone pour fixer un menu.</p>
    <p>Attention, avec une DTD stricte, ce &quot;hack&quot; ne marche plus sous
      IE. Il faut alors cacher la DTD &agrave; IE en la faisant pr&eacute;c&eacute;der
      d'un commentaire &lt;!-- blabla --&gt;, que IE ne comprend pas (encore
      un bug !).</p>
  </div>
</div><!-- fin du contenu de la page -->

</body>
</html>


merci
Bonjour,

Rapidement:
- pas de Doctype à ta page? Smiley biggol
- pour les blocs constitutifs d'une page, il est généralement conseillé d'utiliser des identifiants uniques plutôt que des classes (div#content plutôt que div.content... bien sûr, il faut utiliser l'attribut id à la place de class, dans ce cas);
- le positionnement absolu d'un bloc n'empêche pas le centrage de la page.

Sur ce dernier point:
- utiliser un conteneur (div) global, lui donner la largeur voulue et le centrer avec la technique des marges automatiques;
- positionner ce conteneur en relatif, afin qu'il puisse servir de référent à ses enfants et descendants positionnés en absolu;
- positionner les enfants et descendants du conteneur global par rapport aux bords du conteneur global (si ces éléments sont positionnés en absolu, bien sûr).

Réviser le positionnement absolu:
http://openweb.eu.org/articles/initiation_absolue/
http://web.covertprestige.info/test/12-positionnement-absolu-selon-conteneur.html
Modifié par Florent V. (11 Aug 2007 - 13:05)
Merci de tes conseils, mais je n'y arrive toujours pas.
Alors en premier je sais que le doctype c'est important mais si j elemets je perds l'effet fixed sur le bandeau haut.
J'ai apporté quelques corrections en suivant tes infos :
a écrit :
utiliser un conteneur (div) global, lui donner la largeur voulue et le centrer avec la technique des marges automatiques et positionner les autres div en absolu.
Mon site est bien cenré mais je n'ai plus le défilement et le bandeau fixé en haut.

Voici le nouveau code et encore merci
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<style type="text/css">

/* début du hack "fixed" permettant de fixer le menu fixe sous IE */
body { /* redéfini les propriétés de toute la page */
	overflow-y: hidden; /* fonction microsoft supprimant les ascenseurs sous IE */
	margin: 0; /* la marge du body est à 0 pixels */
	padding:0;
	font-family: Verdana, Arial, Helvetica, sans-serif;
	font-size: 11px;
	color: #000000;
	text-align: center;
} /* marge intérieure à 0 pixels */

html > body {overflow-y: auto} /* annule le overflow-y pour firefox 1.5 et supérieur */

#global {
	BACKGROUND: #ffffff;
	MARGIN: 0px auto;
	WIDTH: 807px;
	TEXT-ALIGN: left;
	position: relative;
}

#content { /* boite prenant toute la page sauf le menu fixe*/
	height: 100%; /* la hauteur de la boite occupe 100% de l'écran */
	overflow: auto;
	padding-top: 145px;
	position: absolute;
} /* on rajoute un ascenseur droit à la boite */
/* fin du hack "fixed" permettant de fixer le menu fixe sous IE */

#bandeauhaut { /* menu fixe en bas de l'écran */
	background-image: url(images/header.jpg);
	background-repeat: no-repeat;
	background-position: left top;
	position: absolute; /* La gauche du menu est à 0 pixels du bas de l'écran */
	width: 807px; /* largeur du menu = 98% de l'écran */
	height: 135px; /* hauteur du menu = 20 pixels */
	left: 0px;
	top: 0px;
} /* Bordure haute du menu */


body>.bandeauhaut {position:fixed} /* annule le hack "fixed" pour les autres navigateurs que IE */

#boite {
	width:817px;
	height:100%;
	padding-right: 10px;
	padding-left: 10px;
} /* boite servant à faire défiler l'écran, en débordant de la page */

</style>
</head>

<body>
<DIV id=global>
<div id="bandeauhaut"> <!-- menu fixe en bas de l'écran -->
</div>

<div id="content"> <!-- début du contenu de la page -->
  <div id="boite">
    <p>La fonction position:fixed permet de fixer une boite ou une image &agrave; l'&eacute;cran.
      Malgr&egrave;s le d&eacute;filement de la page, l'objet ainsi fix&eacute; ne
      bouge pas. Mais, encore un bug d'IE, position:fixed ne marche pas.</p>
    <p>Il existe un &quot;hack&quot; &eacute;mulant sous IE cette fonction bien
      pratique. Il est d&eacute;crit ci-contre.<br>
      Son principe est assez simple : on force une boite &agrave; prendre tout
      l'&eacute;cran, et on affiche le menu ou la zone qu'on veut fixer quelque
      part dans cette boite. Le d&eacute;but du &quot;hack&quot; (body { overflow-y:
      hidden ; margin: 0;} ) n'est pas indispensable, mais am&eacute;liore l'affichage
      de la page. La partie .content { height: 100% ; overflow: auto} est par
      contre obligatoire.</p>
    <p>Si on utilise overflow-y:hidden, il faut ensuite mettre un html&gt;body
      {overflow-y:auto} pour l'annuler dans les autres logiciels que IE 6 et
      inf&eacute;rieur (lequel ne comprend pas html&gt;body - voir ci-dessous).
      En effet, &agrave; partir de firfox 1.5, overflow-y est interpr&eacute;t&eacute;,
      et le mettre en hidden dans firefox provoque des probl&egrave;mes.</p>
    <p>Enfin le body&gt;.menu1 {position:fixed} ne fait pas partie du &quot;hack&quot;.
      Mais il est obligatoire si on veut que la page fonctionne sous Mozilla
      ou Op&eacute;ra. Il repasse en effet le menu de position:absolute en position:fixed.
      On &eacute;crit body&gt;.menu1 car Internet Explorer ne comprend pas cette
      graphie (nouveau bug !) ce qui fait qu'il n'en fait rien, et que pour lui,
      position reste bien en absolute.</p>
    <p>On peut fixer la zone, en haut, &agrave; gauche ou en bas. Il sufit de
      changer les positionnements indiqu&eacute;s dans .menu1. On utilise g&eacute;n&eacute;ralement
      ce genre de zone pour fixer un menu.</p>
    <p>Attention, avec une DTD stricte, ce &quot;hack&quot; ne marche plus sous
      IE. Il faut alors cacher la DTD &agrave; IE en la faisant pr&eacute;c&eacute;der
      d'un commentaire &lt;!-- blabla --&gt;, que IE ne comprend pas (encore
      un bug !).</p><p>La fonction position:fixed permet de fixer une boite ou une image &agrave; l'&eacute;cran.
      Malgr&egrave;s le d&eacute;filement de la page, l'objet ainsi fix&eacute; ne
      bouge pas. Mais, encore un bug d'IE, position:fixed ne marche pas.</p>
    <p>Il existe un &quot;hack&quot; &eacute;mulant sous IE cette fonction bien
      pratique. Il est d&eacute;crit ci-contre.<br>
      Son principe est assez simple : on force une boite &agrave; prendre tout
      l'&eacute;cran, et on affiche le menu ou la zone qu'on veut fixer quelque
      part dans cette boite. Le d&eacute;but du &quot;hack&quot; (body { overflow-y:
      hidden ; margin: 0;} ) n'est pas indispensable, mais am&eacute;liore l'affichage
      de la page. La partie .content { height: 100% ; overflow: auto} est par
      contre obligatoire.</p>
    <p>Si on utilise overflow-y:hidden, il faut ensuite mettre un html&gt;body
      {overflow-y:auto} pour l'annuler dans les autres logiciels que IE 6 et
      inf&eacute;rieur (lequel ne comprend pas html&gt;body - voir ci-dessous).
      En effet, &agrave; partir de firfox 1.5, overflow-y est interpr&eacute;t&eacute;,
      et le mettre en hidden dans firefox provoque des probl&egrave;mes.</p>
    <p>Enfin le body&gt;.menu1 {position:fixed} ne fait pas partie du &quot;hack&quot;.
      Mais il est obligatoire si on veut que la page fonctionne sous Mozilla
      ou Op&eacute;ra. Il repasse en effet le menu de position:absolute en position:fixed.
      On &eacute;crit body&gt;.menu1 car Internet Explorer ne comprend pas cette
      graphie (nouveau bug !) ce qui fait qu'il n'en fait rien, et que pour lui,
      position reste bien en absolute.</p>
    <p>On peut fixer la zone, en haut, &agrave; gauche ou en bas. Il sufit de
      changer les positionnements indiqu&eacute;s dans .menu1. On utilise g&eacute;n&eacute;ralement
      ce genre de zone pour fixer un menu.</p>
    <p>Attention, avec une DTD stricte, ce &quot;hack&quot; ne marche plus sous
      IE. Il faut alors cacher la DTD &agrave; IE en la faisant pr&eacute;c&eacute;der
      d'un commentaire &lt;!-- blabla --&gt;, que IE ne comprend pas (encore
      un bug !).</p>
  </div>
</div><!-- fin du contenu de la page --></div>

</body>
</html>