28172 sujets

CSS et mise en forme, CSS3

Salut,

J'essaie de me faire un ch'tit site web, et je rencontre quelques petits soucis avec la création de ma feuille de style, ce qui m'énerve passablement, ayant l'impression de perdre mon temps sur la présentation alors que je préfèrerais améliorer le contenu, mais bref.

Voilà le souci : je crée un bloc « panel » fixe, qui va me servir à gérer les menus, à gauche de l'écran. Jusqu'ici tout va bien. Je fixe sa hauteur à 100% de celle de la page. À l'intérieur de ce panel, je crée un bloc « menu ». Je voudrais le placer à une certaine hauteur dépendant de la taille de la page. Par exemple, je veux le faire disparaître de la page, en lui faisant une marge haute de 100% de la taille du bloc « panel » (je sais, c'est un peu con-con, mais évidemment c'est juste pour les besoins de la démonstration).

Et là, c'est le drame : les 100% ne correspondent pas à la hauteur du « panel », mais à sa largeur !!! Smiley eek

Je précise que l'effet est le même sous Firefox 3 et sous Opera 9.5. J'ai raté quelque chose ??

Un exemple simple :

<head>
  <style type="text/css">
	  div.panel
	  {
		position:	fixed;
		left:		0;
		top:		0;
		width:		30%;
		height:		500px;
		border-style:	solid;
		border-width:	1px;

	  }
	  div.menu
	  {
		  margin-top:	100%;
		  height:	200px;
		  border-style:	solid;
		  border-width:	1px;
	  }
	  div.main
	  {
		  position:	fixed;
		  right:	0;
		  width:	70%;
		  height:	600px;
		  border-style:	solid;
		  border-width:	1px;
	  }
  </style>
</head>
<body>
	<div class="panel">
		<div class="menu">
		</div>
	</div>
	<div class="main">
	</div>
</body>


Merci.

PS : Oui, j'utilise des feuilles de style séparées, là c'est juste pour faire simple.
PPS : Et quelqu'un peut me dire pourquoi dans AUCUN tuto ou cours CSS, il est expliqué qu'en CSS, la largeur réelle de la page n'est pas 100%, mais 100% PLUS les bordures, les marges et les paddings ??
Modifié par ze_Morlock (03 Aug 2008 - 19:11)
Bonjour,

ze_Morlock a écrit :
Et là, c'est le drame : les 100% ne correspondent pas à la hauteur du « panel », mais à sa largeur !!!

J'ai failli te répondre que c'était impossible, mais ça semble être le cas avec Firefox 3 au moins.
Je n'avais jamais rencontré ce comportement. Sans doute parce que je n'avais jamais utilisé de margin-top ou margin-bottom en pourcentages (un peu casse-gueule, même sans prendre en compte ce comportement étrange).

La seule chose que je peux te conseiller, c'est de ne pas utiliser de margin-top en pourcentages pour un enfant d'un bloc positionné en absolu ou en fixe. Il y a peu de chances que ça soit nécessaire pour un design.

ze_Morlock a écrit :
PPS : Et quelqu'un peut me dire pourquoi dans AUCUN tuto ou cours CSS, il est expliqué qu'en CSS, la largeur réelle de la page n'est pas 100%, mais 100% PLUS les bordures, les marges et les paddings ??

Ça s'appelle le modèle de boite CSS, et c'est expliqué dans des milliers de pages web en toutes langues, y compris le français. En premier chef, bien entendu, dans la spécification CSS 2 (dont il existe une traduction française). Voir par exemple:
http://www.yoyodesign.org/doc/w3c/css2/box.html
http://edu.ca.edu/article258.html
http://blog.alsacreations.com/2006/10/23/296

Tu as dû louper l'information. Smiley cligne

PS: attention au positionnement fixe. Ce n'est pas compatible IE6, et c'est assez délicat à gérer même quand ça marche.
Florent V. a écrit :
J'ai failli te répondre que c'était impossible, mais ça semble être le cas avec Firefox 3 au moins.
Ben ce qui m'étonne c'est qu'avec Opera aussi, d'où l'idée du bug généralisé…

Florent V. a écrit :
Je n'avais jamais rencontré ce comportement. Sans doute parce que je n'avais jamais utilisé de margin-top ou margin-bottom en pourcentages (un peu casse-gueule, même sans prendre en compte ce comportement étrange).

La seule chose que je peux te conseiller, c'est de ne pas utiliser de margin-top en pourcentages pour un enfant d'un bloc positionné en absolu ou en fixe. Il y a peu de chances que ça soit nécessaire pour un design.
C'était pour avoir une barre de menu étirable en hauteur, histoire que ça se ressemble d'une résolution à l'autre et de pas avoir un gros trou quelque part, mais bon. On va faire autrement…

Florent V. a écrit :
Ça s'appelle le modèle de boite CSS, et c'est expliqué dans des milliers de pages web en toutes langues, y compris le français. En premier chef, bien entendu, dans la spécification CSS 2 (dont il existe une traduction française). Voir par exemple:
http://www.yoyodesign.org/doc/w3c/css2/box.html
http://edu.ca.edu/article258.html
http://blog.alsacreations.com/2006/10/23/296

Tu as dû louper l'information. Smiley cligne
En fait c'est jamais clairement expliqué quand on lit les tutos en diagonale parce qu'on a ni le temps ni l'envie de devenir un spécialiste du CSS, mais qu'on cherche juste des réponses rapides aux questions qu'on se pose. Alors ça surprend un peu quand tu fais deux zones, genre 30 et 70%, et que ça déborde dans tous les sens…

Sauf dans ton deuxième lien, limpide, merci. Dommage que les gens qui font les specs du CSS n'aient pas pensé que ç'eut pu être pratique de pouvoir choisir entre les deux modèles de boîtes, en jouant avec +/- par exemple.

Florent V. a écrit :
PS: attention au positionnement fixe. Ce n'est pas compatible IE6, et c'est assez délicat à gérer même quand ça marche.
C'est juste pour ma barre de menu, celui du block « main » n'a rien à faire là, c'est un oubli. Smiley cligne
Modifié par ze_Morlock (03 Aug 2008 - 18:32)
ze_Morlock a écrit :
Sauf dans ton deuxième lien, limpide, merci. Dommage que les gens qui font les specs du CSS n'aient pas pensé que ç'eut pu être pratique de pouvoir choisir entre les deux modèles de boîtes, en jouant avec +/- par exemple.

Je crois que c'était prévu en CSS3, mais je ne suis pas sûr que ça ait été gardé.

Pour contourner ce problème:
- si tu utilises des éléments positionnés en absolu (ou en fixe), ça ne devrait pas poser de problème car tu n'as alors plus qu'à utiliser à la fois left et right, et à rester en width: auto, pour dimensionner les blocs... tu peux ensuite rajouter du padding, des bordures, etc., qui seront retranchés à l'intérieur;
- avec des flottants, ça peut être plus gênant... la technique employée consiste généralement à utiliser les enfants du bloc flottant (ça peut être un enfant unique) pour placer des bordures et du padding.
Ok, merci pour les conseils. Mais je n'ai plus trop de soucis avec ça, une fois qu'on est au courant on fait avec, c'était juste surprenant au début. Et ce serait bien qu'ils aient ça en CSS3 effectivement, parce que ça peut quand même être plus pratique pour certains cas…

Et pour en revenir au problème initial, en fait c'est le comportement prévu par les spécifications… J'aimerais bien savoir ce qu'ils avaient fumé ce jour là. Smiley rolleyes

Donc je vais me débrouiller autrement. Merci ! Smiley smile