Bonjour,
Je me remets au HTML-CSS après un premier contact très décevant-frustrant, avec cette fois la ferme intention d'arriver à mes fins Smiley cligne

Je fais des petits test, et là j'essaie de faire un bloc avec des coins arrondis et une ombre.
Construction du truc: un div conteneur, qui renferme un div pour le haut, un div pour le milieu et un div pour le bas, le div du mileu contenant à son tour un h1 et un p. Rien de transcendant. Et ça marche presque...

Si ce n'est que je ne comprends pas du tout pourquoi mes trois div ne se collent pas directement à la suite l'une de l'autre...

http://www.opfa.org/test

J'ai l'impression que h1 et p ont une marge par défaut non nulle, alors que j'ai stylé html et body avec margin: 0;...

Si je mets h1,p {margin: 0;}, tout rentre dans l'ordre
De plus, si je mets un contour à #fond, ça marche aussi... Smiley biggol

J'aimerais bien comprendre... Merci de vos lumières

<div id="contenu">
        <div id="top"></div>
        <div id="fond">
        <h1>titre</h1>
        <p></p>
        </div>
        <div id="bottom"></div>
    </div>


html, body {
padding:0;
margin: 0;
font-family: sans-serif;
}

#contenu {
position: relative;
width: 200px;
}

#top {
height:10px;
background-image: url(top.gif); 
border: 1px solid;}

#fond {
background-image: url(fond.gif);
background-repeat: repeat-y;
}

h1 {
font-size: 10px;
border: 1px solid; }

p {
font-size: 10px;
border: 1px solid;}

#bottom {
height:10px;
background-image: url(bottom.gif); 
border: 1px solid;}
]

Modifié par firfelin (29 Jan 2007 - 17:25)
Bonjour,
a écrit :
J'ai l'impression que h1 et p ont une marge par défaut non nulle, alors que j'ai stylé html et body avec margin: 0;...
Ce sont les réglages par défaut des navigateurs. Ils appliquent quelques règles de CSS sur certaines balises : P, Hn, UL...

Si on ne les remet pas à 0, on a quelque fois des surprises (ou des problèmes). C'est pour ça que nombre de feuilles de style commencent ainsi :
* {
     margin: 0;
     padding: 0;
     }
qui suppriment toutes les marges et paddings par défaut. (Certains navigateurs appliquent des marges, d'autres jouent sur le padding.)
Aaaargh au temps pour moi... j'étais persuadé qu'en mettant html, body {margin: 0;} ça suffisait...

Ce que je ne comprends pas trop, c'est pourquoi est-ce que ça ne marche pas en mettant margin: 0 au #contenu? les éléments contenus dans cette div (#top, #fond# h1 p ...) n'héritent pas des spécifications données au parent?
Et juste pour bien comprendre : comment se fait-il alors que le fait de mettre une bordure à #fond fonctionne...? Smiley biggol

#fond {
background-image: url(fond.gif);
background-repeat: repeat-y;
border: 1px solid;
}

Modifié par firfelin (24 May 2006 - 13:54)
a écrit :
Ce que je ne comprends pas trop, c'est pourquoi est-ce que ça ne marche pas en mettant margin: 0 au #contenu?

L'héritage peut être parasité par les réglages CSS par défaut des navigateurs.

En gris, les valeurs utilisées par le navigateur si on ne les redéfinit pas.
En vert, ton code CSS avec tes valeurs.


Feuille de style imaginaire d'un pseudo-navigateur :
[#gray]body {margin:10px 0 0 10px;}
h1, h2, h3, h4, h5, h6, p, ul, ol {margin-left: 40px;}[/#]


Ta feuille de style, si tu ne redéfinis pas les valeurs par défaut :
[#gray]body {margin:10px 0 0 10px;}[/#]

div#contenu {margin: 0; (...)}

[#gray]h1, h2, h3, h4, h5, h6, p, ul, ol {margin-left: 40px;}[/#]
Ici, tu spécifies une marge nulle sur div#contenu, mais le navigateur garde la sienne sur P.



Ta feuille de style, si tu annules toutes les marges et paddings :
* {margin: 0;padding: 0;}

[#gray]body {margin: 0}[/#]

div#contenu {margin: 0; (...)}

[#gray]h1, h2, h3, h4, h5, h6, p, ul, ol {margin: 0;}[/#]
Exit les réglages par défaut sur la balise P.
Tu as clairement dit au navigateur : "Tu me vires tes marges et paddings par défaut, je veux tout à 0 !"
Modifié par Smiley neko (24 May 2006 - 15:40)