28173 sujets

CSS et mise en forme, CSS3

Bonsoir,

Je sais que je ne me suis présentée nulle part avant de demander de l'aide, que le sujet a été mille fois traité etc... Mais j'ai déjà essayé mille méthodes depuis des semaines, et je suis forcée d'avouer ce soir que je n'y arriverai pas sans que quelqu'un jette un coup d'oeil sur ce que je fais pour corriger mes erreurs Smiley ohwell

Je n'ai jamais appris "proprement" le CSS : j'ai commencé par bidouiller un template déjà existant pour me rapprocher de plus en plus de ce que j'avais en tête. C'est pourquoi le CSS de mon site vous paraîtra sûrement au mieux brouillon, au pire complètement bordélique, mais je compte un jour le refaire proprement de zéro, quand j'aurai du temps, du courage et confiance en mes connaissances Smiley smile

Alors mon site est

Le code CSS ici

Et mes 2 problèmes, les voici :


==> La fixation de mon arrière plan étirable

Mon idée est de mettre une photo en arrière plan qui s'adapte à la taille de la fenêtre et donc à la résolution d'écran. J'ai compris qu'il fallait passer l'image en "div" à 100% de taille et non en background d'un conteneur. J'ai suivi le tutoriel Alsacréation qui fonctionne très bien. Mais du coup, je ne sais plus comment je peux fixer cette image de fond de manière à ce qu'elle ne défile pas avec le texte. Je ne connaissais que la propriété background-attachment, et je n'ai pas assez d'expérience pour penser à une astuce de contournement...


==> Le centrage du site

J'ai essayé d'appliquer la méthode décrite sur le site Alsacréations (celui-là), mais ça n'a aucun effet. Je pense qu'il s'agit d'une histoire de conteneur "global" mal placé, soit dans le CSS soit dans le Html, mais la hiérarchie des éléments est mon point faible...

Le CSS :

html {
	height: 100%;
	width: 100%;
	margin:0;
	padding:0;
        font-size: 100%;
}

body {
	height: 100%;
	width: 100%;
	margin:0;
	padding:0;

	font-family: Trebuchet MS, Geneva, Sans Serif;
	line-height: 120%;
	font-size: 75%;
	color: #333333;
}

#fond {
	width : 100%;
	height: 100%;
}

#global {
	margin-left: auto;
	margin-right: auto;
	width:990px; /* largeur obligatoire pour être centré */
}


Dans le Html, j'ai placé "global" ici :

<body>

<img id="fond" alt="" src="/templates/rhuk_solarflare_ii/images/fond30.jpg" />

<div id="global">

<div align="center">
	<table border="0" cellpadding="0" cellspacing="0" width="808">
		<tr>
			<td class="outline">

(etc...)

		  	</td>
	  	</tr>
  	</table>
</div>

</div>

</body>


J'ai mis "global" après "fond" qui est mon image d'arrière plan et qui ne doit pas être centrée mais occuper toute la largeur du body, et avant tout le reste pour l'englober, mais je ne suis pas sûre que ça marche exactement comme ça.


En fait au final, j'aimerais avoir une image de fond étirable sur toute la taille de la fenêtre mais fixée, et le contenu du site d'une largeur de 990px et centré.


Merci pour les conseils que vous pourrez m'apporter Smiley biggrin
Bonjour et bienvenue, K'm.

La première chose à faire lorsqu'on rencontre un soucis d'affichage, c'est de vérifier que l'on a pas fait d'erreur de syntaxe en écrivant la page, en utilisant par exemple le validateur du W3C. Il se trouve qu'il y a 15 petites erreurs qui se sont glissées dans ta page d'accueil, et qui sont susceptibles d'empêcher les navigateurs de "lire" le code correctement.

Ensuite, il faut supprimer le prologue XML en début de fichier :
<?xml version="1.0" encoding="iso-8859-1"?>
car d'une part, ça ne sert à rien, et d'autre part, cela va causer des problèmes sous IE6.

Pour le reste, on verra plus tard Smiley cligne
Merci pour l'info sur le prologue XML, ça a été généré par mon CMS et je ne savais pas que ça causait des problèmes sous IE. C'est enlevé, et je le note dans un coin pour la prochaine fois !

Pour le W3C, je m'étais déjà pris la tête dessus : les 15 erreurs venaient toutes du fait que j'essayais de mettre une adresse mail en lien. En fait je crois que 2 scripts "anti robots collecteurs de mails" étaient imbriqués l'un dans l'autre à l'intérieur de mon lien, et ça a brouillé les balises...
Bref, je ne sais pas trop comment j'ai réussi à n'en supprimer qu'un sur les deux alors que j'ai carrément essayé de casser le lien, mais le principal est que ça marche maintenant Smiley smile

This Page Is Valid XHTML 1.0 Transitional!
Bonjour,

K'm a écrit :
Personne ne peut au moins m'aider à centrer ? Smiley ohwell

Hmm... pas évident. Il est vrai que le code CSS est un peu bordélique (abus caractérisé de positionnement absolu... argh), mais le code HTML n'est pas mal non plus dans le genre.

Mais bon, on peut sans doute bricoler un peu.

Vu que tu utilises allègrement le positionnement absolu, il va falloir composer avec ça. Les éléments positionnés en absolu sont positionnés par rapport aux limites de leur plus proche ancêtre positionné. Ici, ils n'y a pas d'ancêtre positionné, donc ils se placent par rapport aux bords du viewport (la zone de visualisation de la page).

Donc: ton div#global est correctement centré (on peut le vérifier en lui donnant un border: solid 10px red, par exemple), mais il n'a pratiquement aucun contenu en flux, et comme lui-même n'est pas positionné il ne joue pas le rôle de référent pour le positionnement de ses descendants.

Solution:
div#global {
	position: relative;
	/* reste du code pour div#global, avec dimension, centrage horizontal, etc. */
}

Là, on voit apparaitre un problème sympathique: ton div#global se place naturellement en dessous de ton image en height: 100%, et s'il joue le rôle de référent les autres éléments se placeront également à ce niveau.

Il faut alors positionner l'image en absolu (comme précisé dans l'article d'Alsacréations dont tu t'es inspiré):
#fond {
	position: absolute;
	z-index: 1;
	top: 0;
	left: 0;
	width:100%;
	height: 100%;
}

Pour être sûr de ne pas avoir de problème, on précise les z-index (l'ordre d'empilement) des deux blocs principaux: l'image de fond et div#global. Pour div#global, cela donnera donc:
div#global {
	position: relative;
	z-index: 2;
	/* reste du code pour div#global, avec dimension, centrage horizontal, etc. */
}


Et voilà pour la rustine. Smiley smile
K'm a écrit :
Mon idée est de mettre une photo en arrière plan qui s'adapte à la taille de la fenêtre et donc à la résolution d'écran. J'ai compris qu'il fallait passer l'image en "div" à 100% de taille et non en background d'un conteneur. J'ai suivi le tutoriel Alsacréation qui fonctionne très bien. Mais du coup, je ne sais plus comment je peux fixer cette image de fond de manière à ce qu'elle ne défile pas avec le texte. Je ne connaissais que la propriété background-attachment, et je n'ai pas assez d'expérience pour penser à une astuce de contournement...

Tu peux à la rigueur utiliser le positionnement fixe (plutôt que le positionnement absolu) pour cette image. En reprenant le code que je donne dans mon précédent message, cela donnerait alors:
#fond {
	position: fixed;
	z-index: 1;
	top: 0;
	left: 0;
	width:100%;
	height: 100%;
}

Problème: Internet Explorer 6 ne comprend pas position: fixed (pas de problème pour IE7 par contre).
Solutions possibles:
- via un commentaire conditionnel, dégrader en position: absolute pour IE5-6;
- via un commentaire conditionnel, supprimer l'image de fond (display: none) pour IE 5-6.

Les commentaires conditionnels et leurs usages sont traités dans la FAQ du forum.
Heu, dans la même idée, moi j'essaie de centrer mon site à la verticale.
Modifié par Florent V. (21 Dec 2007 - 14:55)
C_may a écrit :
Heu, dans la même idée, moi j'essaie de centrer mon site à la verticale.

Chaque site/mise en page est un problème particulier. Merci d'ouvrir un sujet séparé.
Merci beaucoup pour les astuces !

Le centrage marche maintenant très bien et je comprends mieux comment marchent les différents positionnements.

Message reçu pour la fixation de l'image de fond sous IE 5-6, je vais me mettre aux commentaires conditionnels. Mais j'ai une petite question : suis-je obligée de recréer une nouvelle feuille CSS dans son entier pour une seule propriété ?

Je viens de lire sur un autre site :

a écrit :
Par exemple, si une règle #foo {position: fixed} pose un problème et doit être modifiée pour IE5.x-6.0 (pas de support de la position fixe), la seconde feuille de style la réécrira simplement avec la valeur qui convient pour celui-ci: #foo {position: absolute}.

Donc on peut créer une feuille contenant simplement les rectificatifs ?


Et enfin, que veut dire exactement "dégrader" ? C'est juste choisir une autre valeur en conditionnel quand la première ne marche pas, ou ça a un sens plus spécifique ?

Merci encore Smiley smile
Salut,
K'm a écrit :
Et enfin, que veut dire exactement "dégrader" ? C'est juste choisir une autre valeur en conditionnel quand la première ne marche pas, ou ça a un sens plus spécifique ?
C'est bien ça que ça que ça veut dire Smiley cligne
K'm a écrit :
Donc on peut créer une feuille contenant simplement les rectificatifs ?

Oui.

Sinon, on peut la faire en interne (dans le code HTML de la page):
<!--[if lte IE 6]>
<style type="text/css" media="screen">
/* Ici mes deux-trois déclarations CSS pour corriger le style dans IE 5-6 */
</style>
<![ endif ]-->
(Note: il faudra supprimer les espaces du [ endif ], qu'on a rajouté juste pour contourner un comportement problématique de ce forum.)
Me revoilà...

Le site a été transféré à sa place définitive, sur le serveur de l'académie de Créteil. Et... le z-index ne marche plus. #fond passe devant tout le reste et empêche de cliquer sur tous les liens. Je l'ai mis en commentaire pour l'instant, mais vous pouvez toujours le voir ici :

http://ww3.ac-creteil.fr/Lycees/94/hectorberliozvincennes/templates/rhuk_solarflare_ii/css/template_css.css

Je n'avais jamais entendu parler d'un CSS interprété différemment selon les serveurs... help Smiley decu
Bonjour,

img#fond ne s'affiche pas car l'image n'est pas trouvée. Le chemin indiqué est le suivant:
- /templates/rhuk_solarflare_ii/images/fond30.jpg (chemin absolu)
Le chemin correct est un des suivants:
- templates/rhuk_solarflare_ii/images/fond30.jpg (chemin relatif)
- /Lycees/94/hectorberliozvincennes/templates/rhuk_solarflare_ii/images/fond30.jpg (chemin absolu);
- http://ww3.ac-creteil.fr/Lycees/94/hectorberliozvincennes/templates/rhuk_solarflare_ii/images/fond30.jpg (chemin absolu).

En corrigeant le chemin et en décommentant le code CSS, ça a l'air de marcher correctement. Ça ne marchera sans doute pas avec Internet Explorer 6 (qui ne comprend pas position: fixed), mais ça c'est normal. La solution a été indiquée: commentaire conditionnel pour IE6 et inférieurs. Via ce commentaire conditionnel, on peut alors:
- soit ne pas afficher l'image (display: none);
- soit passer en positionnement absolu;
- soit ne pas afficher l'image img#fond, mais appliquer la même image en fond de body.

Cette troisième solution peut donner ceci:
<!--[if lte IE 6]><style type="text/css" media="screen">
img#fond {display: none;}
body {
	background: white url(templates/rhuk_solarflare_ii/images/fond30.jpg) no-repeat fixed center center;
}
</style>
<![ endif ]-->

(Là encore, pas d'espaces autour du «endif».)
Modifié par Florent V. (31 Jan 2008 - 12:12)
Merci... Je n'avais même pas encore essayé de trouver pourquoi l'image ne s'affichait pas, le premier problème étant pour moi que #fond passait au premier plan. Mais avec l'adresse absolue, ça marche.

Et je me suis enfin décidée à installer les standalone d'IE pour tester les commentaires conditionnels, et là aussi ça marche du premier coup ! Ca fait plaisir Smiley smile

Merci encore Smiley smile