- 请简述一下CSS的盒子模型,可以用画的。
答:假设盒子内容宽度200px,高度200px,1个像素的border,padding10个像素,margin8个像素,效果如下图:
- <div id=**”parent”><div class=”class” id=”id”> 想用下面4种选择器对id=”id”进行背景设置,**” #parent div**” “#id” ”#parent .class” 跟 “!important” 哪个选择器的权重更高,请排列一下;**
答:他们之间的权重关系如下: “!important” > ”#parent .class” > “#parent div” > ”#id”
- 清除浮动的方法有哪些?
答:
a:overflow:hidden
b:clear:both
c:clearfix:after{} 伪类
.cf:before, .cf:after {
content:””;
display:table;
}
.cf:after {
clear:both;
}
.cf {
zoom:1;
}
- 在不使用 border 样式的情况下,画出一条一px高的横线,在不同浏览器的Quirksmode和CSSCompat模式下都保持同一效果。
答:用高度1px的盒子设置背景色来模拟。
- 如何居中一个浮动元素?
答:
<div class=”box”>
我是浮动的
我也是居中的
.box{
float:left;
position:relative;
left:50%;
}
p{
float:left;
position:relative;
right:50%;
/ 或者 left:-50% /
}
- html5有哪些新特性?其中哪些是你有深入了解的**?**
答:html5有以下新特性:
a) 用于绘画的 canvas 元素
b) 用于媒介回放的 video 和 audio 元素
c) 对本地离线存储的更好支持
d) 新的特殊内容元素,如 article、footer、header、nav、section
e) 新的表达控件,如 calendar、date、time、email、url、search
- 网页设计使用非标准字体的排版,你将如何实现?
答:考点:对于对新技术的了解,比如css3的@font-face 可以自定义字体,有一些提供在线字体转换的,Cufón在主页上提供了一个字体转换工具,它能将你选择的字体转换,等等,当然最佳的兼容方案还是做成图片,完美展现设计稿。
- 描述一下cookie,sessionStorage和localStorage的区别。
答:Cookie的特点:
cookie的存储限制在了4k之内,相比来说,session storage有了更大的存储空间,但至于具体多大,这要参照浏览器厂商的具体实现。
cookie有一个机制,就是在每次客户端请求服务器的时候都会将cookie发送给服务器,这无疑会做很多不必要的操作,因为并不是每次请求服务器都需要cookie的所有信息,而session storage很好的解决了这个问题,它不是采取自动发送的方式,这样就减少了不必要的工作。
Sessionstorage 的特点:
通过sessionStorage所存储数据的生命周期,和Session类似,关闭浏览器(或标签页)后数据就不存在了。但刷新页面或使用“前进”、“后退按钮”后sessionStorage仍然存在。
session storage每个窗口的值都是独立的(每个窗口都有自己的数据),它的数据会随着窗口的关闭而消失,窗口间的sessionStorage也是不可以共享的。
setItem中的key、value使用的是字符串的形式进行存储的。也就是说如果有如下的代码:setItem(‘count’, 1);通过getItem(‘count’) + 5 得到的将不是预期的6(整数),而是’16’(字符串)。
再次使用setItem设置已经存在的key的value时,新的值将替代旧的值。
当存储中的数据发生改变时,会触发相应的事件(window.onstorage),但目前各浏览器对此事件的支持并不完善,暂时可以忽略。
Local storge的特点:
local storage把只把数据存储在了客户端使用,不会发送的服务器上(除非你故意这样做)。
而且对于某一个域下来说,local storage是共享的(多个窗口共享一个“数据库”)。
localStorage用于持久化的本地存储,除非主动删除数据,否则数据是永远不会过期的。
- 你做的页面在哪些浏览器测试过?经常遇到的兼容性问题有哪些?如何解决?
答:考点:对浏览器的bug的了解以及如何避开解决,平常在实战或者练习的经验等等。
- 图片和文字一起如何通过css实现**垂直文字居中并能兼容常用浏览器的?**
答:考点:图片跟文字的垂直居中是平常接触得比较多的,主要看平常的经验积累以及这些细节方面的处理。
解决方法:在ie6下,需要把图片float left 以后,vertical-align middle 才会有作用, 而且要把图片设置margin-bottom 负值来平衡图片的居中。
- 如果让你来制作一个访问量很高的大型网站,你会如何来管理所有CSS文件、JS与图片?
答:考点:对网站规划方面,综合技术的考量,例如,合并css,合并js,合并小图片,用sprite组合图片减少http请求等。
- 说出3种减少页面加载时间的方法。(感觉上或者真实地减少了时间**)**
答:考点:对yslow优化的理解。 Css放头部,js放底部,小图片合并,压缩js跟css,用ajax来请求,利用ajax缓存技术……
- 未定义(undefined)和未申明(undeclared)变量分别是指什么?
答:一种未定义的变量是从来没有声明过的,尝试读这种未经声明的变量会引起运行时的错误。未被声明的变量(undeclared variable)就是未定义的,因为这样的变量根本不存在。但是,给未声明的变量赋值并不会引起错误,相反,程序会在全局作用域中隐式的声明它。
第二种未定义的变量是已经被声明了但是永远都不会被赋值的变量。如果要读这样的变量的值,将会得到一个默认值,即undefined。
123456 | document.write(a);var a = ‘Hello’;document.write(a);document.write(u);u = ‘MM’;document.write(u); |
---|---|
- 什么是事件冒泡?如何解决冒泡现象?
在一个对象上触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理程序或者事件返回true,那么这个事件会向这个对象的父级对象传播,从里到外,直至它被处理(父级对象所有同类事件都将被激活),或者它到达了对象层次的最顶层,即document对象(有些浏览器是window)。
解决方法:在触发事件的同时,renturn false;或者 stopPropagation();
- 闭包(closure)是什么?闭包的作用是什么?
答:“官方”的解释是:所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。
相信很少有人能直接看懂这句话,因为他描述的太学术。我想用如何在Javascript中创建一个闭包来告诉你什么是闭包,因为跳过闭包的创建过程直接理解闭包的定义是非常困难的。看下面这段代码:
function a(){
var i=0;
function b(){
alert(++i);
}
return b;
}
var c = a();
c();
这段代码有两个特点:
1、函数b嵌套在函数a内部;
2、函数a返回函数b。
这样在执行完var c=a()后,变量c实际上是指向了函数b,再执行c()后就会弹出一个窗口显示i的值(第一次为1)。这段代码其实就创建了一个闭包,为什么?因为函数a外的变量c引用了函数a内的函数b,就是说:
当函数a的内部函数b被函数a外的一个变量引用的时候,就创建了一个闭包。
闭包的作用就是在a执行完并返回后,闭包使得Javascript的垃圾回收机制GC不会收回a所占用的资源,因为a的内部函数b的执行需要依赖a中的变量。
- jQuery 中 .get(), .eq() 的区别?
答:eq返回的是一个jquery对象,get返回的是一个html 对象数组,后面跟JavaScript方法。
绯雨
使用eq来获得第一个p标签的color值:
$(“p”).eq(0).css(“color”) //因为eq(num)返回的是个jq对象,所以可以用jq的方法css
使用get来获得第一个p标签的color值:
$(“p”).get(0).style.color //因为get(num)返回的是个html对象,所以要使用传统的HTML对象方法,jq对象此时就没用了。
当然,你也可以get(num)后把对象转为jq的对象再进行操作:
$($(“p”).get(0)).css(“color”)
- jQuery 中 .bind(), live()的区别是什么?
答:使用 .bind() 时,选择器匹配的元素会附加一个事件处理函数,而以后再添加的元素则不会有。为此需要再使用一次 .bind() 才行。
.live() 就提供了对应这种情况的方法。如果我们是这样绑定click事件的:
$(‘.clickme’).live(‘click’, function() {
alert(“Live handler called.”);
});
然后再添加一个新元素:
$(‘body’).append(‘
然后再点击新增的元素,他依然能触发。
- 优化下面的选择方法:**$(“.foo div#bar:eq(0)”)**
答:$(#bar)
- 你是如何组织你的代码的?(模块模式(module pattern),类继承(classical inheritance)?)
答:考点:对js的综合理解以及平常是否有规范的代码,是否用面向对象来编程。
- AJAX**是什么?如何解决跨域问题?**
答:
Ajax的核心是JavaScript对象XmlHttpRequest。XmlHttpRequest使您可以使用JavaScript向服务器提出请求并处理响应,而不阻塞用户。
解决跨域参考:http://blog.csdn.net/cnbird2008/article/details/7211409
如何解决跨域的具体情况有:
一、本域和子域的相互访问: www.aa.com和book.aa.com
二、本域和其他域的相互访问: www.aa.com和www.bb.com 用 iframe
三、本域和其他域的相互访问: www.aa.com和www.bb.com 用 XMLHttpRequest访问代理
四、本域和其他域的相互访问: www.aa.com和www.bb.com 用 JS创建动态脚本
解决方法:
一、如果想做到数据的交互,那么www.aa.com和book.aa.com必须由你来开发才可以。可以将book.aa.com用iframe添加到www.aa.com的某个页面下,在www.aa.com和iframe里面都加上document.domain = “aa.com”,这样就可以统一域了,可以实现跨域访问。就和平时同一个域中镶嵌iframe一样,直接调用里面的JS就可以了。(这个办法我没有尝试,不过理论可行)
二、当两个域不同时,如果想相互调用,那么同样需要两个域都是由你来开发才可以。用iframe可以实现数据的互相调用。解决方案就是用window.location对象的hash属性。hash属性就是http://domian/web/a.htm#dshakjdhsjka里面的#dshakjdhsjka。利用JS改变hash值网页不会刷新,可以这样实现通过JS访问hash值来做到通信。不过除了IE之外其他大部分浏览器只要改变hash就会记录历史,你在前进和后退时就需要处理,非常麻烦。不过再做简单的处理时还是可以用的,具体的代码我再下面有下载。大体的过程是页面a和页面b在不同域下,b通过iframe添加到a里,a通过JS修改iframe的hash值,b里面做一个监听(因为JS只能修改hash,数据是否改变只能由b自己来判断),检测到b的hash值被修改了,得到修改的值,经过处理返回a需要的值,再来修改a的hash值(这个地方要注意,如果a本身是那种查询页面的话比如http://domian/web/a.aspx?id=3,在b中直接parent.window.location是无法取得数据的,同样报没有权限的错误,需要a把这个传过来,所以也比较麻烦),同样a里面也要做监听,如果hash变化的话就取得返回的数据,再做相应的处理。
三、这种情形是最经常遇到的,也是用的最多的了。就是www.aa.com和www.bb.com你只能修改一个,也就是另外一个是别人的,人家告诉你你要取得数据就访问某某连接参数是什么样子的,最后返回数据是什么格式的。而你需要做的就是在你的域下新建一个网页,让服务器去别人的网站上取得数据,再返回给你。domain1下的a向同域下的GetData.aspx请求数据,GetData.aspx向domain2下的ResponseData.aspx发送请求,ResponseData.aspx返回数据给GetData.aspx, GetData.aspx再返回给a,这样就完成了一次数据请求。GetData.aspx在其中充当了代理的作用。具体可以看下我的代码。
四、这个和上个的区别就是请求是使用