28218 sujets

CSS et mise en forme, CSS3

Pages :
Bonjour,

Je me suis lancé dans le développement d'un site en essayant de respecter au mieux la séparation contenu/mise en forme avec les CSS.
J'essaye donc déjà de faire une mise en page sans tableaux mais je m'y perd encore dans le positionnement des blocs et la gestion des propriétés de positionnement, notament "position: fixed".

Voici ma page de conception en cours. Comme vous pouvez le voir, je n'en suis qu'au début. Ca promet... Smiley confus
La mise en page est la suivante :
- une bannière sur toute la largeur en haut et sur une hauteur de 81px.
- une image en haut à gauche, sous la bannière, complétant celle-ci
- un menu à gauche
- Le contenu de la page dans ce qui reste

Pour vous donner une idée, imaginez que la bannière représente un club de golf avec le manche à droite et la tête à gauche, que l'image complétant est une balle qui touche la tête du club et que le menu est... un menu !
il existe également un lien sur la tête du club qui ramène à la page d'accueil.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="fr">
<head>
	<link href="librairie/Efi.css" rel="stylesheet" media="screen">
</head>

<body>
<div id="banniere">
	<h1>BANNIERE</h1>
	<a href="index.php" title="Retour &agrave; la page d'accueil">Page d'accueil</a>
</div>

<div id="menu">Pas encore créé</div>

<div id="contenu">
	<strong>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Phasellus varius eleifend tellus. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Nulla facilisi. Sed wisi lectus, placerat nec, mollis quis, posuere eget, arcu.
	Donec euismod. Praesent mauris mi, adipiscing non, mollis eget, adipiscing ac, erat. Integer nonummy mauris sit amet metus. In adipiscing, ligula ultrices dictum vehicula, eros turpis lacinia libero, sed aliquet urna diam sed tellus. Etiam semper sapien eget metus.
	</strong>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Phasellus varius eleifend tellus. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Nulla facilisi. Sed wisi lectus, placerat nec, mollis quis, posuere eget, arcu.
	Donec euismod. Praesent mauris mi, adipiscing non, mollis eget, 
...
etc. de façon à faire apparaitre la barre de défilement verticale
...
</div>

</body>
</html>

et la feuille de style :
/**************************************************************************** Généralités *****************************************************************************/
body { 
	background: url("../images/fond-page.gif") white no-repeat fixed top left;
	margin: 0; padding: 0; 
	border: 0; 
	top: 0; left: 0; 
	scrollbar-arrow-color: #FFCC00; scrollbar-face-color: #7189AB; scrollbar-track-color: #94A9CA;
	font: 0.8em/1.5em arial, helvetica, serif;
	}
/**************************************************************************** Bannière *****************************************************************************/
#banniere {
	background: url("../images/en-tete.jpg") transparent no-repeat top left;
	width: 100%;
	height: 81px;
	border: solid 1px red;
	}
#banniere h1 {
	margin: 0;
	text-indent: -999em;
	width: 130px; height: 81px;
	background: url("../images/e-bas.gif") transparent no-repeat top left;
	position: relative;
	top: 81px;
	border: solid 1px blue;
	}
#banniere a {
	position: absolute;
	left: 13px; top: 7px;
	display: block;
	text-indent: -999em;
	width: 130px; height: 61px;
	border: solid 1px white;
	}

Tel quel, la présentation fonctionne sous Firefox et IE6.
Mon pb est le suivant : je voudrais que cet ensemble (bannière, image + menu) ne défile pas avec la page (en utilisant "position: fixed") sachant que cela n'aura aucun effet sous IE, évidemment.

J'ai déjà commencé mes essai avec uniquement la bannière mais lorsque j'ajoute la propriété "position: fixed" dans "#banniere {", autant cela défile sous IE (comme prévu cela n'a rien changé), autant cela me fait un bloc transparent sous Firefox.

De plus, ce bloc prend toute la largeur et n'a plus la forme d'un "L" couché (le bloc de la balle fait maintenant toute la largeur) mais sont contenu est en fait un extrait de l'écran que je regardais juste avant. Si je travaillais sous Excel avant de basculer sous Firefox, j'aurais un bout de ma feuille de calcul à la place de la bannière.

Smiley decu
Modifié par Ricou13 (13 May 2005 - 18:43)
Bonjour,
Je pense que la solution à ton problème est ici.
IlSandor.


Edit : et ça marchera sous IE
Modifié par ilsandor (04 May 2005 - 23:51)
Osiris1426 a écrit :
Erf j'ai un peu de mal à visionner ton truc. Si tu as un exemple en ligne...
Tu peux voir la mise en page "avant fixed" sur new.php
et la version "fixed" sur new2.php (lance ce lien depuis ici et non en modifiant l'url, tu verras ainsi l'effet "oh je vois toujours l'écran précédent" dont je parlais).
La seule différence entre les 2 feuilles de style est l'ajout, dans la feuille no 2 de
body > div#banniere {
	position: fixed;
	}

Dans les résultats de "fixed" j'ai effectivement trouvé ceci mais je n'ai toujours pas compris l'astuce Smiley sweatdrop

ilsandor a écrit :
Je pense que la solution à ton problème est ici.

Effectivement, le modèle que je veux obtenir est l'écran no 11. Je n'avais pas du tout pensé à l'overflow !
Mais la molette de la souris ne marche pas sous Firefox alors qu'elle fonctionne sous IE, c'est un comble de voir que, pour une fois, ça marche mieux sous IE Smiley nut

Quand je pense que j'ai dù lire une bonne cinquantaine d'articles sur les CSS sur différents site (alsa, openweb, pompage, alistapart...) et que je n'ai même pas pensé que je pouvait y trouver des tutos. Smiley confused
Modifié par Ricou13 (05 May 2005 - 00:25)
a écrit :
ça marche mieux sous IE
C'est essentiellement que tu as l'habitude de coder pour D'autre snavigateurs en priorité c'est tout, personnellement et parce que je ne fait pas de préférences, j'ai des problèmes avec tous.
Non, je n'ai Firefox que depuis 2 ou 3 mois et je développais (un bien grand mot puisque je ne développe pas sur le web en temps normal) quasi uniquement pour IE.
Mais depuis que je m'intéresse à XHTML et à la mise en page via CSS, j'essaye de faire des choses un peu plus à la sauce W3C qu'à la sauce Billou.
Donc IE n'est pas franchement aligné sur les standard et, en général, c'est sous IE que les styles ne fonctionnent pas?

Enfin bon, je vais m'atteler à la tâche et je vous tiendrais au courant...
Puisque j'ai mis des liens vers ma page de test, je serais plutôt favorable à toutes critiques sur ma façon de coder la feuille de style (voire le code html lui-même) Smiley biggrin

Je mettrais [Résolu] lorsque je présenterais un code final. D'ailleurs, on fait comment ici pour mettre résolu ?
Modifié par Ricou13 (05 May 2005 - 00:37)
bonsoir ricou et bienvenue sur ce forum

pour mettre un [résolu] c'est tres simplement ecrit ici

et c'est à lire attentivement Smiley smile

bon courage a toi pour la suite Smiley cligne
Merci.

J'avais déjà lu l'aide mais il y est "simplement" Smiley cligne écrit:
a écrit :
Nous vous invitons à ajouter un tag [Résolu] lorsque la réponse à votre problème a été trouvée.

Mais pas comment !

Je me suis rappelé que sur certains forums, il fallait éditer le premier message pour pouvoir modifier le titre. Et c'est le cas ici.

Modif : C'est le cas sur tous mes post en fait Smiley confused
Modifié par Ricou13 (05 May 2005 - 12:02)
Voici la suite de mes aventures de "metteur en page pas vraiment efficace"

J'ai adapté les principes de la mise en page de ce modèle (sans le footer pour l'instant)
C'est la mise en page actuelle de la page de de test new.php

Mais, si la mise en page est mieux, la solution de l'overflow ne convient pas car il faut impérativement définir une hauteur de calque et si celle-ci est supérieure à la hauteur dispo de la page, la barre du body réapparait. Certes, on peut la masquer mais ce qui déborde est alors perdu.
Sur le site actuel (revennez sur l'url du serveur mais ne regardez pas le code svp sinon les aficonados de css vont avoir une attaque), le principe est que le contenu est un peu "élastique" : contenu sur 600px et centré, hauteur dépendante du contenu. Ainsi l'affichage est propre en 800x600 comme en 1024x768.

En fixant, par exemple la hauteur du calque de contenu à 300px pour que cela rentre sur un affichage 800x600, j'aurais un espace vide en dessous en 1024*768 qui sera plutôt immonde d'autant que quasiment toutes les pages sont plus longues que ces 300px.

Je suis donc obligé de m'orienter vers l'idée précédente : fixed sous Firefox et défilement sous IE.
J'ai donc ajouté
body>div#banniere, body>div#menu {
	position: fixed;
	}
à la page de test no 2 : new2.php mais je reviens encore à mon pb d'affichage transparent Smiley eek
Certes la forme de cette zone transparente n'est plus complêtement [s]transparente[/s] carré mais elle affiche toujours un résidu de l'écran précédent Smiley eyecrazy
Modifié par Ricou13 (09 May 2005 - 02:20)
Bon, on reprend tout à zéro et on recommence...

En me basant sur cette gestion de fixed : ici
J'ai conçu une page bien plus avancée new3.php
qui correspond quasiment à ce que je veux.
J'ai trouvé d'où venait l'effet de "tranparence" qui apparaissait quand j'ajoutait la propriété "fixed" pour FF. En fait, elle était dûe à
text-indent: -999em;
Pourquoi ? Je n'en sais rien. toujours est-il qu'en la réduisant à -500em, le pb disparait Smiley confus

Cependant, il reste quelques soucis que je n'arrive pas à résoudre :

1) Je teste sous Firefox 1.0.3 et IE 6 SP1 sous Windows. Si votre navigateur est différent, pourriez-vous me dire si l'affichage est correct ? Merci

2) Si je supprime le commentaire en première ligne du fichier new3.php (<!-- toto -->), cela ne fonctionne plus sous IE6 et toute la page défile Smiley eyecrazy

3) Comme vous pouvez le voir, le "f" de l'image de fond déborde, volontairement, sur la bannière. D'où un background "transparent" pour le calque #banniere. Mais, en défilant, le texte de la page apparait dans la bannière, sous FF uniquement. Peut-on empécher ce défilement, comme sous IE ou le masquer ?

4) La largeur de la bannière (cadre rouge) est fixée à 100% pour qu'elle prenne toute la largeur de la page. Dans ma page de test, je l'ai mise à 99% pour que vous puissiez voir la fin du cadre. Niquel sous FF. Or, sous IE, les 100% correspondent à la largeur moins le padding du body, c'est à dire 100% - 150px (largeur du menu). Y a-t-il un moyen de corriger cela car la liste des langues se retrouve actuellement presqu'au milieu de l'écran sous IE Smiley decu

5) Bien qu'ayant masqué les titres (h1) des différentes zones avec un
"text-indent: -500em; 
l'espace utilisé par ce texte est toujours présent (vous pouvez le voir sur le pied de page dont le texte est décalé vers le bas). J'ai trouvé une parade visible sur le menu (dont la structure est identique au pied de page) en ajoutant
float: left;
au titre (h1) de façon à le "sortir" du flux. Est-ce une bonne solution ?

Voilà, je sais, je blablatte un max mais j'éspère avoir été clair. Si vous pouviez indiquer le numéro du pb en y répondant, ce serait super pour la clarté du suivi (je sais, j'abuses Smiley rolleyes )
Ricou13 a écrit :

5) Bien qu'ayant masqué les titres (h1) des différentes zones avec un
"text-indent: -500em; 
l'espace utilisé par ce texte est toujours présent (vous pouvez le voir sur le pied de page dont le texte est décalé vers le bas). J'ai trouvé une parade visible sur le menu (dont la structure est identique au pied de page) en ajoutant
float: left;
au titre (h1) de façon à le "sortir" du flux. Est-ce une bonne solution ?

Je n'ai pas lu tout ton post donc je répond un peu au hasard.

Tu peux essayer :

tag { 
   position: absolute; 
   left: -9999px; 
   top: -9999px; 
}
Effectivement !

J'en ai profité pour généralisé sur tous les H1 le code suivant :
h1 {
	position: absolute;
	left: -1000px
	}


Cela permet également de supprimer des
text-indent: -500em;
qui posaient pb sous FF. Par contre, je ne vois pas pourquoi on trouve des articles expliquant comment masquer le contenu d'un calque avec text-indent puisque la solution que tu m'as donné est tout aussi efficace.

Mais je ne vois pas l'utilité de modifier le top puisque le left sort déjà le tag de l'écran.
De plus, ma généralisation n'est valable que pour les H1 dont le but est uniquement informatif pour les écrans sans feuilles de style. Ainsi j'ai laissé quasiment tel quel "#banniere h1" qui a aussi une utilité graphique (c'est lui qui affiche le bas du logo).

Dans ce cas, comme celui du lien sur le nom de la société, je ne voit pas d'autre solution que le text-indent, sauf à créer des tags supplémentaires ou vides.

Smiley smile
Finalement j'ai abandonné mes
text-indent: -500em;
pour les remplacer par des
text-indent: -1000px;


Le pb d'affichage que j'avais sous FF (toujours visible ici - la bannière qui ne s'affiche pas) me donnait l'impression que "-999em" était une valeur tellement importante que le navigateur "dijonctait" ce qui explique pourquoi le pb était résolu en réduisant à "-500em".

Cependant, en jouant sur la taille de la police d'affichage (le site est sensé être "fluide"), ce pb réapparaissait lorsque la taille de la police devenait un peu importante.

En passant le décalage en pixels, ce pb a entièrement disparu Smiley biggrin
Ricou13 a écrit :

Cependant, en jouant sur la taille de la police d'affichage (le site est sensé être "fluide"), ce pb réapparaissait lorsque la taille de la police devenait un peu importante.

D'où l'utilité du top: -9999px; cité plus haut. Non ?
Enfin. Si ça fonctionne Smiley lol
Oui, tout à fait mais j'avais laissé les -500em sur les calques que je ne pouvais pas sortir de l'écran.

En fait, j'avais lu quelques articles, à droite et à gauche (mais pas en haut ni en bas, tiens Smiley lol ) sur le masquage du texte d'une balise et on y faisait souvent référence à -999em en disant que c'était une bonne solution. C'est pour cela que je l'ai utilisé.

Mais vu les pb rencontrés, je pense ne plus l'utiliser du tout. Smiley smile
Oui mais faut bien trouver une solution de ce type si on veut du texte dont le seul but est d'être affiché en cas de non utilisation de la feuille de style.

Pendant que je te tiens, t'as quoi comme navigateur ?

Et t'aurais pas une idée qui les 4 autres points qui me posent pb Smiley sourire
Ricou13 a écrit :

Pendant que je te tiens, t'as quoi comme navigateur ?

Sous Mac OS X :
* Firefox 1.0
* Mozilla 1.7
* Netscape 7.2
* Safari 1.2
* IE 5.2

Sous Windows :
* Firefox 1.0
* Mozilla 1.8
* Netscape 7.1
* Opera 7.5
* IE 6
Ricou13 a écrit :

Et t'aurais pas une idée qui les 4 autres points qui me posent pb Smiley sourire

Pas le temps de relire le sujet maintenant, mais je le ferai. Promis. Smiley lol
Ricou13 a écrit :

1) Je teste sous Firefox 1.0.3 et IE 6 SP1 sous Windows. Si votre navigateur est différent, pourriez-vous me dire si l'affichage est correct ? Merci

Sous Mac OS X :

* Firefox 1.0 - Mozilla 1.7 - Netscape 7.2 - Safari 1.2 - Opera 7.5
- Ces navigateurs présentent tous le problème de transparence.

* IE 5.2
- Même problème (100% -150px)

Ricou13 a écrit :

2) Si je supprime le commentaire en première ligne du fichier new3.php (<!-- toto -->), cela ne fonctionne plus sous IE6 et toute la page défile Smiley eyecrazy

À mon avis, conserver ce commentaire en haut de page est une mauvaise piste à suivre. Il faudrait pouvoir faire sans.

Ricou13 a écrit :

3) Comme vous pouvez le voir, le "f" de l'image de fond déborde, volontairement, sur la bannière. D'où un background "transparent" pour le calque #banniere. Mais, en défilant, le texte de la page apparait dans la bannière, sous FF uniquement. Peut-on empécher ce défilement, comme sous IE ou le masquer ?

Tu peux peut-être jeter un oeil du côté des z-index Smiley ohwell

Ricou13 a écrit :

4) La largeur de la bannière (cadre rouge) est fixée à 100% pour qu'elle prenne toute la largeur de la page. Dans ma page de test, je l'ai mise à 99% pour que vous puissiez voir la fin du cadre. Niquel sous FF. Or, sous IE, les 100% correspondent à la largeur moins le padding du body, c'est à dire 100% - 150px (largeur du menu). Y a-t-il un moyen de corriger cela car la liste des langues se retrouve actuellement presqu'au milieu de l'écran sous IE

Intuitivement, je pense que c'est le commentaire en haut de page qui fait basculer IE6 en mode « quirk » utilisant le modèle de boîte erroné. Essais d'enlever le commentaire.

Dis-nous ce que ça donne Smiley smile
Voici l'avancement des résolutions de pb.

pb no 1)

Il semblerait donc que ma mise en page fixed fonctionne sur la plupart des navigateurs. C'est une bonne chose. Donc résolu Smiley biggrin

pb no 2)

Comme je l'avais indiqué, la suppression de ce commentaire enlève la mise en page "fixed" sous IE et toute la page défile (bannière et menu compris)
Donc pas résolu Smiley decu
Le commentaire original était "Limpid loves IE in quirks mode". C'est quoi le mode Quirks ?

pb no 3)

Résoudre le pb par z-index m'obligerais à mettre l'image de fond dans un calque, fixed lui aussi, etc...
J'ai réglé le pb en le déplaçant vers le bas (tant pis pour l'effet graphique) en mettant un fond "white" au lieu de "transparent" à la bannière.
Donc résolu Smiley biggrin

pb no 4)

Même en supprimant le mode Quirks et en mettant la largeur du calque de la bannière à 100%, cela ne change rien. Donc pas résolu Smiley decu
N'existe-t-il pas un moyen d'écrire queqlque chose du genre
width: 100% + 150px;
Il me semble avoir lu quelque chose de ce goût, peut-être à propos des marges négatives...
Pages :