5177 sujets

Le Bar du forum

Pages :
Salut, je serais bien interessé d'acheter le livre « CSS2 Pratique du design web ». J'ai cependant une interrogation: est-ce que le livre contient une section où avec des "hacks" pour les différents navigateurs? On sais tous que si notre site affiche correctement en Firefox, il se peut qu'il ne soit pas correct sous IE. J'aimerais donc savoir si il y aura une liste de ces fameux "hack" dans le livre.

Merci
Modifié par oxEz (04 Jul 2005 - 20:56)
S'il vous plait, il y a plein de topic au sujet du livre...

Si pour chaque question on crée un nouveau , c'est le big bordel ... Smiley ohwell

Quant à ta question : non il n'y en a pas, mais les techniques présentées sont justement faites pour qu'il n'y en ait pas besoin Smiley smile

Avec l'expérience (celle de raphael par exemple Smiley langue ) on se passe très bien des hack.
Administrateur
Salut oxeZ et bienvenue ici Smiley smile

Cette question a déjà été posée par un membre et je lui donne mon opinion à ce sujet.
J'espère qu'elle te conviendra aussi.

Sinon, tu as, dans les Ressources du forum des liens vers les listes de hacks CSS :
- http://centricle.com/ref/css/filters/ : l'ensemble des hacks CSS et leur reconnaissance par les navigateurs
http://www.westciv.com/style_master/academy/browser_support/selectors.html : l'ensemble des supports navigateurs pour CSS2
- http://imfo.ru/csstest/css_hacks/import.php : masquer les feuilles de styles en utilisant @import et ses interprétations.
- http://w3development.de/css/hide_css_from_browsers/summary/ Techniques pour cacher les feuilles de styles

Bonne continuation parmi nous Smiley smile


PS : je déplace ton sujet dans le Bar, où il a plus sa place Smiley cligne
Ok merci pour vos deux réponses :]

PS: lorsqu'on utilise * html div#menu { } par exemple, est-ce considérer comme un "hack" ou non?
Je ne sais pas précisément, mais il me semble que tous les navigateurs interprètent le sélecteur universel *

donc je ne pense pas Smiley smile
Administrateur
oxEz a écrit :
Ok merci pour vos deux réponses :]

PS: lorsqu'on utilise * html div#menu { } par exemple, est-ce considérer comme un "hack" ou non?

Non c'est simplement une déclaration de sélecteurs en utilisant l'arborescence.

Ici tu sélectionnes : l'élément ayant pour id "menu", contenu dans un élément div, contenu dans l'élément <html> contenu dans le sélecteur universel.

Ce n'est pas un hack même si Ie ne reconnait pas cette forme de déclaration, si mes souvenirs sont bons, en raison du sélecteur universel contenu dans une arborescence.
Modifié par Raphael (03 Jul 2005 - 21:35)
Ha, apparement je me suis planté ie ne reconnait pas Smiley smile

Un hack ultra classque :

pour ie (et autre, mais comme il comprendra la suivante, il va "oublier" celle ci)

#id (bête exemple)

et pour tous, sauf ie :

html > body #id

car le sélecteur enfant n'est pas compris.
Raphael a écrit :

Non c'est simplement une déclaration de sélecteurs en utilisant l'arborescence.

Ici tu sélectionnes : l'élément ayant pour id "menu", contenu dans un élément div, contenu dans l'élément <html> contenu dans le sélecteur universel.

Ce n'est pas un hack même si Ie ne reconnait pas cette forme de déclaration, si mes souvenirs sont bons, en raison du sélecteur universel contenu dans une arborescence.


Pourrait-on arrêter les fantaisies deux secondes ?

l'élément <html> contenu dans le sélecteur universel ... Rien ne te choque, là ?

* hmtl est non seulement un hack, mais surtout un hack reposant sur :
- une syntaxe aberrante : l'élément html ne peut être contenu dans aucun autre, étant l'élément racine
- un bug d'IE qui n'ignore pas ce sélecteur dénué de sens, comme il le devrait, et comme le font les autres navigateur (d'où le hack permettant de faire passer une règle à IE)

<edit>
ça ne rend pas ce hack particulièrement infâme. ça le rend simplement très fragile, puisque:
- l'erreur d'IE est vraiment très grossière et a donc de fortes chances d'être corrigée par sa prochaine version
- mais rien ne garantit que le bug que vous tentez de contourner à l'aide de ce hack (box model, height, bugs sur les float, etc) le sera au même moment.

Raphaël: tu as trop fait la bringue, ou quoi ? Smiley cligne
Modifié par Laurent Denis (03 Jul 2005 - 22:15)
Administrateur
a écrit :
l'élément <html> contenu dans le sélecteur universel ... Rien ne te choque, là ?
Non pas particulièrement. Le sélecteur universel* n'étant pas une entité propre, visible et mesurable, il ne me semble pas choquant qu'il puisse désigner une globalité qui se trouverait au-dessus de l'élément racine.

* par définition "universel" donc pourquoi pas "qui contient tout" ?
Modifié par Raphael (03 Jul 2005 - 22:21)
Raphael a écrit :
* par définition "universel" donc pourquoi pas "qui contient tout" ?
Eh ben non ! Puisque c'est <html> "qui contient tout" ! Non ?

@+, HoPHP
La bonne vieille discussion ergotage comme j'aime Smiley lol

Après on lira encore dans les journaux "sur ce forum, les néophites seront troublés de voir les discussions pointues qui se déroulent" Smiley langue
Administrateur
HoPHP a écrit :
Eh ben non ! Puisque c'est <html> "qui contient tout" ! Non ?

@+, HoPHP

Moi je ne suis pas contre Smiley smile
Mais il faut trouver une définition stricte de ce qu'on appelle "sélecteur universel" et ce qu'il englobe.
Raphael a écrit :

Moi je ne suis pas contre Smiley smile
Mais il faut trouver une définition stricte de ce qu'on appelle "sélecteur universel" et ce qu'il englobe.


Sélecteur universel, c'est pas quelque chose comme tu dis, c'est tout Smiley smile

Donc, c'est html, c'est body, c'est h1, c'est h2, c'est brocoli etc

C'est comme un joker (souvent le rôle de l'étoile en informatique)

Donc si tu écris

* html {

}


C'est comme si tu écrivais

h1 html {

}

Ce qui n'a pas de sens (en HTML)

Wala wala Smiley smile
Donc, c'est bien un hack (pwerrkk Smiley langue ) qui est basé sur une mauvaise gestion d'un point par IE, donc une syntaxe profitant d'un bug, donc bien un hack Smiley smile
Administrateur
Il doit bien y avoir une explication un peu plus poussée, sinon il se poserait des problèmes avec les éléments uniques.

Prenons par exemple le sélecteur (tout à fait valide) :
html * {...}

Si * contient tous les éléments, il contient aussi l'élément unique <html>, c'est donc comme si on écrivait :
html html {...}
Ce qui n'est pas valide...

... Et si c'est valide, alors autant écrire aussi :
* html {...}
Puisque cela revient au même.

Il y'a donc bien une spécificité quelque part. Je ne demande qu'à la découvrir.
Raphael a écrit :

Si * contient tous les éléments, il contient aussi l'élément unique <html>, c'est donc comme si on écrivait :
html html {...}
Ce qui n'est pas valide...


Mert' ! niqué Smiley smile

Argumentation : Oui mais même Smiley langue
TriadPtale a écrit :
La bonne vieille discussion ergotage comme j'aime Smiley lol

Après on lira encore dans les journaux "sur ce forum, les néophites seront troublés de voir les discussions pointues qui se déroulent" Smiley langue


Hack que sinon, ils ne reviendraient pas !


Smiley rolleyes
Faudrait s'entendre sur la définition de ce qu'est un hack alors.
Pour moi, un hack est un moyen de contourner un bug d'une implémentation ce qui est bien le cas ici.

* html est cependant un sélecteur parfaitement valide, il ne correspondra simplement à aucun élément si appliqué à un document (x)html.
Modifié par Bobe (04 Jul 2005 - 01:56)
Bon, on efface tout, et on recommence à la base:

Raphael a écrit :
Mais il faut trouver une définition stricte de ce qu'on appelle "sélecteur universel" et ce qu'il englobe.


http://www.w3.org/TR/CSS21/selector.html#universal-selector :

spec CSS a écrit :
The universal selector, written "*", matches the name of any element type. It matches any single element in the document tree.

If the universal selector is not the only component of a simple selector, the "*" may be omitted


Le sélecteur universel est donc effectivement un jocker qui représente n'importe quel élément de l'arbre du document.

- *.brocoli signifie donc n'importe quel élément de classe brocoli. Sans le savoir peut-être, vous l'utilisez quotidiennement, mais sous sa forme abrégée avec ommission du sélecteur universel selon la règle ci-dessus : vous écrivez simplement .brocoli.

- html * signifie n'importe quel élément descendant de l'élément html.

- * html signifie l'élément html descendant de n 'importe quel élément. Syntaxe parfaitement valide en CSS, mais qui vise un cas de structure (X)HTML qui n'existe (normalement) pas, et qui serait, lui, invalide du point de vue des normes (X)HTML

- au passage, une variante: * * body signifie l'élément body descendant de n 'importe quel élément lui même descendant etc.. A nouveau une syntaxe parfaitement valide en CSS, qui vise un cas de structure (X)HTML qui n'existe (normalement) pas, et qui etc.

- et encore une autre variante: * html body : idem.

Il n'y a aucun problème de validité CSS avec le hack du sélecteur CSS : là où il y aurait invalidité, ce n'est pas en CSS, mais en (X)HTML si le document avait la structure visée par le hack, ce qui n'est pas le cas (c'est le but du jeu, justement).

Le sélecteur html html serait lui aussi parfaitement valide en CSS : c'est la structure HTML qu'il vise qui serait invalide en HTML4.01, en XHTML1.0 etc. Ne mélangez pas validité CSS et validité (X)HTML.

Ce hack * html (et ses variantes) est donc plutôt un bon hack, puisqu'il n'invalide pas la CSS. En ce sens, il est identique au hack de !important et à celui de html>body, et nettement meilleur que le hack de l'underscore par exemple. La différence avec html>body, par exemple, c'est qu'il repose sur une syntaxe valide mais aberrante.

Mais, et c'était l'objet de mon précédent message :
- c'est un hack : je ne vois pas comment qualifier autrement une syntaxe aberrante, car elle vise une structure HTML qui ne peut pas exister, tout en étant interprétée différement par IE.
- un hack fragile, car il exploite un bug d'IE (qui a une curieuse compréhension de l'arbre du document ou du sélecteur placé dans ces cas de figure) pour en corriger un autre (le problème de positionnement, de flottant, de modèle de boîte... pour lequel vous utilisez ce hack).

Et selon moi, un hack très fragile, car le bug qui le génère est grossier.
Modifié par Laurent Denis (04 Jul 2005 - 06:12)
Bobe a écrit :

Pour moi, un hack est un moyen de contourner un bug d'une implémentation ce qui est bien le cas ici.


Oui, mais en trouvant comment préciser cette excellente définition pour:
- en exclure par exemple l'utilisation des marges de l'élément parent plutôt que le padding de l'élément enfant pour contourner le bug du box-model d'IE. Autrement dit, les contournements reposant sur un autre choix de style lorsque le premier choix est problématique dans un navigateur.
- y inclure les avancées CSS3 de Firefox et Opera pour les modules CSS3 qui ne sont pas encore implémentables (ceux qui n'ont pas atteint le stade de Candidate Recommandation) : il ne s'agit pas à proprement parler de bug, mais d'implémentations problématiques.

Je dirais qu'un hack:
- permet de contourner un bug ou d'utiliser une particularité d'implémentation CSS dans un ou plusieurs navigateurs,
- à l'aide d'un artifice de syntaxe CSS ou d'une implémentation propre à ces navigateurs (les commentaires conditionnels d'IE, les propriétés CSS3 non implémentables mais implémentées tout de même)

Le mot artifice peut être longuement discuté, mais je n'ai pas mieux sous la main pour couvrir à la fois des syntaxes valides ou invalides, mais toujours injustifiées en l'absence des bugs desdits navigateurs Smiley cligne

Enfin, rappeler que la question des hacks n'est ni morale, ni éthique, ni même normative, mais uniquement économique ou esthétique :
- économique : quel est le gain ? quel est le coût ? quel est le risque ? (exemple: pour ma part, je juge le risque élevé dans le cas du hack du sélecteur universel)
- esthétique : est-ce que je trouve cela bô ou pas ? (exemple: Raphaël ne trouve pas ça bô)
Modifié par Laurent Denis (04 Jul 2005 - 07:20)
Laurent Denis a écrit :

- y inclure les avancées CSS3 de Firefox et Opera pour les modules CSS3 qui ne sont pas encore implémentables (ceux qui n'ont pas atteint le stade de Candidate Recommandation) : il ne s'agit pas à proprement parler de bug, mais d'implémentations problématiques.


Je précise, car l'idée d'assimiler les bugs d'IE et les avancées CSS3 de Firefox va sans doute susciter quelques hurlements scandalisés :
- une CSS truffée de hacks pour que ça soit quand même pareil dans IE est fragile (car sans aucune garantie sur son résultat dans le prochain IE), peu lisible et difficile à maintenir en général (je modifie innocemment une valeur... Zut ! Il faut que je modifie aussi la valeur hackée, et comment il marchait, déjà, ce hack ?)
- De la même manière, une CSS fondée sur des implémentations précoces de CSS3 est fragile (quel est le résultat dans les navigateurs plus raisonnablement conformes aux normes réelles ?) et amusante à maintenir (par définition, les modules CSS3 qui n'ont pas atteint le stade de Candidate Recommandation sont susceptibles de tous les changements)

Les critères de choix sont strictement identiques :
- est-ce que j'investis (critère économique) dans un pari sur CSS3 ?
- est-ce que j'en fais une question d'esthétique (CSS3 roxor car ça me flatte et c'est amusant, ou à l'inverse, CSS3 pas bô car pas encore une norme) ?

Sont en revanche totalement exclues de ce champ les extensions propriétaires CSS conformes à CSS2.1, bien sûr.
Modifié par Laurent Denis (04 Jul 2005 - 08:20)
Pages :