28173 sujets

CSS et mise en forme, CSS3

Pages :
wéooo...wéaaa...

j'essayer de faire une mise en page sur 2 colonnes avec un header, un conteneur (ds lequel se trouveront les 2 colonnes) et un footer.

je m'inspire de cet exemple:
http://css.alsacreations.com/modeles/modele15.htm

mais dans l'un de mes <div> le fond qui devrait se dupliquer, ne s'affiche même pas...

pour realiser ma page, j'ai un <div id="global"> qui est le conteneur principal centré dans la page. celui-ci contient trois autre <div>:
le header, le conteneur et le footer.
le conteneur contient deux autres <div>: "#gauche" et "#droite". Afin que ces deux derniers ont la même couleur de fond suivant la hauteur de chacune d'elle j'ai essayer de dupliquer un fond dans le <div id="conteneur"> mais malheureusement celui-ci ne le fait pas et c'est le fond du body qui apparait Smiley decu

voici mon code CSS:

body {
	background-image:url(../gfx/background.gif);
	background-repeat:repeat;
	background-color:#00CCCC;
	margin: 0;
	padding: 0;
	font-family: Verdana, Arial, Helvetica, sans-serif;
	font-size: 11px;
	line-height:14px;
	text-align: justify;
}

#global {
	width: 760px;
	margin: 0 auto;
}
#header {
	height: 220px;
}
#conteneur {
	background-image:url(../gfx/bkgdconteneur.gif);
	background-repeat:repeat-y;
}
#gauche {
	float: left;
	width: 560px;
	height: 200px;
}
#droite {
	float: right;
	width: 200px;
}
#footer {
	clear:both;
	height: 51px;
	background-image:url(../gfx/basdepage.gif);
	background-repeat:no-repeat;
}


et mon code html

<body>
<div id="global">
	<div id="header">
	<?php include "include_menu.php";?>
	</div>
	
	<div id="conteneur">
		<div id="gauche">
		<p class="titre">Accueil</p>
		<p class="text">Bienvenue.</p>
		<p class="text">
		Wine-Not est heureux de vous accueillir sur son nouveau site.<br />
		Nous vous proposons un concept original qu'est la combinaison d'un Wine-Shop et d'un Wine-Bar: achat des vins en provenance directe des propri&eacute;t&eacute;s et possibilit&eacute; de les d&eacute;guster sur place, accompagn&eacute;s d'une petite restauration artisanale.<br />
		Un vin en promotion vous sera propos&eacute; chaque mois. Des nouveaut&eacute;s, ainsi que diverses manifestations, viendront alimenter tr&egrave;s r&eacute;guli&egrave;rement le site.<br />
		N'h&eacute;sitez donc pas &agrave; nous rendre une petite visite (r&eacute;elle ou virtuelle) de temps en temps ou &agrave; nous laisser vos coordonn&eacute;es.
		</p>
		</div>
		
		<div id="droite">
		<p class="text"> test</p>
		</div>
	</div>
		
	<div id="footer">
	</div>
</div>
</body>


le tout est également visible ici:
http://thomascaryn.phpnet.org/winenot-v2/public/accueil.php

si qqun pouvait m'aider,

merchi
Modifié par unlimilove (04 Nov 2006 - 16:14)
bonjour,

Ta situation est tout à fait normale :

Ton div conteneur ne contient que deux flottants...

Le mécanisme d'un flottant est le suivant : il est d'abord retiré du flux normal puis repositionné le plus à droite ou à gauche possible...

Si les deux flottants sont retirés du flux, le conteneur qui fait office de bloc conteneur principal, n'à plus rien à afficher : sa largeur reste identique, mais sa hauteur se réduit à zéro.

Il faut donc forcer ton div conteneur à englober tes deux flottants droite et gauche.

Tu à plusieurs solutions :

1. La méthode classique : utiliser un élément affecté de la propriété clear:both après tes flottants

<div style="clear:both"></div>


La propriété clear:both interdisant au bloc d'afficher quelque chose à sa droite et à sa gauche le forcera à s'afficher "après tes flottants", le div conteneur va alors s'aggrandir et englober "de fait" les flottants.

Cette méthode fonctionne dans tous les cas, en revanche elle peut poser des soucis avec IE.

L'autre méthode consiste à affecter à ton div conteneur une propriété overflow:hidden (ou auto) ce qui aura le même effet sur Gecko en "économisant" le bloc en clear:both.

Enfin pour IE jouer sur le layout en affectant par exemple un height:1%.


#conteneur {
        overflow:hidden;
        height:1%;
	background-image:url(../gfx/bkgdconteneur.gif);
	background-repeat:repeat-y;
}



Devrait résoudre ton problème


Jean-pierre
Modifié par jpv (03 Nov 2006 - 16:58)
Heu, il ne faudrait pas réserver la ligne height: 1% à IE (via les commentaires conditionnels), histoire de ne pas tout faire disparaitre sous Firefox & consorts ?
Bonjour,

Ce serait plus propre en effet, en revanche l'utilisation conjointe de overflow:hidden|auto et de height:1% semble, à ma connaissance, très bien digéré par Gecko.

Jean-pierre
Modifié par jpv (03 Nov 2006 - 17:08)
Modérateur
bonsoir ,

pour ma part je créer cette " effet de layout d'une autre façon , afin de ne pas risquer de ce confronté au probleme eventuel du "height:1%".

#conteneur {
	background-image:url(../gfx/bkgdconteneur.gif);
	background-repeat:repeat-y;
display:inline-block;/* IE */
display:table;/* les autres */
}


le display:inline-block ; fait partie de la panolpie des regles css permettant d'activé le "haslayout or not " dans IE .
Le display:table; associer a une largeur (pour safari a priori) , permet lui d'englober les flottants dans les autres navigateurs.

la premiere regle ne se trouve pas annulé dans IE qui ne comprend pas display:table; , et si par mesaventure (ou ignorance de ma part) IE7 la comprends , cela ne devrait pas occasioné de probleme .

++
Administrateur
gcyrillus a écrit :

le display:inline-block ; fait partie de la panolpie des regles css permettant d'activé le "haslayout or not " dans IE .
Le display:table; associer a une largeur (pour safari a priori) , permet lui d'englober les flottants dans les autres navigateurs.

la premiere regle ne se trouve pas annulé dans IE qui ne comprend pas display:table; , et si par mesaventure (ou ignorance de ma part) IE7 la comprends , cela ne devrait pas occasioné de probleme .

++

C'est assez intéressant comme technique.
Il faudrait le tester à fond dans toutes les circonstances.

A priori, IE7 n'a pas prévu de reconnaitre display: table.
Modérateur
oui,
une fois de plus ce n'est pas "universel" , mais reste souvent une option envisageable.
Ce qu'il ne faut pas oublié , c'est que ce display:table; confere au block(ou element inline) ainsi modifié des propriétes similaire aux "tableau" , malgré une dimension donnée il peuvent s'etirer , et il prennent par defaut les dimensions que ces contenu lui imposent , un peu comme les flottants sans pour autant flotter ni etre positionné en absolue.


pour voir les effets possible de ce display:table;
je propose au curieux d'ajouter en fin de css sur une page de leur choix .

* {display:table;border:1px solid}

.... etonnant de voir s'afficher des balises comprises entre <head> et </head> (ce n'est pas la seul possibilité ).
Smiley cligne

A tester effectivement pour en ressortir les usages interessants

bonsoir
Administrateur
gcyrillus a écrit :
Ce qu'il ne faut pas oublié , c'est que ce display:table; confere au block(ou element inline) ainsi modifié des propriétes similaire aux "tableau"

Je n'ai pas testé, mais je suppose que cela ne suffit pas pour que la propriété vertical-align permette de centrer verticalement un élément dans IE.

a écrit :
.... etonnant de voir s'afficher des balises comprises entre <head> et </head> (ce n'est pas la seul possibilité ).
Ça permettrait enfin de ne plus se poser la question de savoir si le titre de page est <title> ou <h1> Smiley cligne
EDIT : ah non, impossible de cibler spécifiquement l'élément <title> Smiley decu
Modifié par Raphael (03 Nov 2006 - 18:58)
Modérateur
?? , tu as bien indiqué le display:inline-block; pour IE ?

@raphael , non pour IE c'est toujours l'eternel trio de balise et le position relative avec un top positif et un top negatif (qui ne font pas disparaitre le contenu dans le haut de la fenetre en mode standard a partir de html 4.01 strict , je crois ).
yes, voici ma CSS

#conteneur {
	
	background-image:url(../gfx/bkgdconteneur.gif);
	background-repeat:repeat-y;
	display:inline-block;
	display:table;
		
	padding-left: 30px;
	padding-right: 30px;
}


sous Firefox, pas de probleme mais sous IE le probleme persiste.
la CSS sur mon serveur n'est pas encore uploader, je bosse en local

Smiley decu
Modifié par unlimilove (03 Nov 2006 - 19:03)
Modérateur
re bonsoir ,

le display:inline-block; est a passé en commentaire conditionnel comme il se devrait maintenant en generale pour les surcharges css d'IE , ou en dernier (dans le css )


...
display:table!important; 
display:inline-block;
...


ou se reporter a nouveau sur les dimension pour eviter les CC et les hacks .

display:table; 
width:100%;


bonsoir Smiley smile
Sainte Mère de Dieu!

cette fois ça marche! je n'ai strictement rien compris à ce que vous avez tentez de m'expliquer.
J'ai hate de recevoir le bouquin que j'ai commander.

un grand merci à vous tous pour vos messages.
Modérateur
:) , desolé , bonne lecture , et peut-tu mettre en resolu si c'est le cas .

bonne continuation.
Modérateur
bonsoir.

je viens de regarder avec opera 8.54 et je ne releve pas de "bugs" ou de deplacement de colonnes.

Sur quel page cela se passe t-il ? et de quellle maniere ?

++
je viens de remettre la css problématique sur le serveur.
tu pourras à nouveau observer le probleme sous Opera (chez moi version 8.54)

merci
Modérateur
bonsoir,

ah je vois Smiley smile .

le padding (marge interne a #conteneur) géne "opera".
il est possible de le reporteer sur les flottants en marges externes .

extraits css :
#conteneur {
	background-image:url(../gfx/bkgdconteneur.gif);
	background-repeat:repeat-y;
		/*
	utiliser pour afficher le fond du <div>
	a insirer obligatoirement en fin de CSS
	URL:http://forum.alsacreations.com/topic-4-19426-1-Fond-qui-napparait-pas.html#copy
	*/
	display:table;
	width:100%;/* padding inadapté dans ce cas [smile] , s'ajouterait au 100% */
}
#gauche {
	float: left;
	width: 530px;
	/*background-color:#0099CC;*/
margin-left:30px;
display:inline;/* debug IE , double-margin */
}
#droite {
	float: right;
	width: 170px;
	margin-right:30px;
background-image:url(../gfx/conteneur_droite/background_droite.gif);
	background-repeat:repeat-y;
}


Voilà.

Je souhaite que ce topic t'ai montré quelques aspects des css et que cela va motivé tes "lectures"
les aspect "standards" , en generales , sont interessants , on ne peut jamais totalement ignorés IE ou ne devellopé que sous (ou pour ) un seul "fureteur' .

++
oki, merci ca tourne impec maintenant mais pourrais-tu encore m'expliquer ces quelques lignes que tu as rajoutées car j'aimerais également comprendre Smiley cligne

à quoi servent les lignes:

display:table;
width:100%;

dans mon #conteneur?

également l'utiliter de:
display:inline;
dans #gauche alors que cette ligne n'apparait pas dans #droite?

j'attends le bouquin que j'ai commander avec impatience. Pour l'instant j'essaye de me debrouiller avec les tutos mais je ne suis pas fana de la lecture sur ecran...

sinon pour les navigateurs, pas de panique je prefere quand ca tourne sur un max d'entre eux. pour le moment je test sur IE6.0, Firefox1.5, Netscape 7 et Safari, je pense qu'avec ça je devrais faire plaisir à un grand nombre de visiteurs...

en tout cas merci pour ton aide!
Modérateur
bonjour,


display:table;

cette regle css ,(parmis d'autres voir faq : http://forum.alsacreations.com/faq/#item6 ) , permet a firefoxe entre autres , d'englober les flottants qui seront placé dans le conteneur.

width:100%;

Ceci va permettre a IE de doté le conteneur de "haslayout" et de le rendre visible.
http://www.test.blog-and-blues.org/haslayout/trad_temp.html
(accessoirement , permettrait a safari de laisser les 2 flottants cote a cote conjointement avec le display:table; au lieu de les faires passer a la ligne en compressant au maximum le conteneur , seulement dans le cas du display:table; ... si tu pouvait confirmer ou non ce comportement Smiley smile en testant dans safari sans le width:100%;. )


display:inline;

IE a un bug sur les flottants .. la marge gauche se trouve doublée ! , en appliquant un display:inline; cette erreur disparait sans modifier le comportement du flottant. C'est un bug d'IE assez bien connu .
#droite n'a pas besoin de cette "rectification" pour IE , car le "bug" n'y est pas provoqué.

a écrit :
en tout cas merci pour ton aide!


Je t'en pris , c'est le principe d'un forum , si ce n'est pas moi ce sera un autre , de plus quand on y perçoit une veritable volonté de comprendre et pas seulement une recherche de soluce toute faite , c'est agreable de filer un coup de main la ou on peut.

bonsoir Smiley smile
Pages :