28220 sujets

CSS et mise en forme, CSS3

Salut,

Sur la nouvelle mise en page de mon site perso, j'ai des problèmes sous IE, qui semblent liés aux marges.
Je n'arrive pas à trouver la source du problème :
- en page d'accueil, en bas de page, le titre de section "portfolio" est centré (et non aligné avec la bordure rouge au dessus, comme il devrait l'être). De plus, le rollover sur un des liens du portfolio provoque un décalage vers la gauche.
- problèmes similaires sur la page "articles" lorsqu'on survole un élément du menu de droite et sur "portfolio" lorsqu'on survole un item dans la page portfolio ou un item du menu de droite lorsqu'un boulot est affiché

Apparemment il y a un rapport avec hover, mais je n'arrive vraiment pas à trouver. Smiley sweatdrop Smiley confus
Merci Smiley smile
Modifié par Marvin Le Rouge (27 Jul 2005 - 17:27)
Marvin Le Rouge a écrit :
Salut,

Sur la nouvelle mise en page de mon site perso, j'ai des problèmes sous IE, qui semblent liés aux marges.
Je n'arrive pas à trouver la source du problème :
- en page d'accueil, en bas de page, le titre de section "portfolio" est centré (et non aligné avec la bordure rouge au dessus, comme il devrait l'être). De plus, le rollover sur un des liens du portfolio provoque un décalage vers la gauche.


Décidément, c'est la semaine du IE Three Pixel Text-Jog : tu es le troisième à butter dessus depuis quelques jours Smiley lol

Bref, c'est un bug d'IE lié aux flottants. Une largeur pour ton titre, ou éventuellement une hauteur fictive réservée à IE, règle le problème.
Modifié par Laurent Denis (26 Jul 2005 - 15:18)
Voilà la différence entre un pro et un bleu !
Merci Brocolis !
(Apprendre de ses erreurs, c'est bien; apprendre aussi de celles de ses prédécesseurs: c'est mieux Smiley cligne )
Modifié par g41687 (26 Jul 2005 - 15:28)
Tiens, pourtant ce titre n'est pas flottant Smiley confus
Ceci dit, il y a bien un flottant au contact à chaque endroit qui part en vrille.
Je teste ça ce soir ou demain et je vous dis le résultat.
Marvin Le Rouge a écrit :
Tiens, pourtant ce titre n'est pas flottant Smiley confus


ce n'est pas l'élément flottant qui génère le bug et sur lequel on voit ces 3 pixels. C'est l'élément en flux qui vient se placer à côté de lui, ou en dessous de lui.

Cela dit, je n'ai pas regardé le détail, mais simplement vérifié que la solution caractéristique de ce bug était effective : en cherchant, peut-être vas-tu trouver une variante du hree Pixel Text-Jog Smiley cligne
J'ai trouvé la/une soluce du problème, mais là c'est du surréaliste (comme tous les bugs css ie d'ailleurs).
Apparemment, aucun rapport avec les float (ou alors c'est tordu, ce qui ne m'étonnerait qu'à moitié)
J'ai un bloc A qui fait 760px de large. Il contient un bloc B sans largeur spécifiée, mais avec 1% de padding en haut, et 2% sur les côtés. Quand je laisse ces valeurs là, j'ai la barre h2 sur la page d'index qui est centrée, ainsi que les décalages surles différentes pages.
Si je remplace 1% 2% par 8px 15px, ce qui devrait théoriquement être la même chose, puisque le conteneur fait 760px de large (ce qui donne 7.6px et 15.2px), le problème disparait sur toutes les pages.
g41687 a écrit :
Merci Brocolis !


Tiens, c'est la semaine des trompages de nom aussi Smiley langue
C'est le 2eme qui te dis ça cette semaine ^^

Le mÔssieur avec un brocoli ne s'appelle pas brocoli, mais Laurent (Denis).
Brocoli c'est son avatar et sa "citation", c'est comme si tu m'appelais "Modérateur méchant" Smiley smile
Olivier a écrit :

Brocoli c'est son avatar et sa "citation", c'est comme si tu m'appelais "Modérateur méchant" Smiley smile


D'ailleurs, je viens de passer en mode méchant.

(Excellent, le double avatar, Olivier Smiley cligne )
Marvin Le Rouge a écrit :

J'ai un bloc A qui fait 760px de large. Il contient un bloc B sans largeur spécifiée, mais avec 1% de padding en haut, et 2% sur les côtés. Quand je laisse ces valeurs là, j'ai la barre h2 sur la page d'index qui est centrée, ainsi que les décalages surles différentes pages.
Si je remplace 1% 2% par 8px 15px, ce qui devrait théoriquement être la même chose, puisque le conteneur fait 760px de large (ce qui donne 7.6px et 15.2px), le problème disparait sur toutes les pages.


Curieux. Je déclare forfait pour ce soir, mais ça me titille d'y regarder de près demain Smiley cligne
Il y a une histoire d'arrondi plus ou moins bien fait (au sens mathématique) je crois.

Genre, 7.6 sera interprété 7 ou 8 en fonction de l'arrondi (mathématique => 8, brocoli => 7)

Je crois que Raphaël en avait parlait sur le blog.
Ben oui mais là c'est pas ça : entre la version % et la version px, il y a un décalage de 5px, un centrage qui apparait, des hover qui se décalent.
Ca fait un peu beaucoup quand même.
Marvin Le Rouge a écrit :
Ben oui mais là c'est pas ça : entre la version % et la version px, il y a un décalage de 5px, un centrage qui apparait, des hover qui se décalent.
Ca fait un peu beaucoup quand même.


Désolé, j'avoue j'ai pas lu le début du topic Smiley langue
C'était une piste.

Autre piste : jetter IE à la poubelle (sifflote)

/me d'humeur rieuse ce soir...
/me autorise Marvin à l'insulter Smiley smile
Modifié par Olivier (26 Jul 2005 - 23:59)
Il n'y avait effectivement aucun rapport avec le bug que je citais, si ce n'est que la même solution (une hauteur fictive) est applicable.

Maintenant, de quel bug s'agit-il ? Ah... Ce fichu calcul des largeurs dans IE !

On sait qu'IE n'implémente pas correctement la propriété width en flux :
- selon CSS2, une largeur en px est impérative : le contenu doit "tenir dedans"
- pour IE, cette largeur est indicative : le bloc concerné va s'étendre en largeur en fonction de son contenu.

FF, Opera, etc. considèrent donc que ton conteneur fait 760px de large, et calculent le 2% de padding latéraux en conséquence : le padding gauche fait bien 15px. Chacun de tes titres s'aligne à gauche en fonction de ce padding et de sa propre marge éventuelle. Tout va bien.

IE, lui, considère que la largeur du conteneur est indéterminée tant que celle du contenu n'a pas été calculée. Il passe donc au calcul de largeur du contenu... c'est à dire aux 2% de padding latéraux... Et se retrouve à devoir calculer 2% de quelque-chose d'indéterminé. Gasp ! Smiley eek

Pour ne pas devenir totalement schizophrène, notre brave IE s'en sort avec une amusante pirouette : il saute une génération. Le 2% sera calculé avec la largeur du grand parent, et non du parent. On peut se demander pourquoi, tout à coup, la largeur du grand parent devient brusquement déterminé, alors que la logique d'IE voudrait qu'elle n'ait pas encore été calculée... Disons que les concepteurs d'IE ont sans doute estimé, à ce stade, que c'était déjà bien assez surréaliste comme cela... Pour tout dire, cela sent un peu le patch appliqué à la hâte par des développeurs coincés et pressés de bâcler le boulot dans les temps.

Ici, le grand-parent est la boîte générée par l'élément <body>, qui s'étend à tout le conteneur initial. Autrement-dit, la largeur de la zone d'affichage du navigateur. Bilan des courses :
- le padding-left de ton conteneur dans IE est égal à 2% de la largeur de la zone d'affichage, et non à 2% de 760px
- Et les 760px sont étendus en conséquence Smiley lol

Le fait que ton conteneur ne fasse pas 760px affichés dans IE ne se remarque presque pas, car tes pourcentages sont très petits. La différence devient évidente si tu passe à 10% de padding.

Voici une page test qui résume la chose, et ce qui suit, avec des valeurs qui mettent plus en évidence ce qui se passe :

(#nowidth correspond à ton #articlesTitre, et #width à ton #portfolioTitre)

#conteneur {
width : 500px;
}
#contenu {
padding : 0 10%;
background: #007fff; 
}
#nowidth {
background : yellow;
}
#width {
background : #7cff00;
width : 300px;
}
#temoin1 {
background: red;
width: 50px;
}
#temoin2 {
background: red;
width: 500px;
}

et le HTML:


<div id="conteneur">
   <div id="contenu">
      <div id="nowidth">Sans largeur spécifiée</div>
      <div id="width">width : 400px;</div>
   </div>

   <div id="temoin1">50px</div>
   <div id="temoin2">500px</div>
</div>


Nous avons donc dans IE un conteneur doté d'une largeur et d'un padding left variables selon la taille de la fenêtre du navigateur : contrairement à ce que tu prévoyais, ce padding ne fera pas 15px, mais un peu plus, environ 20px. Voilà déjà le pourquoi de tes quelques pixels supplémentaires Smiley cligne

Mais... Me diras-tu : pourquoi est-ce que tous mes <h2> ne s'alignent-ils pas à gauche sur ce padding de 20px ? Pourquoi juste celui du #portfolioTitre, hein ? Smiley eek

Bonne question Smiley langue Là, j'avoue que le comportement d'IE devient indéchiffrable Smiley confuse . En effet, quand on regarde de près, on voit:
- qu'IE aligne bel et bien toutes les boîtes de <h2> sur ce padding gauche de 20px. On voit nettement si on utiliser une valeur de 10% à la place du 2% que le texte de chaque élément commence bien à la même distance du bord gauche du conteneur, plus grande dans IE que dans les autres navigateurs (les boîtes jaune et verte de la page test)
- Mais IE étend vers la gauche le padding de tes <h2> qui n'ont pas de largeur fixée par la CSS, afin de coller à la valeur de padding du conteneur qui sera la bonne selon CSS2 ! (la boîte jaune de la page test)
- Et n'étend pas vers la gauche le padding du <h2> #portfolioTitre qui a une largeur indiquée dans la CSS (la boîte verte de la page test)... Smiley rolleyes

Du coup, cela donne l'impression que le premier <h2> #articlesTitre est correctement placé, comme dans les autres navigateurs, et pas le second. En fait, aucun des deux <h2> n'est placé comme tu le souhaitais Smiley biggol

Bon... Je vais prendre une petite aspirine, moi...

<edit>Pour les curieux, la lecture de http://www.positioniseverything.net/explorer/percentages.html est une bonne base de départ si on veut explorer l'univers fantasmagorique des dimensions calculées par IE.
En fait, il faut se dire que, contrairement aux apparences, IE6.0 fait systématiquement n'importe quoi avec votre CSS. A tel point qu'IE5.5 fait parfois mieux Smiley lol
Quand je pense au prochain IE7... Je tremble.
Modifié par Laurent Denis (27 Jul 2005 - 09:10)
Olivier a écrit :

Autre piste : jetter IE à la poubelle (sifflote)

C'est ce que je conseille généralement aux gens qui me demandent des conseils concernant leur navigation internet.

Olivier a écrit :

/me d'humeur rieuse ce soir...
/me autorise Marvin à l'insulter Smiley smile

Espèce de Totoro neurasthénique Smiley rofl
Laurent Denis a écrit :
Il n'y avait effectivement aucun rapport avec le bug que je citais, si ce n'est que la même solution (une hauteur fictive) est applicable.

// Texte générateur de dilatation brutale de l'encéphale supprimé pour cause de limitation du volume interne de la boîte cranienne


Juste histoire de te rendre un peu plus dingue : l'application d'une hauteur à cet élément ne change rien au problème (IE6). Smiley biggol
si si, appliqué à tous les <h2> (pas à #portfolioTitre), un height: 1% leur fait adopter à tous le même comportement (toujours faussé, mais au moins identique chez tous Smiley lol )
Arf oui vu comme ça Smiley smile
Enfin bref ça reste un navigateur Infiniment Etonnant (comment ça vous pensiez à un autre adjectif en E ? Mais lequel donc ? Smiley rolleyes )
Tiens, une autre solution toute bête qui te permet de garder tes 1% 2% de padding :


[b]<div style="width: 760px;">[/b]
   <div id="conteneur">
      ...
   </div>
</div>


Au lieu de se baser sur la largeur de la zone d'affichage pour calculer le bitonio, IE se basera sur la largeur de ce nouveau grand-parent, c'est à dire les 760px souhaités. Les autres navigateurs ne changeront rien à leur comportement...