28172 sujets

CSS et mise en forme, CSS3

Bonjour à tous,

Historique de départ : test comparatif de menu avec

<h2>Menu</h2> /* ...ou h3, suivant la hiérachie qui précède */
<ul>
  <li>item1</li>
  ...
</ul>

et

<dl>
  <dt>Menu</dt> /* équivallent au h2 ci-dessus */
  <dd>item1</dd>
  ...
</dl>

Tout se passe bien, c'est beau, propre et sémantique dans les deux cas.

Tiens ! je vais travailler tout ça avec un backround-image "courbe" et décaler mes items de menu le long de la courbe ... (ça va être beauuu !)
=> bakground-image sur <ul> et sur <dl>.

Oups... dans le cas de <dl> il me faut un margin-top pour obtenir le même rendu puisque le <dt> est dans le <dl> (le <h2> est avant le <ul>) ! Zouu, voilà qui est fait !
Allez, hop, un autre petit margin pour le titre (<h2> et <dt>) et ... c'est là qu'est l'os !
Sous FF3 avec <dl>, si je mets un margin (top et/ou bottom) sur le <dt>, le background-image de <dl> se décale d'autant en hauteur (pas avec IE6) !
En fait il semble même avoir des "margins" top et bottom identiques à celles de <dt> ! Smiley biggol

Recherches ... rien trouvé, tests divers et deux solutions trouvées :
- ajout pour <dl> d'un border de 1px de même couleur que le background (=> invisible)
- ajout pour <dl> de d'un display: table
=> résolu dans les deux cas. (il y a peut-être d'autres solutions mais je me suis contenté de celles-là)
(J'ai aussi cherché du côté de "haslayout" : ni <dl>, ni <dt> ne l'ont mais height confère le layout : suppression du height de <dl> => rien de change)

Mes questions donc :
Qu'est-ce qui provoque le décalage du background-image ?
Pourquoi ces deux solutions fonctionnent-elle ? (j'aime comprendre ;o)

Ci-dessous les codes html et css pour le cas <dl> :
<!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>
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
    <title>Test</title>
    <meta http-equiv="Content-Language" content="fr-be" />
    <meta name="robots" content="noindex, nofollow" />
    <link rel="stylesheet" type="text/css" media="screen, projection" href="css/screen.css" />
  </head> 
  <body>
    <div id="conteneur">
      <h1>Test</h1>
      <dl id="menu">
        <dt>Menu</dt>
        <dd id="menudd1"><a href="#">Lorem</a></dd>
        <dd id="menudd2"><a href="#">Ipsum</a></dd>
        <dd id="menudd3"><a href="#">Dolor</a></dd>
        <dd id="menudd4"><a href="#">Sit</a></dd>
        <dd id="menudd5"><a href="#">Amet</a></dd>
        <dd id="menudd6"><a href="#">Consectetur</a></dd>
        <dd id="menudd7"><a href="#">Adipisicing</a></dd>
        <dd id="menudd8"><a href="#">Elit</a></dd>
        <dd id="menudd9"><a href="#">Nimbae</a></dd>
        <dd id="menudd10"><a href="#">Est</a></dd>
      </dl>
    </div>
  </body>
</html>

* {
  margin: 0;
  padding: 0;
}
body {
  background: url(../images/layout_grid.gif) no-repeat;
  font-family: Verdana, Arial, Helvetica, sans-serif;
  font-size: 62.5%;
}
#conteneur {
  border: 1px solid black;
  margin: 50px;
}
#menu {
  background: transparent url(../images/pneu.jpg) 0 5.0em no-repeat;
  /*border: 1px solid red;*/
  /*display: table;*/
  height: 290px;
}
#menu dt {
  font-size: 1.65em;
  margin: 1.0em;
}
#menu dd {
  font-size: 1.1em;
}

#menudd1 {
  margin-left: 2.2em;
}
#menudd2 {
  margin-left: 3.3em;
}
#menudd3 {
  margin-left: 4.0em;
}
#menudd4 {
  margin-left: 4.4em;
}
#menudd5 {
  margin-left: 4.8em;
}
#menudd6 {
  margin-left: 5.0em;
}
#menudd7 {
  margin-left: 5.2em;
}
#menudd8 {
  margin-left: 5.3em;
}
#menudd9 {
  margin-left: 5.2em;
}
#menudd10 {
  margin-left: 5.1em;
}


Merci d'avance pour vos cogitations et réponses !
Modifié par Philix (07 Dec 2008 - 08:21)
Salut ghost,

Merci de t'intéresser au problème Smiley biggrin
Malheureusement, du boulot je n'ai pas d'accès pour mettre en ligne, ni même pour un upload d'images comparatives (que j'avais préparer) Smiley bawling
Je vais copier mon test sur clef USB et je tacherai de mettre ça en ligne ce soir.
Voilà Ghost,
C'est en ligne ici avec margin sur dt
... et ici sans margin

PS: je parle uniquement des margin top et/ou bottom. Voir le décalage du background sur <dl> quand le margin sur <dt> change.
Bon courage Smiley cligne et merci d'avance !
Modifié par Philix (06 Dec 2008 - 00:35)
Tu rencontre le problème de fusion des marges,
il y a trois solutions à ça :

- Utiliser un padding au lieu d'un margin.
- Overflow:hidden (ou auto) sur le dl.
- Gérer tes bordures non pas sur le div, mais sur le dl. (oui, une border-top résoud l'phénomène).

A bientôt Smiley cligne
Bonjour et merci Nigel Smiley smile ,

D'après ceci et ceci, il semble s'agir d'un comportement "normal" Smiley eek
Toutefois je ne le rencontre ni avec IE6 ni avec IE7 dans le cas du couple parent/premier enfant DL/DT

Bug ou pas bug, telle semble donc être la question ...
Je mets [résolu]

PS, j'ai aussi vu Les tests de Florent V. Smiley cligne