28220 sujets

CSS et mise en forme, CSS3

Salut,

Je suis face à un problème assez étrange dont je n'arrive pas à trouver la solution (c'est pas faute d'avoir cherché sincerement...)
Pour expliquer de façon théorique :
Pour moi le css, est par définition "style en cascade" ce qui implique que l'on peut imbriquer des styles.
J'utilise des classes pour ma mise en forme. Et voila en gros ce que je fais :
Classe1 h1 <-- un style (par exemple fond en rouge)
classe1 classe2 h1 <--- un autre style (fond en bleu).
Donc logiquement si je fais un div ayant pour classe classe1 et que je met un h1 à l'interieur il sera rouge. Si dans ce div je met un div classe 2 avec un h1 à l'interieur, il doit etre bleu.
Bon, dans un exemple bateau ca marche, mais dans mon code ça ne marche pas et pas moyen de mettre la main sur ce qui fait foirer tout ca...
Pourriez vous me filer un coup de patte svp ?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<style type="text/css">		
		@import url(V2/themes/freeplayer/css/layout/index.css);
		@import url(V2/themes/freeplayer/css/layout/bloc.css);
		@import url(V2/themes/freeplayer/css/modules/mod_news.css);
	</style>
</head>
<body>
			<div class="modindex">
				<h1>News</h1>
				<div class="contenu">
					<div class="news">
						<h1>La V2 arrive</h1>
						<div class="dateauteur">
							<h2>Par <b>untel</b>, le 29-09-2005 16:18:57</h2>
						</div>
						<div class="contenu">
							Voici un petit aper&ccedil;u de la V2<br />
						La charte graphique n'est pas encore termin&eacute;e mais &ccedil;a ne saurait tarder.<br />
						Enjoy
						</div>
						<div class="commentaires">
							<h3>
0 commentaire (<a href="index.php">Poster un commentaire</a>
/<a href="index.php">Lire les commentaires</a>).
</h3>
						</div>
					</div>
				</div>
				<div class="pied">
					&nbsp; 
				</div>
			</div>
</body>
</html>


et le css (je n'ai mis que ce qui etait interressant) :


.news {
	padding : 0 0 10px 0;
}

.news h1 {
	font-family: verdana;
	font-size: 12px;
	height: 19px;
	padding : 3px 0 0 10px;
	margin-top: 0px;
	margin-bottom: 0px;
	background-color: #EAD;
}

.modindex h1 {
	font-family: verdana;
	font-size: 12px;
	color: white;
	height: 54px;
	padding : 3px 0 0 7px;
	margin-top: 0px;
	width: 500px;
	margin-bottom: 0px;
	background-image: url("../../images/boite_droite_haut.gif");
	background-repeat: no-repeat;
}


Voili voilou Smiley lol
Merci d'avance !
@ bientot
Modifié par zax-tfh (11 Oct 2005 - 23:52)
Salut,

Je pense etre sur la voie mais ca me parait tout de meme louche...
En gros, il conserve l'attribut background-image.
Si je force le h1 avec l'attribut background-image: none; là ça passe...
Bizarre bizarre... je suis pourtant dans deux classes différentes...quoi que dans deux div imbriqués... y'a un truc qui m'echappe là...

Merci d'avance si vous avez une explication car j'ai beau fouiner partout je ne trouve pas d'explication...
Plop,

le 2e H1 répond aux 2 régles, il prend donc les attributs des 2.

Dans ton cas, l'idéal serait de passer ton 2e h1 en h2 et ainsi de suite vu qu'il n'a pas la même importance que le premier à mon sens.
Bonjour,

Deux difficultés ici, à revoir :

La première est la notion de cascade et de priorité selon la spécificité du sélecteur :
- les deux sélecteurs .modindex h1 et .news h1 sont en concurrence sur le deuxième titre h1 : ce titre est tout simplement contenu simultanément dans les deux classes.
- les deux sélecteurs sont de même spécificité (classe + élément = 0011). Dès lors :
* en cas de propriétés différentes, elles se combinent
* en cas de propriétés identiques, celles du dernier sélecteur dans l'ordre de la CSS vont l'emporter

Voir à ce sujet http://openweb.eu.org/articles/cascade_css/

La seconde est la notion de background : un background-color et un background-image sont deux propriétés différentes susceptibles de se combiner, et non de se contrarier.

Voir à ce sujet http://openweb.eu.org/articles/background_css/

Ici , le background-image de .modindex h1 se combine tout à fait normalement aux autres propriétés de .news h1 : l'image et la couleur de fond apparaissent toutes deux, dans la mesure où les dimensions de la boîte concernée le permettent. Sinon, seule l'image est visible, puisqu'elle se place en avant de la couleur de fond.

Pour l'éviter, il faut effectivement annuler ce background-image dans .news h1, en veillant cependant :
- soit à un ordre plus pertinent des sélecteurs : le plus spécifique après le plus générique,
- soit à définir des sélecteurs plus précis: .modindex .news h1 (spécificité = 0021) plutôt que .news h1 (spécificité 0011)
Modifié par Laurent Denis (12 Oct 2005 - 07:58)
Merci pour vos indications, c'est ce que j'avais cru comprendre au fil du temps en faisant mes essais...

Va falloir que je reflechisse pour gérer mieux mes classes css car mon projet étant modulaire, il ne faut pas que les developpeurs de modules n'utilisent les balises dont je me sers...

Encore merci
++