Doctype, offetWidth et compatibilité.... besoin d'aide - HTML/CSS - Programmation
Marsh Posté le 20-05-2006 à 13:41:22
Ton doctype indiqué n'est pas complet
tiens j'ai trouvé ça http://perso.wanadoo.fr/coin.des.e [...] q9_64.html
Marsh Posté le 20-05-2006 à 14:46:13
Citation : Sans ce doctype, le navigateur essaie de donner un sens à l'intruction litigieuse en revenant à des versions antérieures du HTML ou à des habitudes qui se sont mises en place dans les premiers navigateurs sans trop tenir compte de la norme internationale de l'époque. En général, il ne s'en tire pas trop mal parce que l'évolution du HTML s'est faite sans contradiction majeure d'une version à la suivante |
c'est plutot handicapant de mettre le doctype.. le but n'est-il pas en effet d'écrire un code qui soit compatible avec le plus de navigateurs possibles?!
P.S. j'ai ajouté http://www.w3.org/TR/html4/loose.dtd à mon doctype: du coup plus rien de fonctionne sous IE6 et mes problèmes sous mozilla eux sont tjrs là
Marsh Posté le 20-05-2006 à 15:51:57
si tu le dis.. en tous cas sur ton lien j'ai lu clairement que l'url était facultative
Marsh Posté le 20-05-2006 à 16:31:29
j'ai pas lu mon lien ... c'est la premiere réponse google....
lol.. et puis c'est facultatif pour les noobs like you...
Marsh Posté le 20-05-2006 à 23:33:22
namerh a écrit :
|
En fait il faut faire gaffe avec le doctype <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
IE garde toujours le box model microsoft, ce qui signifie que la largeur sur un block est appliquée sur l'extérieure des bordures.
alors que sous FF qui respecte le box model W3C la largeur est appliquée sur le contenu (donc à l'interieur des paddings)
pour que IE se comporte de la même manière que FF alors faut utiliser le doctype avec URL
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
sinon un peu de lecture ne fera pas de mal : http://pompage.net/pompe/doctype/
Marsh Posté le 21-05-2006 à 11:00:16
gatsu35 a écrit : IE garde toujours le box model microsoft, ce qui signifie que la largeur sur un block est appliquée sur l'extérieure des bordures. |
effectivement j'avais lu ça qque part...
gatsu35 a écrit : pour que IE se comporte de la même manière que FF alors faut utiliser le doctype avec URL |
comme dit ci-dessus, lorsque j'ajoute cette url, ça fonctionne encore sous FF mais plus sour IE (les calques n'apparaissent plus, etc.)
P.S. j'ai pourtant fait tout mon possible pour développer selon les usages en cours actuellement, en me référant au DOM, en développant du code cross-browser..
Marsh Posté le 21-05-2006 à 11:44:07
namerh a écrit : effectivement j'avais lu ça qque part... |
Oui mais quand on développe on choisi un bon doctype
Marsh Posté le 21-05-2006 à 12:25:38
j'ai lu pas mal de doc sur le net à propos des doctypes je ne comprends toujours pas leurs intérets.. par contre les inconvénients je ne vois que ça.. incompatibilité inter-browser, incompatibilité avec les versions antérieures ce qui va à l'encontre de ce qu'on fait d'habitude
bon sinon, mon code fonctionne bien à présent sous FF et IE (avec des fonctionnalités plus avancées pour IE: forcément des effets comme celui produit par le code ci-dessous (pompé tel quel dans la MSDN) n'a pas d'équivalent sous les autres navigateurs
Code :
|
Mais il ne fonctionne pas sous Opera (je parle de mon script complet pas du bout de code ci dessus spécifique à IE of course, je commence à perdre patience!!!!
Marsh Posté le 21-05-2006 à 12:39:46
je comprends pas j'ai appliqué les méthodes de ce site: http://www.quirksmode.org/js/events_compinfo.html
je vais revérifier mais bon j'ai fait en sorte d'écrire du code cross-browser (avec les infos de ce site)
Marsh Posté le 21-05-2006 à 12:56:44
Opera fonctionne t il sur un modèle plus proche de IE que de Mozilla?
Code :
|
-> la variable est initialisé à false sous Opera par conséquent le code spécifique à IE celui avec les effets de filters est executé sous Opera qui forcément plante..
mais comment résoudre ça, ça serait sans doute possible en détectant le navigateur utilisé mais cette méthode est déconseillée d'après les docs que j'ai pu lire, il faut à la place employer des codes détecteurs comme celui ci-dessus... la question est alors quel code est spécifique à Opera???
des avis?
Marsh Posté le 21-05-2006 à 13:01:08
ReplyMarsh Posté le 21-05-2006 à 13:03:41
gatsu35 a écrit : sais tu ce que signifie cette ligne ? |
lol.. quand meme!
PS. pour info je débute en dév web et suis paumé par rapport aux normes etc.
par contre je suis développeur C
Marsh Posté le 21-05-2006 à 13:12:31
oui mais bon :
pour tester si un objet existe en JS on fait juste : if (mon objet)
document.all est un objet spécifique à IE et Opera
donc à cette ligne, mozilla sera true si on est sur firefox, et false pour les 2 autres navigateurs
var mozilla = (document.all) ? false:true;
Marsh Posté le 21-05-2006 à 13:28:34
gatsu35 a écrit : pour tester si un objet existe en JS on fait juste : if (mon objet) |
oui c'est bien le but de cette ligne... il ne reste plus qu'à écrire if (mozilla) .... mais bon voir ce que j'en dit ci-dessous...
gatsu35 a écrit : document.all est un objet spécifique à IE et Opera |
oui je pensais qu'il n'était spécifique qu'à IE mais je viens de m'apercevoir que ça n'est pas le cas..
gatsu35 a écrit : donc à cette ligne, mozilla sera true si on est sur firefox, et false pour les 2 autres navigateurs |
oui ben c'était bien l'effet recherché..
bon en fait, dans le reste de mon code j'ai adopté la méthodologie if (expression_qui_suit) ...
donc en fait je suis en train de modifier ça: il faut que j'inclus la méthodologie if (expression) dans la fonction gérant les filters spécifiques à IE..
par contre: j'avais inclus cette fameuse ligne pour une autre raison au départ..
la raison? c'est que je ne vois pas comment appliquer la méthodologie if (expression) pour le code suivant:
if (mozilla) document.captureEvents(Event.MOUSEOVER);
Marsh Posté le 21-05-2006 à 13:37:47
petit rappel pour la détection des navigateur
document.all && window.print = IE windows
document.all && !window.print && !window.opera = IE mac
window.opera = opera
!document.all = mozilla (firefox quoi )
pour safari je ne sais pas, je n'ai pas encore eu l'occasion de faire des recherches poussées
Marsh Posté le 21-05-2006 à 13:55:05
gatsu35 a écrit : petit rappel pour la détection des navigateur |
ah ok je connaissais pas cette subtilité
remarque:
document.all && window.print = IE windows
document.all && !window.print && !window.opera = IE mac
j'en déduis que:
document.all && !window.print = opera
Marsh Posté le 21-05-2006 à 14:00:06
namerh a écrit : ah ok je connaissais pas cette subtilité |
aussi mais tu as window.opera qui te retourne true donc pour detecter opera c'est pas trop compliqué
Marsh Posté le 20-05-2006 à 12:53:13
il y a plein de normes, je ne comprends pas ce qui suit..
http://msdn.microsoft.com/library/ [...] ements.asp
To comply with the Cascading Style Sheets, Level 1 (CSS1) box model, Microsoft Internet Explorer 6 and later calculate the height of objects differently when you use the !DOCTYPE declaration in your document to switch on standards-compliant mode. This difference may affect the value of the offsetWidth propety. When standards-compliant mode is switched on, the width property specifies the distance between the left and right edges of the bounding box that surrounds the object's content. When standards-compliant mode is not switched on, and with earlier versions of Internet Explorer, the width property also includes the border and padding belts that surround the object's bounding box
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-> Mon doctype est défini comme ceci mais apparement il n'est pas "standards-compliant mode"
car d'après ce que j'observe: l'offsetwidth prend en compte l'épaisseur des "border" sous IE6 mais pas sous mozilla firefox 1.0.7
Que faire pour que l'offsetwidth adopte le meme comportement quelques soient les versions de navigateur ?
En fait comme le problème n'est pas propre à cette propriété, la question est plutot de savoir s'il y a un moyen de forcer la manière dont les navigateurs gèrent les dimensions des objets?
Message édité par namerh le 20-05-2006 à 15:56:05