zoukankan      html  css  js  c++  java
  • 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; 自定义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; 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{
        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 { 400px;max- 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

     没整理完毕。。。待续

  • 相关阅读:
    Hbase­优化方案
    ssh 登录
    微软2017校招笔试题3 registration day
    微软2017校招笔试题2 composition
    STL中的查找算法
    leetcode-188 买卖股票4
    leetcode-306 Additive Number
    网络安全(3): 数据完整性校验
    网络安全(2)-数据加解密
    linux共享库
  • 原文地址:https://www.cnblogs.com/yyman001/p/2615255.html
Copyright © 2011-2022 走看看