下面为Web前端岗位常见的面试题及答案。
1、一个200*200的div在不同分辨率屏幕上下左右居中,用css实现
div
{
position:absolute;
width:200px;
height:200px;
top:50%;
left:50%;
margin-left:-50px;
height:-50px;
z-index:1000;
}
2、写一个左中右布局占满屏幕,其中左右两块是固定宽度200 ,中间自适应宽,要求先加载中间块,请写出结构及样式:
<body>
<h3>实现三列宽度自适应布局</h3>
<divid="left">我是左边</div>
<divid="right">我是右边</div>
<divid="center">我是中间</div>
</body>
html,body{margin:0px;width:100%;}
h3{height:100px;margin:20px00;}
#left,#right{width:200px;height:200px;background-color:#ffe6b8;position:absolute;top:120px;}
#left{left:0px;}
#right{right:0px;}
#center{margin:2px210px;background-color:#eee;height:200px;}
3、阐述清楚浮动的几种方式(常见问题)
1.父级div定义 height
原理:父级div手动定义height,就解决了父级div无法自动获取到高度的问题。
优点:简单、代码少、容易掌握
缺点:只适合高度固定的布局,要给出精确的高度,如果高度和父级div不一样时,会产生问题
2.父级div定义 overflow:hidden
原理:必须定义width或zoom:1,同时不能定义height,使用overflow:hidden时,浏览器会自动检查浮动区域的高度
优点:简单、代码少、浏览器支持好
4、结尾处加空div标签 clear:both
原理:添加一个空div,利用css提高的clear:both清除浮动,让父级div能自动获取到高度
优点:简单、代码少、浏览器支持好、不容易出现怪问题
缺点:不少初学者不理解原理;如果页面浮动布局多,就要增加很多空div,让人感觉很不好
5、解释css sprites ,如何使用?
CSS Sprites其实就是把网页中一些背景图片整合到一张图片文件中,再利用CSS的“background-image”,“background- repeat”,“background-position”的组合进行背景定位,background-position可以用数字能精确的定位出背景图片的位置。
CSS Sprites为一些大型的网站节约了带宽,让提高了用户的加载速度和用户体验,不需要加载更多的图片
6、如何用原生js给一个按钮绑定两个onclick事件?
Var btn=document.getElementById(‘btn’);
//事件监听 绑定多个事件
var btn4 = document.getElementById("btn4");
btn4.addEventListener("click",hello1);
btn4.addEventListener("click",hello2);
function hello1(){
alert("hello 1");
}
function hello2(){
alert("hello 2");
}
7、拖拽会用到哪些事件
·dragstart:拖拽开始时在被拖拽元素上触发此事件,监听器需要设置拖拽所需数据,从操作系统拖拽文件到浏览器时不触发此事件.
·dragenter:拖拽鼠标进入元素时在该元素上触发,用于给拖放元素设置视觉反馈,如高亮
·dragover:拖拽时鼠标在目标元素上移动时触发.监听器通过阻止浏览器默认行为设置元素为可拖放元素.
·dragleave:拖拽时鼠标移出目标元素时在目标元素上触发.此时监听器可以取消掉前面设置的视觉效果.
·drag:拖拽期间在被拖拽元素上连续触发
·drop:鼠标在拖放目标上释放时,在拖放目标上触发.此时监听器需要收集数据并且执行所需操作.如果是从操作系统拖放文件到浏览器,需要取消浏览器默认行为.
·dragend:鼠标在拖放目标上释放时,在拖拽元素上触发.将元素从浏览器拖放到操作系统时不会触发此事件.
8、请列举jquery中的选择器:
9.Javascript中的定时器有哪些?他们的区别及用法是什么?
setTimeout 只执行一次
setInterval 会一直重复执行
9、请描述一下 cookies sessionStorage和localstorage区别
相同点:都存储在客户端
不同点:1.存储大小
·cookie数据大小不能超过4k。
·sessionStorage和localStorage 虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大。
2.有效时间
·localStorage 存储持久数据,浏览器关闭后数据不丢失除非主动删除数据;
·sessionStorage 数据在当前浏览器窗口关闭后自动删除。
·cookie 设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭
3. 数据与服务器之间的交互方式
·cookie的数据会自动的传递到服务器,服务器端也可以写cookie到客户端
·sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存。
10、计算一个数组arr所有元素的和
var arr1=[1,2,3,4,5,6,7,8,9];
var sum1=0;
for (var i=0;i<=arr1.length;i++) {
if (typeof arr1=="number") {
sum1+=arr1;
}
}
document.write(sum1);
//====================================
functionsum2(arr){
var all=0;
for (var i=0;i<arr.length;i++) {
if (typeof arr=="number") {
all+=arr;
}
}
returnall;
}
document.write(sum2([1,2,3,4]));
11、编写一个方法去掉数组里面 重复的内容 var arr=[1,2,3,4,5,1,2,3]
一个数组去重的简单实现
var arr = ['abc','abcd','sss','2','d','t','2','ss','f','22','d'];
//定义一个新的数组
var s = [];
//遍历数组
for(var i = 0;i<arr.length;i++){
if(s.indexOf(arr) == -1){ //判断在s数组中是否存在,不存在则push到s数组中
s.push(arr);
}
}
console.log(s);
//输出结果:["abc", "abcd", "sss", "2", "d", "t", "ss", "f", "22"]
方法二:用sort() 然后相邻比较也可以实现
12、document.write和innerHTML的区别:
document.write是直接写入到页面的内容流,如果在写之前没有调用document.open, 浏览器会自动调用open。每次写完关闭之后重新调用该函数,会导致页面被重写。
innerHTML则是DOM页面元素的一个属性,代表该元素的html内容。你可以精确到某一个具体的元素来进行更改。如果想修改document的内容,则需要修改document.documentElement.innerElement。
innerHTML将内容写入某个DOM节点,不会导致页面全部重绘
innerHTML很多情况下都优于document.write,其原因在于其允许更精确的控制要刷新页面的那一个部分。
13、ajax的步骤
什么是ajax
ajax(异步javascript xml) 能够刷新局部网页数据而不是重新加载整个网页。
如何使用ajax
第一步,创建xmlhttprequest对象,var xmlhttp =new XMLHttpRequest();XMLHttpRequest对象用来和服务器交换数据。
var xhttp;
if (window.XMLHttpRequest) {
//现代主流浏览器
xhttp = new XMLHttpRequest();
} else {
// 针对浏览器,比如IE5或IE6
xhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
第二步,使用xmlhttprequest对象的open()和send()方法发送资源请求给服务器。
第三步,使用xmlhttprequest对象的responseText或responseXML属性获得服务器的响应。
第四步,onreadystatechange函数,当发送请求到服务器,我们想要服务器响应执行一些功能就需要使用onreadystatechange函数,每次xmlhttprequest对象的readyState发生改变都会触发onreadystatechange函数
14、xml和json的区别,请用四个词语来形容
·JSON相对于XML来讲,数据的体积小,传递的速度更快些
·JSON与JavaScript的交互更加方便,更容易解析处理,更好的数据交互
·XML对数据描述性比较好;
·JSON的速度要远远快于XML
15、清楚浮动的方法?(多次出现在面试题)
1.父级div定义 height
原理:父级div手动定义height,就解决了父级div无法自动获取到高度的问题。
优点:简单、代码少、容易掌握
缺点:只适合高度固定的布局,要给出精确的高度,如果高度和父级div不一样时,会产生问题
2,结尾处加空div标签 clear:both
原理:添加一个空div,利用css提高的clear:both清除浮动,让父级div能自动获取到高度
优点:简单、代码少、浏览器支持好、不容易出现怪问题
缺点:不少初学者不理解原理;如果页面浮动布局多,就要增加很多空div,让人感觉很不好
3,父级div定义 伪类:after 和 zoom
原理:IE8以上和非IE浏览器才支持:after,原理和方法2有点类似,zoom(IE转有属性)可解决ie6,ie7浮动问题
优点:浏览器支持好、不容易出现怪问题(目前:大型网站都有使用,如:腾迅,网易,新浪等等)
缺点:代码多、不少初学者不理解原理,要两句代码结合使用才能让主流浏览器都支持
4,父级div定义 overflow:hidden
原理:必须定义width或zoom:1,同时不能定义height,使用overflow:hidden时,浏览器会自动检查浮动区域的高度
优点:简单、代码少、浏览器支持好
缺点:不能和position配合使用,因为超出的尺寸的会被隐藏。
16、box-sizing常用的属性有哪些?分别有什么作用?
属性值
·box-sizing:content-box
·box-sizing:border-box
·box-sizing:inherit
content-box
·这是box-sizing的默认属性值
·是CSS2.1中规定的宽度高度的显示行为
·在CSS中定义的宽度和高度就对应到元素的内容框
·在CSS中定义的宽度和高度之外绘制元素的内边距和边框
border-box
·在CSS中微元素设定的宽度和高度就决定了元素的边框盒
·即为元素在设置内边距和边框是在已经设定好的宽度和高度之内进行绘制
·CSS中设定的宽度和高度减去边框和内间距才能得到元素内容所占的实际宽度和高度
(Q1)box-sizing: content-box|border-box|inherit;
(Q2)content-box:宽度和高度分别应用到元素的内容框。在宽度和高度之外绘制元素的内边距和边框(元素默认效果)。
border-box:元素指定的任何内边距和边框都将在已设定的宽度和高度内进行绘制。通过从已设定的宽度和高度分别减去边框和内边距才能得到内容的宽度和高度。
17、css选择器有哪些,选择器的权重的优先级
选择器类型
1、ID #id
2、class .class
3、标签 p
4、通用 *
5、属性 [type="text"]
6、伪类 :hover
7、伪元素 ::first-line
8、子选择器、相邻选择器
三、权重计算规则
1.第一等:代表内联样式,如: style=””,权值为1000。
2.第二等:代表ID选择器,如:#content,权值为0100。
3.第三等:代表类,伪类和属性选择器,如.content,权值为0010。
4.第四等:代表类型选择器和伪元素选择器,如div p,权值为0001。
5.通配符、子选择器、相邻选择器等的。如*、>、+,权值为0000。
6.继承的样式没有权值。
18、块级元素水平垂直居中的方法有哪些(三个方法)
让div等块级元素水平和垂直都居中,即永远处于屏幕的正中央,当我们做如登录块时非常有用!
实现一、原理:要让div等块级元素水平和垂直居中,必需知道该div等块级元素的宽度和高度,然后设置位置为绝对位置,距离页面窗口左边框和上边框的距离设置为50%,这个50%就是指页面窗口的宽度和高度的50%,最后将该div等块级元素分别左移和上移,左移和上移的大小就是该div等块级元素宽度和高度的一半。
CSS代码:
.mycss{
width:300px;
height:200px;
position:absolute;
left:50%;
top:50%;
margin:-100px 0 0 -150px }
实现二原理:利用CSS的margin设置为auto让浏览器自己帮我们水平和垂直居中。
CSS代码:
.mycss{
position:absolute;
left:0px;
right:0;
top:0;
bottom:0;
margin:auto;
height:200px;
width:300px;
}
jQuery实现水平和垂直居中
原理:jQuery实现水平和垂直居中的原理就是通过jQuery设置div等块级元素的CSS,获取div等块级元素的左、上的边距偏移量,边距偏移量的算法就是用页面窗口 的宽度减去该div等块级元素的宽度,得到的值再除以2即左偏移量,右偏移量算法相同。注意div等块级元素的CSS设置要在resize()方法中完成,就是每次改变窗口大 小时,都要执行设置div等块级元素的CSS。
jquery代码:
$(window).resize(function(){
$(".myblock").css({
position: "absolute",
left: ($(window).width() - $(".myblock").outerWidth())/2,
top: ($(window).height() - $(".myblock").outerHeight())/2 });
});
此外在页面载入时,就需要调用resize()方法
$(function(){
$(window).resize();
});
19、三个盒子,左右定宽,中间自适应有几种方法
第一种:左右侧采用浮动 中间采用margin-left 和 margin-right 方法。
代码如下:
<div style="width:100%; margin:0 auto;">
<div style="width:200px; float:right; background-color:#960">这是右侧的内容 固定宽度</div>
<div style="width:150px; float:left; background:#6FF">这是左侧的内容 固定宽度</div>
<div style="margin-left:150px;margin-right:200px; background-color:#9F3">中间内容,自适应宽度</div>
</div>
第二种:左右两侧采用绝对定位中间同样采用margin-left margin-right方法:
第三种负的margin
使用这种方法就稍微复杂了一些了,使用的是负的margin值,而且html标签也增加了,先来看其代码吧:
<div id="main">
<div id="mainContainer">main content</div></div><div id="left">
<div id="leftContainer"class="inner">left content</div></div><div id="right">
<div id="rightContainer"class="inner">right</div></div>
#main {
float:left;
width:100%;
}
#mainContainer {
margin:0 230px;
height:200px;
background:green;
}
#left {
float:left;
margin-left:-100%;
width:230px}
#right {
float:left;
margin-left:-230px;
width:230px;
}
#left .inner,
#right .inner {
background:orange;
margin:0 10px;
height:200px;
}
20、js有几种数据类型,其中基本数据类型有哪些
五种基本类型:Undefined、Null、Boolean、Number和String。
1中复杂的数据类型————Object,Object本质上是由一组无序的名值对组成的。
Object、Array和Function则属于引用类型
以上是较为常见的Web前端开发面试题,虽然各企业对于Web前端岗位的需求不一样,面试题目方向也会有所不同,但万变不离其宗,多看总是有好处的。