OVH Cloud OVH Cloud

Règle CSS en double

21 réponses
Avatar
romer
Hi,

Je viens de découvrir dans une longue feuille de style css que 2
sélecteurs identiques étaient présents :

En simplifiant : on a ligne 10
#nav{padding:0;
width:5em;
color:white;}

et ligne 500 :
#nav{padding:2em;
width:10em;}

Que se passe t-il dans ce cas ?
- est-ce que les déclarations contenus dans les règles se mélangent et
que les déclarations l'emportent sur d'autres ?
- celle située le plus bas l'emporte ?
On aura padding:0 ou padding 2em ?

En faisant des essais, je n'arrive pas à trouver ce qui se passe
vraiment. De plus je n'ai pas IE 6 et 7 - donc je n'ose pas faire de
transformations sans pouvoir vérifier sur ces 2 navigateurs terroristes.

Qu'en pensez-vous, outre le fait qu'évidemment il faille proscrire ce
genre de chose.

Merci
--
A+

Romer

10 réponses

1 2 3
Avatar
romer
Olivier Miakinen <om+ wrote:

> Quel intérêt sinon par oubli de mettre deux sélecteurs identiques plutôt
> qu'un si le 2e écrase le 1er ?

<tétracapilloectomie>



Tout à fait ;-)

Non ! Parce que la propriété background est une propriété raccourcie qui
fixe une valeur à toutes les sous-propriétés qu'elle résume. D'ailleurs
Bernd devrait le savoir, au moins depuis ma réponse à sa question du 5
avril.



Il n'a pas oublié mais dans ce cas, il n'a pas bien fait la relation ni
percuté.

> tr#odd { background: 1px dashed black ;
> width:2em;}
> tr#odd { background: 2px solid ; }
>
> se comporte comme :
>
> tr#odd { background: 2px solid ;
> width:2em;}

Oui, c'est tout à fait normal, cf. supra pour la piqûre de rappel sur ce
qu'est une propriété raccourcie.



C'est un peu ela que j'appelle un mélange des déclarations où alors j'y
perds mon latin.
--
A+

Romer
Avatar
romer
Pierre Goiffon wrote:

> Dans l'exemple précédent, on obtient apparemment :
>
> #nav{padding:2em;
> width:10em;
> color:white;}
>
> Donc, la couleur présente en lg 10 se retrouve au final - ce qui
> contredirait la thèse de l'écrasement pur et simple.

?!!???
Bien sûr que c'est ce que vous obtenez. Pourquoi donc color
disparaitrait alors qu'elle n'est pas redéfinie ??!??



On ne se comprend pas très bien sur les termes : par écrasement,
j'entends replacement d'une règle par une autre avec disparition
complète des déclarations de la 1re au profit de la 2e.

--
A+

Romer
Avatar
Olivier Miakinen
Le 17/04/2008 19:05, Bernd a écrit :

> tr#odd { background: 1px dashed black ;
> width:2em;}
> tr#odd { background: 2px solid ; }
>
> se comporte comme :
>
> tr#odd { background: 2px solid ;
> width:2em;}

Oui, c'est tout à fait normal, cf. supra pour la piqûre de rappel sur ce
qu'est une propriété raccourcie.



C'est un peu cela que j'appelle un mélange des déclarations où alors j'y
perds mon latin.



Revenons-en aux fondamentaux. Au fait, je suppose qu'il fallait lire
« border » et non pas « background » ; je corrige en conséquence.

On a la règle 1 :
tr#odd { border : 1px dashed black ; width : 2em; }

Puis la règle 2 :
tr#odd { border : 2px solid ; }


Je rappelle que les valeurs par défaut de la propriété raccourcie border
sont les suivantes :
{
border-width : medium;
border-style : none;
border-color : (valeur de la propriété color);
}


Maintenant je récris la règle 1 avec uniquement des propriétés
élémentaires (enfin, presque, car je ne détaille pas les côtés top,
right, bottom et left, mais ça ne changerait rien au résultat) :
tr#odd {
border-width : 1px;
border-style : dashed;
border-color : black;
width : 2em;
}

Pareil pour la règle 2 :
tr#odd {
border-width : 2px;
border-style : solid;
border-color : (valeur de la propriété color);
}


Au final, les propriétés border-width, border-style et border-color sont
*définies* par la règle 2 (oui, *même* border-color), tandis que width
est définie par la règle 1. Cela donne :
tr#odd {
border-width : 2px;
border-style : solid;
border-color : (valeur de la propriété color);
width : 2em;
}

Soit, en propriétés raccourcies :
tr#odd { border : 2px solid ; width : 2em; }
Avatar
Olivier Miakinen
Le 17/04/2008 21:47, j'écrivais :

tr#odd {
border-width : 1px;
border-style : dashed;
border-color : black;
width : 2em;
}

tr#odd {
border-width : 2px;
border-style : solid;
border-color : (valeur de la propriété color);
}



À tout hasard, et pour qu'il devienne évident que c'est comme ça qu'on
doit le comprendre et pas autrement, les deux règles ci-dessus sont
strictement équivalentes aux sept règles ci-dessous :

tr#odd {
border-width : 1px;
}
tr#odd {
border-style : dashed;
}
tr#odd {
border-color : black;
}
tr#odd {
width : 2em;
}
tr#odd {
border-width : 2px;
}
tr#odd {
border-style : solid;
}
tr#odd {
border-color : (valeur de la propriété color);
}


Elles sont donc aussi équivalentes à :

tr#odd {
border-width : 1px;
}
tr#odd {
border-width : 2px;
}
tr#odd {
border-style : dashed;
}
tr#odd {
border-style : solid;
}
tr#odd {
border-color : black;
}
tr#odd {
border-color : (valeur de la propriété color);
}
tr#odd {
width : 2em;
}


Et à :

tr#odd {
border-width : 1px;
border-width : 2px;
}
tr#odd {
border-style : dashed;
border-style : solid;
}
tr#odd {
border-color : black;
border-color : (valeur de la propriété color);
}
tr#odd {
width : 2em;
}


Et à :

tr#odd {
border-width : 2px;
}
tr#odd {
border-style : solid;
}
tr#odd {
border-color : (valeur de la propriété color);
}
tr#odd {
width : 2em;
}


Et à :

tr#odd {
border-width : 2px;
border-style : solid;
border-color : (valeur de la propriété color);
width : 2em;
}


Et donc à :

tr#odd {
border : 2px solid;
width : 2em;
}


Je pense que ça devrait être plus clair ainsi, non ?
Avatar
Pierre Goiffon
Bernd wrote:
#nav{padding:2em;
width:10em;
color:white;}





On ne se comprend pas très bien sur les termes : par écrasement,
j'entends replacement d'une règle par une autre avec disparition
complète des déclarations de la 1re au profit de la 2e.



Ca n'aurait pas de sens.
Considérez ce html :

<div class="toto">
<p id="nav">...</p>
</div>

Et ces sélecteurs :

#nav
{
color: white;
padding: 1em;
}

.toto #nav
{
color: white;
}
Avatar
romer
Olivier Miakinen <om+ wrote:

...

Et donc à :

tr#odd {
border : 2px solid;
width : 2em;
}


Je pense que ça devrait être plus clair ainsi, non ?



C'est clair de chez clair ;-) Merci.
Et au final, c'est logique quand on sait que la valeur de la propriété
située en aval écrase celle d'amont et s'ajoute si l'une d'elle n'existe
pas.
--
A+

Romer
Avatar
romer
Olivier Miakinen <om+ wrote:

Maintenant je récris la règle 1 avec uniquement des propriétés
élémentaires (enfin, presque, car je ne détaille pas les côtés top,
right, bottom et left, mais ça ne changerait rien au résultat) :
tr#odd {
border-width : 1px;
border-style : dashed;
border-color : black;
width : 2em;
}

Pareil pour la règle 2 :
tr#odd {
border-width : 2px;
border-style : solid;
border-color : (valeur de la propriété color);
}


Au final, les propriétés border-width, border-style et border-color sont
*définies* par la règle 2 (oui, *même* border-color), tandis que width
est définie par la règle 1. Cela donne :
tr#odd {
border-width : 2px;
border-style : solid;
border-color : (valeur de la propriété color);
width : 2em;
}



C'est clair (me semble t-il) : quand 2 propriétés sont identiques avec
valeurs différentes (comme width:2px et width:3px) c'est la 2e qui
l'emporte par écrasement. Si une propriété est unique , elle est
conservée.
Ça correspond à des essais (non exaustifs) que j'avais faits.
--
A+

Romer
Avatar
Thierry B.
--{ Bernd a plopé ceci: }--

C'est clair (me semble t-il) : quand 2 propriétés sont identiques avec
valeurs différentes (comme width:2px et width:3px) c'est la 2e qui
l'emporte par écrasement. Si une propriété est unique , elle est
conservée.



C'est pas en gros la description du C de CSS ?


--
Non. Ça avait été fufé lors de l'AAD1.
Personne n'ayant été capable de présenter des arguments d'opposition sur le
fond, ce sont donc les mouches qui en ont fait les frais une nouvelle fois.
Avatar
Olivier Miakinen
Le 18/04/2008 15:21, Thierry B. a écrit :

C'est clair (me semble t-il) : quand 2 propriétés sont identiques avec
valeurs différentes (comme width:2px et width:3px) c'est la 2e qui
l'emporte par écrasement. Si une propriété est unique , elle est
conservée.



C'est pas en gros la description du C de CSS ?



Précisément. C'est la toute dernière des règles de cascade, celle que
l'on applique lorsque aucune des autres n'a réussi à trancher.
Avatar
Andreas Prilop
On Fri, 18 Apr 2008, Olivier Miakinen wrote:

C'est la toute dernière des règles de cascade, celle que
l'on applique lorsque aucune des autres n'a réussi à trancher.



Pour quelques exemples, voir
http://www.unics.uni-hannover.de/nhtcapri/cascading-order.html

--
In memoriam Alan J. Flavell
http://niwo.mnsys.org/saved/~flavell/charset/
1 2 3