I had a project several months ago and had a headache in displaying and executing JavaScript and CSS in different browsers. Today I searched the internet and summarized the information, this document is from the Internet and cannot be used to specify the source.
I. There are two methods to write CSS for different browsers:
1. Use the underscore (*) and underscore (_) to distinguish them, as shown below:
Background: orange; * Background: green; _ Background: blue;
IE6 supports underlines, while IE7 and Firefox do not.
IE6 and IE7 support *, but Firefox does not support.
2. Use the * and! Important:
Background: orange; * Background: Green! Important; * Background: blue;
Because Firefox and IE7 support this function! Important, but ie6.
Note: No matter what method, the order of writing is Firefox's preface, IE7's writing in the middle, and IE6's writing at the end.
Ii. Differences in CSS display in different browsers (reference below)
1. the default padding values of UL and ol are different. In Firefox, the default value of padding-left is about 40 PX, while that of IE is 0, you can only specify them as 20px to ensure the same effect in the two browsers;
2. the font size of small is defined differently. In Firefox, the font size is 13px, and in IE, the font size is 16px. The difference is quite large, and the font size can only be set to 14px;
3. The divs and Divs of multiple elements (images or links) arranged in parallel, Code In Firefox, spaces and carriage returns are ignored, while in IE, spaces (about 3px) are displayed by default );
4. the compatibility with nonstandard codes is different. The closed symbols missed in IE do not affect the display, and Firefox will form a disordered layout, the negative values of padding and margin used in IE will be parsed to 0 by Firefox, which may cause layout confusion;
5. Strict parsing of the length and height of Firefox will cause an image or table that does not match the setting (beyond;
6 .! Important attributes can play a role in other browsers except IE, so some people use this difference to make a CSS compatible with multiple browsers;
7. The DIV with an undefined ID will be related to other settings in the DIV property in IE, and the position in Firefox will be related to the position of the DIV in the file, followed by the previous Div.
8. Resolution of height
IE: the actual height will be used when the content exceeds the height even if the height is defined based on the height change of the content, including the undefined height of the image content.
Firefox: when no height is defined, if the image content is included in the content, the MF height resolution is based on the printing standard, which will cause a highly inconsistent situation with the actual content; when the height is defined, but the content exceeds the height, the content will exceed the defined height, but the style used in the area will not change, resulting in style dislocation.
Conclusion: If you can determine the content height, you 'd better define the height. If there is no way to define the height, you 'd better not use the border style. Otherwise, the style will be messy!
9. Analysis of ALT and title of IMG objects
ALT: the prompt when the photo does not exist or the load error occurs;
Title: Photo Tip description
If title is not defined in IE, ALT can also be used as the IMG tip. However, in MF, the two are completely used according to the standard definition.
Conclusion: when defining IMG objects, you can write both ALT and title objects to ensure that they can be used properly in various browsers.
10. Differences in other details
When you write CSS, especially when you use float: left (or right) to arrange one-click images, you will find that there is a normal problem in Firefox and IE. No matter whether you use margin: 0 or border: 0 as the constraint, it will not help.
In fact, there is another problem here, that is, the processing of spaces by IE. Firefox ignores the processing of spaces between blocks by IE. That is to say, the end of a div should be followed by a DIV, and there should be no carriage return or space in the middle. Otherwise there may be problems, such as 3px deviation, and this cause is hard to find.
Unfortunately, I encountered this problem again, connecting multiple IMG labels and defining float: left. I hope these images can be connected. However, the results are normal in Firefox, and each IMG displayed in IE is 3 px apart. Deleting spaces between tags does not work.
Later, the solution was to set Li outside IMG and define margin: 0 for Li, which solved the display deviation between IE and Firefox. The explanation of some models by IE may cause many errors. You can only find the cause if you try more.
11. nested Div: the height of the parent Div cannot be automatically changed based on the Child Div.
<Div id = "parent">
<Div id = "content">
when the content is large, even if the height of the parent is set to 100% or auto, different browsers still cannot automatically stretch properly. Solution
a space with a height of 1 is generated at the bottom of the layer to remove this problem.
12. empty
resolution problem.
null in FF
is not parsed. That is to say, the CSS style of the
label is not interpreted. However, if
is null in IE, It is parsed.
for example, the following CSS is defined:
# sidebar ul Li {
list-style-type: none;
list-style-image: none;
margin-bottom: 15px;
}< br> An empty
is used. So it will not be parsed under ff, but there will be 15px blank in IE.
to solve this problem, you can standardize CSS code to conform to the two standard styles, or use them in different ways! Important sets properties for Firefox, or configures appropriate CSS files for multiple browsers, and then selects different CSS files for compatibility by judging the browser.
Iii. cross-browser solution of javascrpt (reference below)
1. Document. Form. Item Problems
(1) existing problems:
Many statements such as document. formname. Item ("itemname") exist in the existing code and cannot be run in MF.
(2) solution:
Use document. formname. elements ["elementname"]
2. Collection class Object Problems
(1) existing problems:
In the existing Code, many collection class objects are used (), which is acceptable to IE and cannot be used by MF.
(2) solution:
Use [] as the subscript operation. For example, change document. Forms ("formname") to document. Forms ["formname"].
For example, change document. getelementsbyname ("inputname") (1) to document. getelementsbyname ("inputname") [1]
3. Window. Event
(1) existing problems:
Window. event cannot be run on MF.
(2) solution:
Mf events can only be used in the event. This problem cannot be solved. This can be changed as follows:
Original code (can be run in IE ):
<Input type = "button" name = "somebutton" value = "Submit" onclick = "javascript: gotosubmit ()"/>
...
<Script language = "JavaScript">
Function gotosubmit (){
...
Alert (window. Event); // use window. Event
...
}
</SCRIPT>
New Code (run in IE and MF ):
<Input type = "button" name = "somebutton" value = "Submit" onclick = "javascript: gotosubmit (event)"/>
...
<Script language = "JavaScript">
Function gotosubmit (EVT ){
EVT = EVT? EVT: (window. event? Window. Event: NULL );
...
Alert (EVT); // use EVT
...
}
</SCRIPT>
In addition, if the first line of the new Code is not modified, it is the same as the old code (that is, the gotosubmit call does not provide a parameter), it can only be run in IE, but no error occurs. Therefore, the TPL part of this solution is still compatible with the old code.
4. Question about the ID of an HTML object as the object name
(1) Existing Problems
In ie, the ID of the HTML object can be directly used as the variable name of the subordinate object of the document. It cannot be in MF.
(2) Solution
Use getelementbyid ("idname") instead of idname as the object variable.
5. The problem of getting an object using the idname string
(1) Existing Problems
In IE, Eval (idname) can be used to obtain the HTML object with ID as idname, which cannot be used in MF.
(2) Solution
Use getelementbyid (idname) instead of eval (idname ).
6. The variable name is the same as the ID of an HTML object.
(1) Existing Problems
In MF, because the Object ID is not the name of the HTML object, you can use the same variable name as the HTML Object ID, which cannot be used in IE.
(2) Solution
When declaring variables, add VaR to avoid ambiguity, so that it can run normally in IE.
In addition, it is best not to take the same variable name as the HTML Object ID to reduce errors.
7. event. X and event. Y
(1) Existing Problems
In ie, the event object has the X and Y attributes, and MF does not.
(2) Solution
In MF, event. X is equivalent to event. pagex. But event. pagex IE does not.
Therefore, event. clientx is used instead of event. X. This variable is also available in IE.
Event. clientx is slightly different from event. pagex (when the page has a scroll bar), but most of the time it is equivalent.
If it is the same, it may be a little troublesome:
MX = event. X? Event. X: event. pagex;
Use MX instead of event. x
8. About Frame
(1) Existing Problems
In ie, the frame can be obtained using window. testframe, but not in MF.
(2) Solution
The main difference between MF and IE in frame usage is:
If the following attributes are written in the frame tag:
<Frame src = "xx.htm" id = "frameid" name = "framename"/>
Then Ie can access the window object corresponding to this frame through ID or name.
However, MF can only access the window object corresponding to this frame through name.
For example, if the above frame label is written in the HTM in the top window, you can access
IE: window. Top. frameid or window. Top. framename to access this window object
Mf: only window. Top. framename can access this window object.
In addition, both mfand iecan use javasdesktop.doc ument. getelementbyid ("frameid") to access the frame tag.
In addition, you can switch the frame content through the parameter top.doc ument. getelementbyid ("testframe"). src = 'xx.htm '.
You can also switch the frame content through window. Top. framename. Location = 'xx.htm '.
9. In MF, attributes defined by myself must be obtained by getattribute ().
10. If there is no parentelement parement. Children in MF, use
Parentnode. childnodes
Childnodes has different meanings in IE and MF. MF uses Dom specifications, and blank text nodes are inserted in childnodes.
You can avoid this problem by using node. getelementsbytagname.
When a node in HTML is missing, ie and MF have different interpretations of parentnode, for example
<Form>
<Table>
<Input/>
</Table>
</Form>
In MF, the value of input. parentnode is form, while that of input. parentnode in IE is empty.
The node in MF does not have the removenode method. You must use the following method: node. parentnode. removechild (node)
11. Const Problems
(1) existing problems:
You cannot use the const keyword in IE. For example, const constvar = 32; in IE, This Is A syntax error.
(2) solution:
Use VaR instead of Const.
12. Body object
The MF body exists before the body tag is fully read by the browser, While IE exists only after the body is fully read.
13. url Encoding
In JS, if the URL is written, write directly & do not write & for example, VAR url = 'xx. jsp? Objectname = XX & objectevent = XXX ';
FRM. Action = URL, so it is very likely that the URL will not be properly displayed, so that the parameter is not correctly transmitted to the server.
Generally, the server reports that the error parameter is not found.
Of course, if it is an exception in TPL, because TPL complies with the XML specification, the requirements are as follows &
Generally, MF cannot recognize &
14. nodename and tagname Problems
(1) existing problems:
In MF, all nodes have a nodename value, but textnode does not have a tagname value. In IE, nodename usage seems to be
There is a problem (the test is not performed, but my IE has been killed several times ).
(2) solution:
Use tagname, but check whether it is empty.
15. Element attributes
The input. Type attribute in IE is read-only, but can be modified in MF.
16. Document. getelementsbyname () and document. All [name] Problems
(1) existing problems:
In IE, neither getelementsbyname () nor document. All [name] can be used to obtain the DIV element.