Closed Bug 398305 Opened 17 years ago Closed 17 years ago

error reported parsing style properties 'left' & 'top'

Categories

(Firefox :: General, defect)

x86
Windows XP
defect
Not set
normal

Tracking

()

RESOLVED INVALID

People

(Reporter: tom, Unassigned)

References

()

Details

User-Agent:       Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7
Build Identifier: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:2.0.7.7) Gecko/20070914 Firefox/2.0.0.7

When a DTD is present (HTML 4.01 Transitional or XHTML 1.0) Firefox reports:
  Error in parsing value for property 'left'. Declaration dropped.
  Error in parsing value for property 'top'. Declaration dropped.
If DTD omitted, no error.

Reproducible: Always

Steps to Reproduce:
1. load page
2. click small icon at bottom of a concept symbol
Actual Results:  
popup always appears in upper left corner of window

Expected Results:  
popup appears at cursor location where icon was clicked

1. Works as expected if DTD is removed from the page.
   See: <URL: http://www.enfolded.info/cmaps/maps/ue_fig_01.htm >.
2. Works with DTD correctly in Opera 9.23
3. FWIW, in IE7 popup appears offset from expected location by amount of scroll
Are you providing units when you set those styles?  Units are required.  
Tom, 

Brian is right. This code:

    if (document.all) {                 // Internet Explorer Detected
	   IE = true;	
    }
    else if (document.layers) {         // Netscape Navigator Detected
	   NS = true;	
    }
    else if (document.getElementById) { // Netscape 6 Detected
       GECKO = true;
    }

Netscape 6, NS 7, NS 8, NS 9 do not support layers collection;
Opera 6+ supports document.all. All the above code is not the proper way and recommended way to do browser detect.

	if (GECKO)
	{
	    document.getElementById(popupName).style.left = event.layerX;
	    document.getElementById(popupName).style.top = event.layerY;

is very wrong as layerX/layerY are integer values, not parsable length units.
The Error console in Firefox was already indicating the source of the problem.

Please visit
Using Web Standards in your Web Pages
Section 3.3.1.2: W3C DOM2 Reflection of an Element's CSS Positioning Properties
http://developer.mozilla.org/en/docs/Using_Web_Standards_in_your_Web_Pages

Also, 
CSS 1 Forward-compatible parsing
http://www.w3.org/TR/REC-CSS1#forward-compatible-parsing

and

CSS 2.1 Rules for handling parsing errors
http://www.w3.org/TR/CSS21/syndata.html#parsing-errors

clearly states that length values must have units.

You mentioned Opera 9.23 but
"CSS size and position properties specified without a unit
Unit-less numbers in CSS (e.g. 'width: 300') are interpreted as pixels in Quirks Mode and ignored in Standards Mode."
http://www.opera.com/docs/specs/opera9/doctype/index.dml

Implement the W3-dev toolbar in Opera 9 and then verify that the webpage triggers standards compliant rendering mode.

Also, your browser sniffing code will absolutely create problems in short and long term.
Please consult

Using Web Standards in your Web Pages
 4 Developing Cross Browser/Cross Platform Pages

  4.1 Browser identification approach (aka "browser sniffing"): not best, not reliable approach
  4.2 Using Object/Feature support detection approach: best and overall most reliable

http://developer.mozilla.org/en/docs/Using_Web_Standards_in_your_Web_Pages

and
A Strategy That Works: Object/Feature Detecting by comp.lang.javascript newsgroup FAQ notes
http://jibbering.com/faq/faq_notes/not_browser_detect.html#bdFD

Browser detection - No; Object detection - Yes by Peter-Paul Koch
http://www.quirksmode.org/js/support.html

Resolving as INVALID
Status: UNCONFIRMED → RESOLVED
Closed: 17 years ago
Resolution: --- → INVALID
You need to log in before you can comment on or make changes to this bug.