Doctype, offetWidth et compatibilité.... besoin d'aide

Doctype, offetWidth et compatibilité.... besoin d'aide - HTML/CSS - Programmation

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

Citation :

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
Reply

Marsh Posté le 20-05-2006 à 12:53:13   

Reply

Marsh Posté le 20-05-2006 à 13:41:22    

Ton doctype indiqué n'est pas complet  :o  
 
tiens j'ai trouvé ça http://perso.wanadoo.fr/coin.des.e [...] q9_64.html

Reply

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à  :ouch:

Message cité 1 fois
Message édité par namerh le 20-05-2006 à 15:52:26
Reply

Marsh Posté le 20-05-2006 à 15:46:55    

C'est que donc ton site est codé avec les pieds

Reply

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

Reply

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...

Reply

Marsh Posté le 20-05-2006 à 23:33:22    

namerh a écrit :

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à  :ouch:


 
 
 
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/

Reply

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.
alors que sous FF qui respecte le box model W3C la largeur est appliquée sur le contenu (donc à l'interieur des paddings)

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
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">


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..

Message cité 1 fois
Message édité par namerh le 21-05-2006 à 11:05:19
Reply

Marsh Posté le 21-05-2006 à 11:44:07    

namerh a écrit :

effectivement j'avais lu ça qque part...
 
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..


 
 
Oui mais quand on développe on choisi un bon doctype :/

Reply

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 :
  1. var o= document.getElementById(id);
  2.    o.style.filter="blendTrans(duration=2)";
  3.    if (o.filters.blendTrans.status != 5) {
  4.     o.filters.blendTrans.apply();
  5.     o.style.visibility="hidden";
  6.                                                                 o.filters.blendTrans.play(); }

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!!!!


Message édité par namerh le 21-05-2006 à 12:27:16
Reply

Marsh Posté le 21-05-2006 à 12:25:38   

Reply

Marsh Posté le 21-05-2006 à 12:33:08    

ben colle ton code complet :spamafote:

Reply

Marsh Posté le 21-05-2006 à 12:37:02    

il y a plusieurs pages..

Reply

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) :(

Reply

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 :
  1. var mozilla = (document.all) ? false:true;


-> 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?


Message édité par namerh le 21-05-2006 à 13:05:33
Reply

Marsh Posté le 21-05-2006 à 13:01:08    

sais tu ce que signifie cette ligne ?

Reply

Marsh 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 ;)


Message édité par namerh le 21-05-2006 à 13:04:44
Reply

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;

Reply

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
var mozilla = (document.all) ? false:true;

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);  :??:


Message édité par namerh le 21-05-2006 à 13:35:31
Reply

Marsh Posté le 21-05-2006 à 13:37:47    

petit rappel pour la détection des navigateur :D
document.all && window.print = IE windows
document.all && !window.print && !window.opera = IE mac
window.opera = opera
!document.all = mozilla (firefox quoi :o)
 
pour safari je ne sais pas, je n'ai pas encore eu l'occasion de faire des recherches poussées

Reply

Marsh Posté le 21-05-2006 à 13:55:05    

gatsu35 a écrit :

petit rappel pour la détection des navigateur :D
document.all && window.print = IE windows
document.all && !window.print && !window.opera = IE mac
window.opera = opera
!document.all = mozilla (firefox quoi :o)
 
pour safari je ne sais pas, je n'ai pas encore eu l'occasion de faire des recherches poussées


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

Message cité 1 fois
Message édité par namerh le 21-05-2006 à 13:58:22
Reply

Marsh Posté le 21-05-2006 à 14:00:06    

namerh a écrit :

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


aussi mais tu as window.opera qui te retourne true donc pour detecter opera c'est pas trop compliqué :D

Reply

Marsh Posté le 21-05-2006 à 14:07:12    

certes certes :D

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed