前端总结

  做web开发时,一定涉及前端的知识,每次面试都要过一遍,这里总结一下个人对web前端的理解。由于目前水平有限,写的不一定对,如有不对的地方,请一定在评论中提出,在此先谢过。此文会不断地更新更正。

  1.web前端主要是html,css,javascript三块的知识。

  2.xhtml是更严谨的html,在项目中我们最好用严谨的语义化的html。

  3.html5新标签与新特性可查看《28个你必须知道的HTML5的新特性,技巧以及技术》《Html5新标签解释及用法》

   这里指出html5新添的几个常用标签和属性:<article><aside><nav><header><footer><section><video> required,autofocus,preload等。

  4.css行内元素,如:img,label,select,块元素,如:center,form,ul,li,table,可变元素,如:button,del,map等。

   注意几个属性:overflow,clear,word-break: normal|break-all|keep-all,word-wrap: normal|break-word,word-spacing

   overflow:

描述
visible 默认值。内容不会被修剪,会呈现在元素框之外。
hidden 内容会被修剪,并且其余内容是不可见的。
scroll 内容会被修剪,但是浏览器会显示滚动条以便查看其余的内容。
auto 如果内容被修剪,则浏览器会显示滚动条以便查看其余的内容。
inherit 规定应该从父元素继承 overflow 属性的值。

    如果我们即想让一个元素可以设置宽度高度,又想让它以行内形式显示,这时我们可以设置display的值为inline-block。

  5.css3增加了很多新的特性,如圆角,阴影,多栏布局等,具体参见《CSS3新特性一览》。注意box-sizing和box-flex这两个属性:参见w3school上两个例子http://www.w3school.com.cn/cssref/pr_box-sizing.asphttp://www.w3school.com.cn/cssref/pr_box-flex.asp

  6.div在整个屏幕水平居中和垂直居中的方法有很多种,这里提供两种。

    (1)

<style type="text/css">
#box{
    width:200px;
    height:150px;
    background-color: gray;
    position:relative;
    top:50%;
    left:50%;
    margin-left:-100px; 
    margin-top:-75px; /* negative half of the height */
}
</style>
<div id="box"></div> 

    (2)

<style type="text/css">
#floater{float:left; height:40%; margin-bottom:-120px;}
#content{clear:both; height:240px;width:300px;margin:0 auto; position:relative;background-color: gray}
</style>

<div id="floater"></div>
<div id="content"> Content here </div>

  7.行内元素在一个div中垂直居中和水平居中的方法之一:

<style>
.box {
        /*非IE的主流浏览器识别的垂直居中的方法*/
        display: table-cell;
        vertical-align:middle;

        /*设置水平居中*/
        text-align:center;

        /* 针对IE的Hack */
        *display: block;
        *font-size:262px;/*约为高度的0.873,300*0.873 约为262*/
        *font-family:Arial;/*防止非utf-8引起的hack失效问题,如gbk编码*/

        width:400px;
        height:300px;
        border:1px solid #eee;
}
.box img {
        /*设置图片垂直居中*/
        vertical-align:middle;
}
</style>

<div class="box">
 <img src="http://static.cnblogs.com/images/logo_small.gif"/>
</div>

  8.nav居左,撑满整个高度的方法之一:

<style type="text/css">
body{margin:0;padding:0;height:100%;}
html{height:100%;}
nav{margin:0px;padding:0px;height:100%;overflow:auto;float:left;width:100px;border:1px solid red;}
</style>
<nav>
    <div>11111</div>
</nav>

  9.html5和css3的新特性确实很好用,但是IE6,IE7,IE8(这三仍然有很大的使用比例,真是无语)甚至是IE9大部分都不支持。对于html5标签不支持的问题可以用js来解决,通常的做法是用html5shiv,在页面中加入如下的一行即可:

    <!-–[if lt IE 9]--><script src=" http://html5shiv.googlecode.com/svn/trunk/html5.js "></script ><!--[endif]–- > 

    其实实现的方法无非就是把ie6,ie7和ie8不认识的标签都有js来创建,类似于如下的 实现:

function(){if(!/*@cc_on!@*/0)return;var e = “abbr,article,aside,audio,canvas,datalist,details,dialog,eventsource,figure,footer,header,hgroup,mark,menu,meter,nav,output,progress,section,time,video”.split(’,'),i=e.length;while(i–){document.createElement(e[i])}})() 

  此外,还有一些hack的方法

  .all IE{property:value9;}
  .gte IE 8{property:value ;}
  .lte IE 7{*property:value;}
  .IE 8/9{property:value ;}
  .IE 9{property:value9 ;}
  .IE 7{+property:value;}
  .IE 6{_property:value;}
  .not IE{property:value;}

  10.javascript是一门神奇的语言,目前用的标准是ECMAScript3,ECMAScript6正在路上,即将发布。这一块涉及的内容很多,我之前的博客以零星地写过一些相关的内容,这里先写点个人想法。js世界里使用最广泛的库就是jQuery,jQuery库是一个很全面而且兼容性很好的库,所以有时候可以用jquery来解决兼容性问题。但是也因为全面兼容性强变得越来越大,在jQuery2版本里,取消了对IE8以及IE8以前的版本的支持,jQuery的体积有变小了。如果要让jQuery对IE8及以前的版本支持的话需要使用2.0之前的版本。开源世界里javascript的框架有很多,如seajs,requirejs这里做AMD或CMD加载,如angularjs,avalon,backbone这类将View和model分离的框架,都可以加快我们的开发效率,也使前端开发模块化了,但是框架终究是框架,需要学习成本,而且有些框架动辄几十K到100多K,用于内部项目比较合适,用于大pv的网站并不合适,一来速度慢了,二来费用高了。大型网站一般来说是自行架构按需加载。

  这里举一个例子,将json转成目录树(ul,li),当然还需加上样式,加上其他功能如收缩展开,链接等:

<div id="tree">
</div>
<script language="javascript" type="text/javascript">
tree = {"100000":{},"110000":{"200000":{"300000":{}},"210000":{}},"120000":{
    "100000":{},"110000":{"200000":{"300000":{}},"210000":{}},"120000":{}
}};
var treeView = document.getElementById("tree"); 
function display(paraNode, treeJson){
    var haspro = false;
    for(var key in treeJson){
        haspro = true;
        break;
    }

    if(haspro){
        var newUL = document.createElement("ul");
        for(key in treeJson){
            var newLI = document.createElement("li");
            newLI.innerHTML = key;
            newUL.appendChild(newLI);
            display(newLI,treeJson[key]);
        }
        paraNode.appendChild(newUL);
    }
}
display(treeView, tree);
</script>

  11.移动web端,基本未涉足,但是道理是相通的。

自适应的css写法:

@media (min- 768px) {
  .main {
    ......
  }
}

 ----持续更新