Etrange ce truc, j'ai investigué
Alors j'ai trouvé une référence et un début d'explication de tout de brol dans le code source de Gecko
Ça a avoir avec les propriétés *-left et *-right, la cascade, la gestion de la direction du texte (donc gauche à droite, ou droite à gauche pour les langues genre arabe et tout). J'ai pas réussi par contre à faire afficher de -rtl-source tout le temps, j'ai dû utiliser un -moz-margin-start pour que ça apparaisse.
Alors ce que j'ai pigé, c'est que les propriété -ltr-source ou -rtl-source ne sont que des trucs à usage interne, impossible de les définir dans son propre CSS (même avec !important et tout)
Donc je les ai fait apparaître avec le code suivant :
Code :
<!DOCTYPE html>
<style>
#the-id {
-moz-margin-start: 100px;
}
.the-class {
margin-right: 50px;
}
</style>
<div id="the-id" class="the-class" dir="rtl">
Pouet
</div>
|
Un div avec direction rtl pour voir, et 2 règles dessus, qui vont forcer le navigateur à cascader (donc trouver quelle règle appliquer lorsqu'il y a conflit).
Déjà un mot sur -moz-margin-start. Quand on met par exemple une marge à gauche, quand on inverse la direction du texte, elle reste à gauche. Pas cool, on voudrait sûrement qu'elle s'inverse aussi et se mette à droite. Du coup ils ont inventé les concepts de *-start et *-end, qui s'inversent automatiquement. Genre -moz-margin-start sera mappé sur margin-left si gauche à droite, et mappé sur margin-right si droite à gauche.
Alors revenons à notre cascade. Là j'ai mis une marge droite sur la classe. Et une marge start sur l'id. Alors comme je suis en direction droite à gauche, le marge start sera utilisé (on aura une marge à droite de 100px). Ok super logique, mais d'où sort alors ce rtl-source bidule là
C'est en fait uniquement à usage interne. Lorsque gecko rencontre un -start, il regarde la direction du texte, et définit la propriété *-source pour que lors du calcul de la cascade, il sait quelle propriété utiliser.
Donc il va se passer tout ça (partont de la classe pour simplifier) :
- Ha ! Une classe s'applique à notre élément, avec marge droite 50px
- Hé ! Voyons si y'a d'autres règles avec plus de poids
- Hi ! Un id aussi, ça a donc plusse de poids
- Ho ! Voyons si la marge droite est écrasé par cette règle avec id
- Hu ! Je vois que la propriété margin-right-rtl-source est définie, avec pour valeur logical ! Donc je dois regarder non pas dans margin-right, mais -moz-margin-start
- Hy ! Y'a bien un -moz-margin-start, dans l'id, ça a plusse de poids, alors je prend celui-là
Alors si dans Firebug vous modifiez logical en physical, là il ne prend pas -moz-margin-start, mais margin-right... qui n'est pas définie dans la règle avec id, donc il garde la valeur qu'on trouve dans la règle avec classe (50px).
Voilà