28172 sujets

CSS et mise en forme, CSS3

Bonjour,

Débutant en CSS, évidemment, je bute sur des problèmes sans trouver les solutions, pouvez vous m'indiquer comment arriver à supprimer ces petits soucis, en m'expliquant si possible le pourquoi du comment ?
j'espère que ça pourra servir à d'autres, je bute surement sur une fusion des marges que je n'arrive pas à déceler, et un float, que je n'arrive pas à décaler ou je veux. du classique j'ai l'impression.

bon l'esthétique est atroce, mais c'est juste pour bien voir mes boîtes, en distinguant bien les couleurs pour chacunes d'elles.

voici l'html:
<?xml version="1.0" encoding="UTF-8"?>
<!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="en" lang="en">
<head>
    <title><!-- page 1 --></title>
    <link rel="stylesheet" type="text/css" media="screen" href="css/ecran.css" />
</head>
<body>
    
<div class= global>
        <div class= logo>
            logo
        </div> <!-- ferme logo -->
        <div class= menu>
            <div class="menu1">Partie 1</div>
            <div class="menu2">Partie 2</div>
            <div class="menu3">Partie 3</div>
            <div class="menu4">Partie 4</div>
        </div> <!-- ferme menu -->
        <div class= grosBloc>
            <div class= blocGauche>
                <img class="blocImage" src="image300px.gif" alt="Image de 300px sur 300" />
                    <div class= txtCourant>
                        <p>Aliquam massa eros, porttitor vestibulum, ultrices nec, vehicula eu, risus. Morbi massa lacus, varius hendrerit, feugiat at, condimentum sed, est. Etiam purus ligula, vulputate eu, ornare nec, fermentum in, sem. In malesuada laoreet felis. Nulla facilisi. Nulla mauris. Donec eget quam facilisis lectus iaculis feugiat. Ut egestas dictum ante. Nulla porttitor sagittis lacus. Nulla accumsan, nisi a rhoncus gravida, metus enim varius ligula, ut scelerisque velit ligula a risus. Donec interdum. In semper venenatis odio. Donec accumsan. Vestibulum facilisis, neque imperdiet sagittis consectetur, nisl lectus tempor ante, et mollis lectus lacus et elit. Duis eget justo eu dui varius rhoncus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aenean iaculis imperdiet sapien. Proin massa. Etiam at libero.
</p>
                    </div> <!-- ferme txtCourant -->
                <div class= blocDroite>
                <ul>
                    <li>lien 1</li>
                    <li>lien 2</li>
                    <li>lien 3</li>
                    <li>lien 4</li>
                    <li>lien 5</li>
                </ul>
                </div> <!-- ferme blocDroite -->
            </div> <!-- ferme blocGauche  -->
        </div> <!-- ferme grosBloc -->
</div> <!-- ferme global -->
</body>
</html>


voici mon css (si vous voyez des trucs à alléger, dites moi, j'ai l'impression de faire trop de boites...):
* {margin: 0; padding: 0;}

.global {
    width: 680px;
    border-style: solid;
    border-color: black;
    margin-left: auto;
    margin-right: auto;
    background-color: yellow;
    min-height: 480px;
    padding: 0px;
}

.logo {
    width: 100%;
    height: 100px;
    background-color: green;
    padding: 0px;
}

.menu {
    width: 100%;
    background-color: red;
    height: 30px;
}


.menu1 {
    background-color: white;
    height: 30px;
    width: 100px;
    float: left;
    margin-left: 3px;
}
    
    
.menu2 {
    background-color: white;
    height: 30px;
    width: 100px;
    float: left;
    margin-left: 40px;  
}

.menu3 {
    background-color: white;
    height: 30px;
    width: 100px;
    float: left;
    margin-left: 40px;
}

.menu4 {
    background-color: white;
    height: 30px;
    width: 100px;
    float: left;
    margin-left: 40px;
}


.blocGauche {
    background-color: pink;
    padding: 1px 0;
    width: 485px;
}

.txtCourant {
    width:485px;
    background-color: blue;
    padding: 1px 0;
}

.blocImage {
    width: 300px;
    height: 300px;
    float: left;
    margin-left: 185px;
}

.blocDroite {
    margin-left: 485px;
    float: left;
    width: 195px;
    color: white;
    background-color: black;
}



mes soucis:

1)
comment bien aligner: blocGauche/txtCourant/blocImage ? vous voyez le pixel rose en trop en haut et en bas ? j'aimerai coller ces éléments au menu du haut (juste un pixel de trop)
et tout en bas de ma page, encore un seul pixel de trop.

j'ai essayé avec
padding: 1px 0;  
ici et là , sans succès.


2) impossible de ramener mon bloc noir, avec la liste non ordonnée, en haut à droite de ma colonne jaune.
là encore j'ai essayé des position relative et absolute dans tous les coins...sans succès.

Merci beaucoup pour votre aide par avance, et désolé si je suis trop long, mais c'est pas évident de faire au plus court quand on ne maîtrise pas soi même un thème.

A+ Smiley biggrin
Modifié par Grindsable (08 Jan 2009 - 11:41)
Ahh ^^' tu utilises des classes pour tes blocs de structuration !
Tant qu'un élément est destiné à n'être affiché qu'une fois, il est préférable d'utiliser l'attribut id="".
Je sais ça ne répond pas à ta question, faute de temps je me contente de te laisser ce conseil, désolé.
Modifié par Noix de Coco (07 Jan 2009 - 20:15)
oh, "affiché qu'une fois" sur la page ou dans le site ?

je pensais que l'id ne servait que pour une seule fois dans l'ensemble du site Smiley biggol
Pour ce qui est du second problème, tu fais flotter à gauche avec un margin ta liste. Le soucis, c'est que rien n'est flottant avant.

Pense donc à mettre blocimage et test courant en flottant left.

Mais le plus usuel serait de sortir ce blocdroit du bloc gauche

-> 2 colonnes -> Un blocgauche float:left; et un blocdroit float:right;

Voila, je pense que tu peux essayer ces deux solutions pour essayer de remonter cette div en haut de la div jaune.

Ensuite pour ce qui est du pixel rose :

Pour ma part, en enlevant le padding 1 0px, je tombe sur le bon résultat, sans bordure rose sous firefox 3 et dans l'idée sous ie7

En espérant avoir répondu à ta question !

++ Fetnat
enlève ça
<?xml version="1.0" encoding="UTF-8"?>

du haut de ton code, ça ne sert à rien (à part à activer le mode quirks de IE) vu que tu utilise le XHTML comme du HTML.

ça résoudra surement pas le problème, mais ça t'évitera des mauvaises surprises.
@Noixdecoco:
je vais virer mes class et mettre des ids

@fetnat:
tu m'as bien dépatouillé, plus de décalage, et le bloc noir a droite va bien là ou je veux.

@Yasashii:
chef, oui chef! Smiley lol

@Felipe:
arf, pourtant je l'ai eu ici:
http://blog.alsacreations.com/2004/12/08/100-methodologie-pour-resoudre-les-problemes-daffichage-en-css

mais bon j'avais dû zapper ça:
a écrit :
Notez qu'une discussion sur l'usage de ce sélecteur universel a été ouverte sur le forum Alsa
Smiley langue


en tout cas merci à vous.


bon donc là, j'ai réglé mes deux soucis, mais y'en a deux nouveaux (et on ne rigole pas au fond Smiley cligne ):

A) mon bloc bleu (txtCourant), passe en dessous mon image (blocImage)...
l'effet que j'essaye d'avoir, c'est que le texte entoure l'image à sa gauche et en dessous.L'image restant dans le coin haut/droit du bloc rose (blocGauche).J'ai essayé avec du padding mais ça décale tout mon bloc de droite ensuite... Smiley confus

B) mon bloc qui englobe tout le reste, et qui me permet de tout centrer, le jaune. j'avais réussi à le faire descendre selon la hauteur de mon bloc de texte.Et là, il s'arrête au min-height que je lui ai mis... Smiley confus
le code actuel (pas encore remplacé les class par des ids)

<!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="en" lang="en">
<head>
    <title><!-- page 1 --></title>
    <link rel="stylesheet" type="text/css" media="screen" href="css/ecran.css" />
</head>
<body>
    
<div class= global>
        <div class= logo>
            logo
        </div> <!-- ferme logo -->
        <div class= menu>
            <div class="menu1">Partie 1</div>
            <div class="menu2">Partie 2</div>
            <div class="menu3">Partie 3</div>
            <div class="menu4">Partie 4</div>
        </div> <!-- ferme menu -->
            <div class= blocGauche>
                <div class= txtCourant>
                    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed sed nulla non ipsum vestibulum hendrerit. Cras imperdiet, metus et semper semper, purus purus cursus orci, vitae lobortis augue lorem in metus. Aenean lacinia. Fusce arcu. Donec luctus, nisi in dictum malesuada, dui mi tristique leo, vitae feugiat ante est eget neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Mauris rhoncus, augue non consectetur sollicitudin, felis lectus aliquam neque, eget lobortis lorem lorem sed nunc. Fusce rutrum enim vitae est. Nam vestibulum. Praesent elementum sodales urna. Sed tempus.

Donec non tortor. In justo dui, condimentum quis, pharetra eu, mattis a, nibh. Morbi pharetra lobortis odio. Quisque vel ligula. Nulla facilisi. Proin scelerisque sollicitudin risus. Fusce tellus. Pellentesque fringilla egestas dui. In ultrices magna rhoncus libero. Aenean vel massa vitae tortor placerat elementum. Nunc pretium nisi vel pede. Integer elementum enim eu dolor. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nam in metus et purus lacinia imperdiet.

Phasellus ante elit, congue eget, aliquam in, sagittis ut, quam. Nullam porta mi ac odio. Maecenas felis. In hac habitasse platea dictumst. Donec pede eros, varius a, lacinia vitae, sodales at, erat. Sed vitae ligula. Donec facilisis, odio quis cursus rhoncus, odio orci aliquam nulla, a aliquam neque enim vel arcu. Morbi non arcu quis nibh pulvinar congue. Sed metus erat, facilisis vitae, molestie ut, dapibus sit amet, tortor. Quisque elit enim, venenatis id, feugiat non, gravida eu, est. Aenean scelerisque ligula adipiscing augue. Morbi dignissim. Maecenas fringilla magna ac pede.

Pellentesque justo nisl, tempus eget, dignissim nec, sodales tempor, nulla. Phasellus nisl ipsum, scelerisque eu, tincidunt eu, venenatis in, turpis. In eget enim. Sed in quam. Nunc sollicitudin, purus quis suscipit tincidunt, leo elit vestibulum turpis, eget placerat nisl libero sit amet. 
                <img class= blocImage src="image300px.gif" alt="Image de 300px sur 300" />
                </div> <!-- ferme txtCourant -->      
            </div> <!-- ferme blocGauche  -->
            <div class= blocDroite>
                <ul>
                    <li>lien 1</li>
                    <li>lien 2</li>
                    <li>lien 3</li>
                    <li>lien 4</li>
                    <li>lien 5</li>
                </ul>
                </div> <!-- ferme blocDroite -->
</div> <!-- ferme global -->
</body>
</html>

.global {
    width: 680px;
    border-style: solid;
    border-color: black;
    margin-left: auto;
    margin-right: auto;
    background-color: yellow;
    min-height: 480px;
    height: 100%;
    padding: 0px;
    border-bottom: none;
}

.logo {
    width: 100%;
    height: 100px;
    background-color: green;
    padding: 0px;
}

.menu {
    width: 100%;
    background-color: red;
    height: 30px;
}


.menu1 {
    background-color: white;
    height: 30px;
    width: 100px;
    float: left;
    margin-left: 3px;
}
    
    
.menu2 {
    background-color: white;
    height: 30px;
    width: 100px;
    float: left;
    margin-left: 40px;  
}

.menu3 {
    background-color: white;
    height: 30px;
    width: 100px;
    float: left;
    margin-left: 40px;
}

.menu4 {
    background-color: white;
    height: 30px;
    width: 100px;
    float: left;
    margin-left: 40px;
}


.blocGauche {
    background-color: pink;
    width: 537px;
    float: left;
    min-height: 350px;
}

.txtCourant {
    background-color: blue;
    float: left;
    min-height: 350px;
    width: 537px
}

.blocImage {
    float: right;
    height: 300px;
    width: 300px;
}

.blocDroite {
    float: right;
    width: 140px;
    color: white;
    background-color: black;
    margin-right: 3px;
    padding: 0;
    list-style-type: none;
}

.blocDroite ul, .blocDroite li {
    margin: 0;
    padding: 0;
    list-style-type: none;
 }
Pour le problème A :

Deux solutions s'offrent à toi :

soit tu mets le bloc image à l'intérieur de la div Textcourant et tu lui mets un float:right.

Soit tu le laisses en dehors de la div mais cette fois ci tu mets à Text courant l'attribut position : relative et tu lui mets pas de float. (Attention l'image se trouve alors sous le background-color)


Pour le problème B :

Le problème est que ton contenu est en flottant et qu'il ne capte pas ou se situe la fin de ton flottant. J'ai personnelement comme astuce d'utiliser une balise <hr> (c'est une barre horizontale) et je lui mets comme critère width:100% pour qu'elle prenne toute la taille de la fenêtre associé à clear:both pour qu'elle se retrouve sous les div flottantes. et tu ajoutes le critère visibility:hidden, pour qu'elle ne se voit pas.

Ainsi le div global sait ou se trouve le bas de la page -> juste en dessous du hr, et alors il n'y a plus de problème Smiley smile

Si t'as pas bien compris quelque chose dans mon explication, n'hésite pas,

A bientot,

Fetnat
cool, nikel l'astuce de <hr>, problème réglé merci Smiley cligne

par contre, pour A, mon code comporte ta première solution déja non ? (image dans bloc txtCourant et float right)
ou je l'ai mal fait ?

(pas encore essayé la seconde solution, je vais voir ça.)
[code].txtCourant {
position: relative;
background-color: blue;
float: left;
min-height: 350px;
width: 537px
.txtCourant {
    position: relative;
    background-color: blue;
    float: left;
    min-height: 350px;
    width: 537px


comme ça ?

mon bloc image se retrouve en bas à droite, je capte pas Smiley decu
Modifié par Grindsable (08 Jan 2009 - 11:40)
dans le html mets l'image avant le texte car sinon le text s'affiche et à la fin du text il affiche l'image alors que e que tu souhaite, c'est afficher dabord l'image à droite, puis remplir avec le text Smiley smile

Et le bouton éditer se situe en haut à droite de chacun de tes messages
Modifié par fetnat (08 Jan 2009 - 11:36)
arf Smiley lol

de bidouilles en bidouilles, je fais et défais des trucs bons et mauvais.

à la base mon image était avant, sans position relative,
et ainsi de suite Smiley lol

merci beaucoup en tout cas, c'est bon pour le moment Smiley biggol
et par exemple dans la continuité du post au dessus, si tu souhaite avoir ton image à droite mais pas en haut de ton texte, il suffit de mettre un premier paragraphe au dessus de ta balise img, puis l'img puis le text en dessous, ainsi le premier paragraphe s'écrira sur toute la largeur, puis l'image ira se coller en dessous à droite, puis le second paragraphe remplira le trou à gauche et finira en dessous de l'image Smiley cligne
je vois mieux comment ça se passe, en fait faut jongler entre code, et astuces plus ou moins prévues par le code, c'est pas si simple je trouve Smiley smile

sinon, j'arrive pas à trouver, comment exprimer en français l'expression qu'on rajoute dans le code avec position relative pour txtCourant.

tu le lis comment dans ce code stp ? pour que je comprenne mieux le fonctionnement ?