CSS、javascript常用知识资料整理总结

1.正确使用DOCTYPE 声明

XHTML Strict DTD-要求严格的DTD,你不能使用任何表现层的标识和属性(交给css来表现),例如<br>;能够使html非常的干净。

HTML5
   <!DOCTYPE html> /*html5的声明,简单*/
/*一下都是过渡*/
1: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> XHTML Transitional DTD-要求非常宽松的DTD,它允许你继续使用HTML4.01的标识(但是要符合xhtml的写法) 2: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> XHTML Frameset DTD-当您希望使用框架时,请使用此 DTD! 3: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> /*一般都是这种,标签内可以使用样式*/

2.完美兼容游览器清除浮动

.fix{*zoom:1;}
.fix:after{display:block; content:"clear"; height:0; clear:both; overflow:hidden; visibility:hidden;}

3.透明效果

opacity: 0.5;/*兼容firefox,主流游览器*/ 
filter: progid:DXImageTransform.Microsoft.Alpha(opacity=50); /*兼容IE,IE独有*/ 

参考文章:http://www.zhangxinxu.com/wordpress/?p=839

4.图片垂直居中

.ul li{float:left; width:自定义px; height:自定义px; text-align:center; line-height:自定义px; font-size:125px;}/*高度与行高一致*/
.ul li img{vertical-align:middle;}

5.文字垂直居中

①单行文字

height:3em; line-height:3em;  /*使用em,高度和行高一致*/

②多行文字

实现的关键是把文字当图片处理。用一个span标签将所有的文字封装起来,设置文字与图片相同的display属性(inline-block属性),然后用处理图片垂直居中的方式处理文字的垂直居中即可。
核心css代码如下,
外部div标签:

div{display:table-cell; width:550px; height:1.14em; padding:0 0.1em; border:4px solid #beceeb; color:#069; font-size:10em; vertical-align:middle;}

内部span标签:

span{display:inline-block; font-size:0.1em; vertical-align:middle;}

有几点简要说明:
1.此例子用em做单位,如果您对em单位了解不够,把握不来的话,可以使用px做单位,值要换;
2.外部div不能使用浮动;
3.外部div高度和文字大小比例1.14为宜;
4.内部标签的vertical-align:middle可以省略,但是外部div高度和文字大小比例要修改,高度比字体1.5左右的样子。

参考文章:http://www.zhangxinxu.com/wordpress/?p=61

6.IE Png图片透明

 最佳方案,使用pngfix.js 插件来渲染png图片。

 

<!--[if IE 6]>
     <script src="http://www.jsmix.com/blog/wp-content/themes/jsmix/js/pngfix.js"></script> //js地址,可以自己下载到本地引用,该js已经压缩
     <script>DD_belatedPNG.fix('.J_png_fix');</script>
//记得为需要透明的png图片添加class为“J_png_fix” ,不然不会渲染png图片哦
 <![endif]--> 
//该方法完美解决IE6 png不透明。

 

 

一、ie6里png背景透明问题:解决办法用滤镜。这个一般高手们都知道。

注意:src 这个路径是指加载滤镜的页面相对于图片的路径,而不是css文件相对于图片的路径。这跟一般的图片加载有区别。

 

_filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="图片路径");
_background-image: none;

 

二、ie6里png背景做循环问题:用一个2px*2px的半透明图片做背景循环。解决办法加”sizingMethod=scale”。

 

_filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale,src="图片路径");
_background-image: none;

 

 

三、ie6里不做循环的大png图片背景会出现区块被剪切,网站版面一片混乱,文字消失问题:解决办法加sizingMethod=crop。

 

_filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=crop,src="图片路径")
_background-image: none;

 

四、ie6里png背景下的的连接失效:解决办法给a元素添加样式position:relative;

链接所在的层以及父级,全都不能有position,否则的话链接无效,即使relative也不行!

参考:http://www.note12.com/index.php/archives/203

 

7.IE系列游览器 hack 的格式 

ie10 

http://www.qianduan.net/ie10-css-hack.html

color:#FFF;/* FF,OP */
[;color:#0F0;]/* Sa,CH */
color:#FFF\9;/*IE6、7、8*/
*color:#FF0;/* IE7、6 */
_color:#F00;/* IE6 */

浏览器兼容代码:

 

浏览器

符号

 

IE6

IE7

IE8

FF

*

×

×

!important

×

×

_

×

×

×

\9

×

×

×

*html

×

×

×

*+html

×

×

×

版本2

select {
background-color:red\0;  /* ie 8/9*/

background-color:blue\9\0;  /* ie 9*/

*background-color:#dddd00;  /* ie 7*/

_background-color:#CDCDCD;  /* ie 6*/}

参考:http://www.css88.com/archives/3746

ie条件判断

<!--[if IE]> Only IE <![endif]--> 所有的IE可识别
<!--[if IE 5.0]> Only IE 5.0 <![endif]--> 只有IE5.0可以识别
<!--[if gt IE 5.0]> Only IE 5.0+ <![endif]--> IE5.0包换IE5.5都可以识别
<!--[if lt IE 6]> Only IE 6- <![endif]--> 仅IE6可识别
<!--[if gte IE 6]> Only IE 6/+ <![endif]--> IE6以及IE6以下的IE5.x都可识别
<!--[if lte IE 7]> Only IE 7/- <![endif]--> 仅IE7可识别
ie10不支持条件注释
//参数解析
  • lte – 低于或等于
  • lt – 低于
  • gte – 高于或等于
  • gt – 高于
  • (IE6)|(IE7) – Internet Explorer 6 Internet Explorer 7
  • (IE6)&(IE7) – Internet Explorer 6  Internet Explorer 7

参考:http://dreamweaver.abang.com/od/divcss/a/ie-css-hack.htm

 

http://webrebuild.org/ie6/

http://godarkforie.org/

 

8.未知高度的图片垂直居中

该方法针对IE6/IE7,将图片外部容器的字体大小设置成高度的0.873倍就可以实现居中,标准浏览器还是使用上面的方法来实现兼容,并且结构也是比较优雅。

HTML结构部分:

<div id="box">
    <img src="images/demo.jpg" alt="" />
</div>

CSS样式部分:

#box{
    width:500px;height:400px;
    text-align:center;
    border:1px solid #d3d3d3;background:#fff;

    /* 兼容标准浏览器 */
    display: table-cell;
    vertical-align:middle;

    /* 兼容IE6/IE7 */
    *display:block;
    *font-size:349px;  /* 字体大小约为容器高度的0.873倍 400*0.873 = 349 */
    *font-family:Arial;  /* 防止非utf-8引起的hack失效问题,如gbk编码 */
}

#box img{
    vertical-align:middle;
}

设置字体大小的方法感觉比较怪异,也没有看到一个合理的解释,只知道图片元素有一些不同于其他元素的特性,但是对于IE6/IE7来说,这个方法还是比较给力的。

9.a标签伪类的正确使用

/*demo*/
a:link {color: #FF0000}     /* 未访问的链接 */
a:visited {color: #00FF00}  /* 已访问的链接 */
a:hover {color: #FF00FF}    /* 当有鼠标悬停在链接上 */
a:active {color: #0000FF}   /* 被选择的链接 */
正确的顺序:a:link > a:visited > a:hover > a:active 

参考文章:http://www.cnblogs.com/-clq/archive/2012/03/12/2391265.html

10.Webkit中textarea的设定

其一、页面输入框(input 标签)聚焦高亮。

 

屏蔽input聚焦高亮效果的样式:

input {outline: none;}
textarea {outline: none;}

其二、文本框(textarea 标签)缩放功能。

/*css2.0*/
textarea {width: 400px;max-width: 400px;height: 400px;max-height: 400px;}
/*css3.0*/
texearea {resize: none;}

参考文章:http://blog.byszsz.com/archives/333.htm

 11.javascript兼容浏览器的鼠标x,y获得函数

function getEventObject(W3CEvent) {//事件标准化函数
return W3CEvent || window.event;}
function getPointerPosition(e) { //兼容浏览器的鼠标x,y获得函数    
  e = e || getEventObject(e);    
 var x = e.pageX || (e.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft));   
 var y = e.pageY || (e.clientY + (document.documentElement.scrollTop || document.body.scrollTop));        
return { 'x':x,'y':y };}
//版本2
function getMousePos(e){
    var e=window.event||e;
  if(e.pageX||e.pageY){
     return {x:e.pageX,y:e.pageY};
  }
  return{
    x:e.clientX + document.body.scrollLeft-document.body.clientLeft,
    y:e.clientY + document.body.scrollTop-document.body.clientTop
  };
}

 参考:http://www.wxwdesign.com/archives/javascript_drag_drop

12.javascript关于scrollLeft,scrollTop的浏览器兼容性

var ueScroll=(function(){
//获取scrollX
function scrollX(ele){
var element=ele || document.body;
return element.scrollLeft || (document.documentElement && document.documentElement.scrollLeft);
}
//获取scrollY
function scrollY(ele){
var element=ele || document.body;
return element.scrollTop || (document.documentElement && document.documentElement.scrollTop);
}
return {
left:scrollX,
top:scrollY
}
})()

 参考文章:http://www.rayteen.com/?p=634

13.javascript事件绑定

function addEvent(elem, type, fn) {
    if (elem.attachEvent) {
        elem.attachEvent('on' + type, fn);
        return;
    }
    if (elem.addEventListener) {
        elem.addEventListener(type, fn, false);
    }
}
//elem为元素,type为事件类型,fn为要执行的事件

14.javascript解除绑定事件

function removeEvent(elem, type, fn) {
    if (elem.detachEvent) {
        elem.detachEvent('on' + type, fn);
        return;
    }
    if (elem.removeEventListener) {
        elem.removeEventListener(type, fn, false);
    }
}

 15.iframe中进行DOM操作( 跨域操作)

function getIFrameDOM(id){       //兼容IE、Firefox的iframe DOM获取函数
    return document.getElementById(id).contentDocument || document.frames[id].document;
}

参考:http://js8.in/463.html

DEOM http://js8.in/mywork/iframe_dom/

 16.用document.domain+iframe实现Ajax跨子域

参考:http://js8.in/443.html

17.获取到来访者的城市地理信息

http://fw.qq.com/ipaddress

 18.JavaScript 中的真假值

类型    真假值
Null    总是为假(false)
Undefined    总是为假(false)
Boolean    保持真假值不变
Number    +0,-0 或是 NaN 的时候为假,其它值为真
String    空字符串的时候为假,其它值为真
Object    总是为真(true)

 

19.javascript高效简洁代码的编写及优化技巧

 http://www.w3cfuns.com/forum.php?mod=viewthread&tid=5594342&reltid=1362&pre_pos=1&ext=

 http://js8.in/350.html

20.==与===的区别

=== 操作符的判断算法

在使用 === 来判断两个值是否相等的时候,如判断x===y,会首先比较两个值的类型是否相等,如果不相等的话,直接返回 false 。接着根据 x 的类型有不同的判断逻辑。

如果 x 的类型是 Undefined 或 Null,则返回 true 。
如果 x 的类型是 Number,只要 x 或 y 中有一个值为 NaN,就返回 false ;如果 x 和 y 的数字值相等,就返回 true ;如果 x 或 y 中有一个是 +0,另外一个是 -0,则返回 true 。
如果 x 的类型是 String,当 x 和 y 的字符序列完全相同时返回 true,否则返回 false 。
如果 x 的类型是 Boolean,当 x 和 y 同为 true 或 false 时返回 true,否则返回 false 。
当 x 和 y 引用相同的对象时返回 true,否则返回 false 。
== 操作符的判断算法

在使用 == 来判断两个值是否相等的时候,如判断x==y,当 x 和 y 的类型一样的时候,判断逻辑与 === 一样;如果 x 和 y 的类型不一样,== 不是简单的返回 false,而是会做一定的类型转换。

如果 x 和 y 中有一个是 null,另外一个是 undefined 的话,返回 true 。如null == undefined。
如果 x 和 y 中一个的类型是 String,另外一个的类型是 Number 的话,会将 String 类型的值转换成 Number 来比较。如3 == “3″。
如果 x 和 y 中一个的类型是 Boolean 的话,会将 Boolean 类型的值转换成 Number 来比较。如true == 1、true == “1″
如果 x 和 y 中一个的类型是 String 或 Number,另外一个的类型是 Object 的话,会将 Object 类型的值转换成基本类型来比较。如[3,4] == “3,4″
需要注意的是 == 操作符不一定是传递的,即从A == B, B == C并不能一定得出A == C。考虑下面的例子,var str1 = new String(”Hello”); var str2 = new String(”Hello”); str1 == “Hello”; str2 == “Hello”,但是str1 != str2。

 

 21.匿名函数的写法

匿名函数写法一

(function(){
    //do something
})();
//最常用的闭包方式

匿名函数写法二

!function(){
    //do something
}();

 

上面!还可以写成+,!!等多种方式。

匿名函数写法三

(function(){
    //do something
}());

 

匿名函数写法四

void function(){
    //do something
}();
//也是经常用的

常用的写法为一、三。

 22.使用 hasOwnProperty 过滤prototype原型上的属性

Object.prototype.bar = 1;
var foo = {moo: 2};
for(var i in foo) {
    if (foo.hasOwnProperty(i)) {
        console.log(i);    // moo
    }
}

 23.javascript插入样式

一、页面中引入外部样式:

 

function includeLinkStyle(url) {

var link = document.createElement("link");

link.rel = "stylesheet";

link.type = "text/css";

link.href = url;

document.getElementsByTagName("head")[0].appendChild(link);

}


includeLinkStyle("http://css.sodao.com/home/css/reset.css?v=20101227");

二、使用<style>标签插入页面样式:

这种方式在各个主流浏览器存在兼容性问题,像firefox等标准浏览器无法直接获取设置styleSheet的cssText值,标准浏览器下只能使用document.styleSheets[0].cssRules[0].cssText单个获取样式;同时使用:document.styleSheets[0].cssRules[0].cssText=newcssText;页面不会自动更新样式,必须使用:document.styleSheets[0].cssRules[0].style.cssText=newcssText;这点似乎没坑爹的IE来的人性化和简便。YUI中使用了一个很好的办法:style.appendChild(document.createTextNode(styles));采用createTextNode将样式字符串添加到<style>标签内;

function includeStyleElement(styles,styleId) {


if (document.getElementById(styleId)) {

return

}

var style = document.createElement("style");

style.id = styleId;

//这里最好给ie设置下面的属性

/*if (isIE()) {

style.type = "text/css";

style.media = "screen"

}*/

(document.getElementsByTagName("head")[0] || document.body).appendChild(style);

if (style.styleSheet) { //for ie

style.styleSheet.cssText = styles;

} else {     //for w3c

style.appendChild(document.createTextNode(styles));

 }

}

var styles = "#div{background-color: #FF3300; color:#FFFFFF }";

includeStyleElement(styles,"newstyle");

 

 24.javascript一般建立类方式(工厂模式)

(function(){    
    function Circle(nRadius){       
          this.nR = nRadius;     
} Circle.prototype = { PI : 3.14, fnGetArea : function(){ return this.PI * this.nR * this.nR; }
} var c1 = new Circle(5); alert(c1.fnGetArea()); //78.5 })();

 25.继承(浅拷贝)

function LightCopy(p) {
         var c = {};
         for (var i in p) {
                 c = p;
         }
         //c.uber = p;
         return c;
 }

 

26.继承(深拷贝)

function deepCopy(p, c) {
         var c = c || {};
         for (var i in p) {
                 if (typeof p === 'object') {
                         c = (p.constructor === Array) ? [] : {};
                         deepCopy(p, c);
                 } else {
                         c = p;
                 }
         }
         return c;
 }

 

事件支持

ie游览器的各个版本支持回车的事件
 =======以下为电脑上的ie测试
 ie6
 keydown
 keypress
 ----------------------
 
 ie7
 
 keydown
 keypress
 ----------------------
 
 ie8
 keydown
 keypress
 ----------------------
 
 ie9
 keydown
 keypress
 
 ======以下为IE Tester 工具下测试的
 
 ie6
 keypress
 ---------------------
 
 ie7
 都不支持
 ----------------------
 
 ie8
 都不支持
 ----------------------
 
 ie9
 
 keypress
 
 
 ====360游览器5.0(电脑下测试)
 keydown
 keypress
 
 =====谷歌游览器
 keydown
 keypress
 
 =====火狐
 keyup
 keypress
 keydown
 keypress
 
 2次keypress,不知道神马情况。。。
 
 ======opera
 keydown
 keypress
 
 ======Safari(苹果)
 
 keydown
 keypress

 

 没整理完毕。。。待续

posted @ 2012-07-30 14:53  黑色技术  阅读(485)  评论(0编辑  收藏  举报