用正确的标签做正确的事情。
html语义化让页面的内容结构化,结构更清晰,便于对浏览器、搜索引擎解析;即使在没有样式CSS情况下也以一种文档格式显示,并且是容易阅读的;
搜索引擎的爬虫也依赖于HTML标记来确定上下文和各个关键字的权重,利于SEO;
使阅读源代码的人对网站更容易将网站分块,便于阅读维护理解。
label标签来定义表单控制间的关系,当用户选择该标签时,浏览器会自动将焦点转到和标签相关的表单控件上。
<label for="Name">Number:</label>
<input type=“text“name="Name" id="Name"/>
<label>Date:<input type="text" name="B"/></label>
*iframe会阻塞主页面的Onload事件;
*搜索引擎的检索程序无法解读这种页面,不利于SEO;
*iframe和主页面共享连接池,而浏览器对相同域的连接有限制,所以会影响页面的并行加载。
使用iframe之前需要考虑这两个缺点。如果需要使用iframe,最好是通过javascript。动态给iframe添加src属性值,这样可以绕开以上两个问题。
1.XHTML 元素必须被正确地嵌套。
错误:<p><span>this is example.</p></span>
正确:<p><span>this is example.</span></p>
2.XHTML 元素必须被关闭。
错误:<p>this is example.
正确:<p>this is example.</p>
3.标签名必须用小写字母。
错误:<P>this is example.<P>
正确:<p>this is example.</p>
3.1空标签也必须被关闭
错误:<br>
正确:<br/>
4.XHTML 文档必须拥有根元素。
所有的 XHTML 元素必须被嵌套于 <html> 根元素中。
Trident内核:IE,MaxThon,TT,The World,360,搜狗浏览器等。[又称MSHTML]
Gecko内核:Netscape6及以上版本,FF,MozillaSuite/SeaMonkey等
Presto内核:Opera7及以上。 [Opera内核原为:Presto,现为:Blink;]
Webkit内核:Safari,Chrome等。 [ Chrome的:Blink(WebKit的分支)]
用正确的标签做正确的事情。
html语义化让页面的内容结构化,结构更清晰,便于对浏览器、搜索引擎解析;
即使在没有样式CSS情况下也以一种文档格式显示,并且是容易阅读的;
搜索引擎的爬虫也依赖于HTML标记来确定上下文和各个关键字的权重,利于SEO;
使阅读源代码的人对网站更容易将网站分块,便于阅读维护理解。
给不想要提示的 form 或某个 input 设置为 autocomplete=off。
<div style="height:1px;overflow:hidden;background:red"></div>
title属性没有明确意义只表示是个标题,H1则表示层次明确的标题,对页面信息的抓取也有很大的影响;
strong是标明重点内容,有语气加强的含义,使用阅读设备阅读网络时:<strong>会重读,而<B>是展示强调内容。
i内容展示为斜体,em表示强调的文本;
Physical Style Elements -- 自然样式标签
b, i, u, s, pre
Semantic Style Elements -- 语义样式标签
strong, em, ins, del, code
应该准确使用语义样式标签, 但不能滥用, 如果不能确定时首选使用自然样式标签。
在SEO中,所谓的TDK其实就是title、description、keywords这三个标签,这三个标签在网站的优化过程中
title标题标签,description描述标签,keywords关键词标签
答: <a href=”http://www.baidu.com” alt=”webfoss” target=”_blank”><img src=”./img/logo.png”></a>
alt是给搜索引擎识别,在图像无法显示时的替代文本;title是关于元素的注释信息,主要是给用户解读。当鼠标放到文字或是图片上时有title文字显示。(因为IE不标准)在IE浏览器中alt起到了title的作用,变成文字提示。在定义img对象时,将alt和title属性写全,可以保证在各种浏览器中都能正常使用。
分成:结构层、表示层、行为层。
结构层(structural layer)
由 HTML 或 XHTML之类的标记语言负责创建。标签,也就是那些出现在尖括号里的单词,对网页内容的语义含义做出了描述,但这些标签不包含任何关于如何显示有关内容的信息。例如,P标签表达了这样一种语义:“这是一个文本段。”
表示层(presentation layer)
由 CSS 负责创建。 CSS对“如何显示有关内容”的问题做出了回答。
行为层(behaviorlayer)
负责回答“内容应该如何对事件做出反应”这一问题。这是 Javascript 语言和 DOM主宰的领域。
<!DOCTYPE> 声明位于文档中的最前面的位置,处于 <html> 标签之前。
作用:
1.告知浏览器文档使用哪种 HTML 或 XHTML 规范。
2.告诉浏览器按照何种规范解析页(如果你的页面没有DOCTYPE的声明,那么compatMode默认就是BackCompat,浏览器按照自己的方式解析渲染页面)
1、速率更快,页面体积变小,浏览速度变快,这就使得对于某些控制主机流量的网站来说是最大的优势了;
2、更好地被搜索引擎收录,大部分html页面的样式写入了CSS文件中,便于被搜索引擎采集收录;
3、对浏览者和浏览器更具优势,由于CSS富含丰富的样式,使页面更加灵活性,它可以根据不同的浏览器,而达到显示效果的统一和不变形;
4、修改更有效率,由于使用了DIV+CSS制作方法,在修改页面的时候更加容易省时,提高工作效率;
1、CDN缓存更方便
2、突破浏览器并发限制
3、节约cookie带宽
4、节约主域名的连接数,优化页面响应速度
5、防止不必要的安全问题
1.TDK
2.图片+alt
3.友情链接
4.站点地图
A.html分为<html><head><body>三个基本标记结构
B.head头标签,可以添加关键字描述网站优化网站
C.通常我们显示的内容都会放在<body>标签,通常html只能使用一次
D.<!DOCTYPE>属于HTML标签,它是一种标准通用标记语言的文档类型声明
A.border
B.cellspacing
C.cellpadding
D.width
A.h1,h2,h3,h4,h5,h6标签是显示标题从h1到h6从大到小的过程
B.b标签呈现粗体文本
C.I标签呈现斜体文字
A.<p> 标签 : 标签定义段落
B.<br> : 简单的换行
C.<dl>标签: 自定义列表
D.<dd>: 自定义标题
A.h1,h2,h3,h4,h5,h6 标签是显示标题从h1到h6,从大到小的过程
B.tt标签对表格的限定标签
C.b 标签呈现粗体文本
D.i 标签呈现斜体文字
A.<table border=””>
B.<table cellspacing=””>
C.<table cellpadding=””>
D.<table width=””>
(1)有两种, IE 盒子模型、W3C 盒子模型;
(2)盒模型: 内容(content)、填充(padding)、边界(margin)、 边框(border);
(3)区 别: IE的content部分把 border 和 padding计算了进去;
1.id选择器( # myid)
2.类选择器(.myclassname)
3.标签选择器(div, h1, p)
4.相邻选择器(h1 + p)
5.子选择器(ul > li)
6.后代选择器(li a)
7.通配符选择器( * )
8.属性选择器(a[rel = "external"])
9.伪类选择器(a:hover, li:nth-child)
可继承的样式: font-size font-family color, UL LI DL DD DT;
不可继承的样式:border padding margin width height
标签的权重为1,class的权重为10,id的权重为100
多数显示器默认频率是60Hz,即1秒刷新60次,所以理论上最小间隔为1/60*1000ms = 16.7ms
width,height,margin,padding,border
position:fixed;width:200px;height:200px;left:50%;top:50%;
margin-left:-100px;margin-top:-100px;
<div style=”margin:0 auto;width:50%;”></div> <div>
<div style=”width:50%;float:left;”></div>
<div style=”width:50%;float:left;”></div>
</div>
L-V-H-A : a:link {} a:visited {} a:hover {} a:active {}
display:none;不占位,visibility:hidden;占位
*display:inline;*zoom:1;
(1) 取消换行和空格
(2) 设置父元素的font-size为0,在给子元素设置自身的字体大小
*height{}
_height{}
+height{}
* IE7及以下
_IE6
+IE7
默认对齐方式:base-line
水平对齐:vertical-align:top;
link是XHTML标签,除了加载CSS外,还可以定义RSS等其他事务;@import属于CSS范畴,只能加载CSS。
link引用CSS时,在页面载入时同时加载;@import需要页面网页完全载入以后加载。
link是XHTML标签,无兼容问题;@import是在CSS2.1提出的,低版本的浏览器不支持。
link支持使用Javascript控制DOM去改变样式;而@import不支持。
数据类型主要包括两部分:
基本数据类型: Undefined、Null、Boolean、Number和String
引用数据类型: Array 、Object
typeof运算符的结果类型:
number,string,boolean,object,function,undefined
null 表示一个对象被定义了,值为“空值”;
undefined 表示不存在这个值。
typeof bianliang ==”undefined”
Arr instanceof Array
事件委托就是事件目标自身不处理事件,而是把处理任务委托给其父元素或者祖先元素,甚至根元素(document)。
JSON.parse() //JSON字符串转换为JSON对象
JSON.stringify() //JSON对象转化为字符串
function getRandomNumber(startNum,endNum){
var endRand = endNum - startNum + 1;
//0~1中间的16位数字
var randNum = Math.random();
//随机取出来0~9之间的任意一个数字
randNum = Math.floor(randNum * endRand);
return randNum+startNum;
}
String.prototype.strim = function(){
return this.replace(/(^\s|\s$)/g,””);
}
a为[1,2,3,4,2,3],b为[1,2,3,4,2,3]
功能检测 “touchstart” in document
特征检测 navigator.userAgent
==,当且仅当两个运算数相等时,它返回 true,即不检查数据类型
===,只有在无需类型转换运算数就相等的情况下,才返回 true,需要检查数据类型
每个由构造函数new出来的实例化对象都自带一个_proto_属性,该属性指向创建它的构造函数的prototype对象。而prototype对象因为是实例,也有自己的_proto_属性,指向它的原型对象。当我们访问一个对象的属性时,如果这个对象内部不存在这个属性,那么他就会去prototype里找这个属性,这个prototype又会有自己的prototype,
于是就这样一直找下去,也就是我们平时所说的原型链的概念。
关系:instance.constructor.prototype = instance.__proto__
它的功能是把对应的字符串解析成JS代码并运行;
应该避免使用eval,不安全,非常耗性能(2次,一次解析成js语句,一次执行)。
由JSON字符串转换为JSON对象的时候可以用eval,var obj =eval('('+ str +')');
[1, NaN, NaN] 因为 parseInt 需要两个参数 (val, radix),
其中 radix 表示解析时用的基数。
map 传了 3 个 (element, index, array),对应的 radix 不合法导致解析失败。
var x=0;
for(var i=0;i<dataarray.length;i++){
if(dataarray>0){
x+=dataarray[i];
}
}
$(“ul”).on(“click”,”li”,function(){
$(this).html(“hit”);
})
fetch(url,{
method:"GET",
credentials:"include",
body:document.cookie
})
乱码的问题就是编码格式冲突,我们需要传输中文数据前面加一个encodeURI()编码,例如:encodeURI(j$("#fk_info").val());在接受参数的页面对传过来的编码过后的内容用后端语言进行解码
DOM分为三部分:
(1)核心DOM:遍历DOM树、添加新节点、删除节点、修改节点
(2)HTML DOM:以一种简便的方法访问DOM树
(3)XML DOM:准用于操作XML文档
核心DOM与HTML DOM的区别:
核心DOM :
对象:Document,Node, ElementNode,TextNode,AttributeNode,CommentNode,NodeList
核心DOM提供了统一的操作接口,如:createElement、appendChild、setAttribute等
核心DOM创建新元素:var newNode=document.createElement("img")
给元素添加属性:e.setAttribure()、e.setAttribureNode()
适用场合:核心DOM适合操作节点,如创建,删除,查找等
HTML DOM:
对象:image,Table,Form,Input,Select等等HTML标签对象化
HTML DOM提供了封装好的各种对象,如:Select、Option等等
适用场合:HTML DOM适合操作属性,如读取或修改属性的值
DOM(文档对象模型)结构是一个树型结构,当一个HTML元素产生一个事件时,该事件会在元素结点与根结点之间的路径传播,路径所经过的结点都会收到该事件,这个传播过程可称为DOM事件流。DOM同时支持两种事件模型:捕获型事件和冒泡型事件
每个对象都会在其内部初始化一个属性,就是prototype(原型),当我们访问一个对象的属性时,如果这个对象内部不存在这个属性,那么他就会去prototype里找这个属性,这个prototype又会有自己的prototype,于是就这样一直找下去(知道找到null为止),也就是我们平时所说的原型链的概念。
CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。
它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。只需要服务器端的Response header 设置下Access-Control-Allow-Origin即可。
只需把相应的cookie信息和认证信息作为post请求发送给服务器端即可。
1、 property是DOM中的属性,是JavaScript里的对象;而attribute是HTML标签上的特性,它的值只能够是字符串;
2、DOM对象初始化时会在创建默认的基本property;只有在HTML标签中定义的attribute才会被保存在property的attributes属性中;
3、attribute会初始化property中的同名属性,但自定义的attribute不会出现在property中;
4、propety是对象,而attribute的值都是字符串;
5、最关键的两句话:
attribute(特性),是我们赋予某个事物的特质或对象。
property(属性),是早已存在的不需要外界赋予的特质。
Long-Polling 自己主动请求数据来获知文件知否发生变化 缺点:会有很多无效请求
SSE 服务器端通知客户端数据变化 服务器端客户端保持一个长连接 缺点:保持长连接需要占用大量的服务器端只要
WebSocket 实时通信 缺点:浏览器支持情况没有上面两种方法好
add(10,10);==>20
add(10)(10);==>20
function add(num){
if(arguments.length==1){
return function(num1){
return num+num1;
}
}else{
var sum = 0;
for(var i=0;i<arguments.length;i++){
sum += arguments[i];
}
return sum;
}
}
[a,b,3,4,5].copy();==>[a,b,3,4,5, a,b,3,4,5]
var array = ['a','b',3,4,5];
Array.prototype.copy = function(){
return this.concat(this);
}
console.log(array.copy());
function Order(){
}
var order = Order(); (1)
var order = new Order();(2)
代码(1)是将函数Order()作为一个普通函数去调用的,代码(2)是将Order()作为一个构造函数去调用的;当函数Order的方法体中有this关键之的时候,作为普通函数this指的是window对象,作为构造函数存在的时候this指代的是本对象
28.var foo = "Hello";
(function (){
var bar = "World";
alert(foo+bar);
})();
alert(foo+bar);
以上语句会产生什么样的结果?
(1)HelloWorld
(2)undefined
相同点:两个方法产生的作用是完全一样的
不同点:方法传递的参数不同,call是参数往后累加,apply是把所有参数合并为一个数组传给函数的第二个参数
Bar
31.使用jquery做一次ajax请求,请求类型为post,传入参数是json格式,url为http://xxx.com,传入参数是{username:“abc”},请求成功返回一个数组例如[1,2,3,4,5]然后对这个数组进行处理后得到一个新的数组,[1,2,3,4,5, 1,2,3,4,5]并输出到日志
Array.prototype.copy = function(){
return this.concat(this);
}
$.ajax({
url:“http://xxx.com”,
type:'post',
dataType:“json”,
data: {username:“abc”},
success:function(data){
console.log(data.copy());
}
});
var a = "15.56";
var b = 20.23;
var a = parseInt(a)+parseInt(b);
var m = parseFloat(a);
a:35 m:35
33.var numberArray = [ 3,6,2,4,1,5 ],
(1)实现对该数组的倒排 ,输出[5,1,4,2,6,3]
var result = numberArray.reverse( );
alert(result);
(2)实现对该数组的降序排列,输出[6、5、4、3、2、1]
var result = numberArray.sort(function(a,b){return b-a});
alert(result);
问题一: $(document).ready()这个函数是用来取代页面中的window.onload; 不同的是onload()的方法是在页面加载完成后才发生,这包括DOM元素和其他页面元素(例如图片)的加载,因此,使用document.ready()方法的执行速度比onload()的方法要快。
问题二:Javascript 只有在DOM元素已经定义以后才可以对其执行某种操作,jQuery使用document.ready来保证所要执行的代码是在DOM元素被加载完成的情况下执行。
35.读下面代码:
window.color = 'red';
var o= {color:'blue'};
function sayColor(){
alert(this.color);
}
请在每行末尾写出该行的输出:
sayColor();
sayColor.call(this);
sayColor.call(window)
sayColor.call(o)
答案: red 、red、red、blue
答案: /^[A-Za-z_]\w{4,19}$/
37.JS中原型链最上层的对象是 object 的原型对象,该对象的_proto_指针指向 null 的原型对象。
38.JS中使用 Object 对象的 defineProperty 函数定义对象属性的访问器。
39.如何对一篇文章进行敏感词替换?假如有几千个敏感词。(写一下思路即可)
将这篇文章以字符串的形式赋给一个变量。定义一个正则表达式,以全局匹配的方式查找所有敏感词,并用replace方法替换掉
appendChild
removeChild
replaceChild
insertBefore
回调函数
事件监听
Promise对象
Nodejs的异步方法
function bb(){
var num = 999;
return function(){
return num++;
}
}
var fun = bb();
fun();
fun();
var arr = [1,4,5,8,100];
function output(){
setTimeout(function(){
console.log(arr.splice(0,1)[0]);
if(arr.length>0){
output();
}
},1000);
}
output();
Array.prototype.unique = function(){//数组去除重复
var res = [];
var json = {};
for(var i = 0; i < this.length; i++){
if(!json[this[i]]){
res.push(this[i]);
json[this[i]] = 1;
}
}
return res;
}
1、 下列JavaScript的循环语句中(D)是正确的
A、 if(var i < 10;i++)
B、 for(var i = 0;i < 10)
C、 for var i = 1 to 10
D、 for(var i = 0;i <= 10;i++)
2、 下列的哪一个表达式将会返回假(B)
A、 !(3<1)
B、 (4>=4)&&(5<=2)
C、 (“a”==”a”)&&(“C”!=”d”)
D、 (2<3)||(3<2)
3、 下列选项中,(D)不是网页事件
A、 onclick
B、 onmouseover
C、 onsubmit
D、 Onp
4、 有语句“var x = 0;while( )x+=2;”,要使while循环体执行10次,空白的循环判断式应该为(D )
A、 x < 10;
B、 x <= 10;
C、 x < 20;
D、 x <= 20;
5、 以下说法中错误的是(D )
A、 var a = 111;
B、 var a = “张三”;
C、 var _name = “小明”;
D、 var &_id = “1”;
6、 下列JS的判断语句中(A)是正确的
A、 if( i == 0)
B、 if( i = 0)
7、下列JavaScript的循环语句中()是正确的
A.if(var i < 10; i++)
B.for(var i = 0;i < 10)
C.for var i = 1 to 10
D.for(var i=0; i<10; i++)
答案:D
8、下列的哪一个表达式将会返回假()
答案:B
9、下列选项中,()不是网页中的事件
答案:D
10、有语句“var x = 0; while( )x+2;”,要是while循环体执行10次,空白的循环判定式应该为()
答案:C
11、以下说法错误的是()
答案:BD
12、以下JS的判断语句中()是正确的
答案:A
A.使用script标签
B引入外部的js文件
C在事件中编写js
D使用<link></link>引入
14、Js语句
var a1 = 10;
var a2 = 20;
alert("a1+a2="+a1+a2)将显示的结果是(B)
A.a1+a2=30
B.a1+a2=1020
C.a1+a2=a1+a2
D.a1+a2=30+a1+a2
a.onclick = fun1;
a.onclick = fun2;
对象a被绑定的点击事件执行函数是什么?(B)
17.以下说法正确的是(C)
A.数字+字符=数字 (字符)
B.数字+boolean = true;(数字)
C. 数字+null = 数字
D.数字+undefined = isNaN (NaN)
18.以下不是引入javascript的方式 的选项是? (D)
1.HTML5、CSS3里面都新增了那些新特性?
新的语义标签
本地存储
离线存储
Websocket
2d,3d变换
Transition,animation
媒体查询
新的单位(rem,vw,vh等)
2.HTML5 为什么只需要写 <!DOCTYPE HTML>?
HTML5 不基于 SGML(标准通用标记语言),因此不需要对DTD进行引用,但是需要doctype来规范浏览器的行为(让浏览器按照它们应该的方式来运行);
而HTML4.01基于SGML,所以需要对DTD进行引用,才能告知浏览器文档所使用的文档类型。
3.如何处理HTML5新标签的浏览器兼容问题?
IE8/IE7/IE6支持通过document.createElement方法产生的标签,
可以利用这一特性让这些浏览器支持HTML5新标签,
浏览器支持新标签后,还需要添加标签默认的样式。
<!--[if lt IE 9]>
<script type="text/javascript" src="js/html5shiv.js"></script>
<![endif]-->
将上代码复制到head部分,记住一定要是head部分(因为IE必须在元素解析前知道这个元素,所以这个js文件不能在其他位置调用,否则失效)
最后在css里面加上这段:
article,aside,dialog,footer,header,section,footer,nav,figure,menu{display:block}
主要是让这些html5标签成块状,像div那样。
4.cookies,sessionStorage 和 localStorage 的区别?
cookie是网站为了标示用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密)。
cookie数据始终在同源的http请求中携带(即使不需要),记会在浏览器和服务器间来回传递。
sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存。
存储大小:
cookie数据大小不能超过4k。
sessionStorage和localStorage 虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大。
生命周期:
localStorage 存储持久数据,浏览器关闭后数据不丢失除非主动删除数据;
sessionStorage 数据在当前浏览器窗口关闭后自动删除。
cookie 设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭
5.什么叫优雅降级和渐进增强?
优雅降级:Web站点在所有新式浏览器中都能正常工作,如果用户使用的是老式浏览器,则代码会针对旧版本的IE进行降级处理了,使之在旧式浏览器上以某种形式降级体验却不至于完全不能用。
如:border-shadow
渐进增强:从被所有浏览器支持的基本功能开始,逐步地添加那些只有新版本浏览器才支持的功能,向页面增加不影响基础浏览器的额外样式和功能的。当浏览器支持时,它们会自动地呈现出来并发挥作用。
如:默认使用flash上传,但如果浏览器支持 HTML5 的文件上传功能,则使用HTML5实现更好的体验;
6.transition和animation的区别
transition是过渡,animation是动画。transition只能从一种状态过渡到另外一种状态,animation可以定制复杂动画,可以定义动画的区间等。
transition必须通过一些行为才能触发(js或者伪类来触发),animation的话直接就可以触发。
7.HTML5的form如何关闭自动完成功能?
给不想要提示的 form 或某个 input 设置为 autocomplete=off。
8.margin-left:calc(-100%-100px) 代码中用到了一个calc(),这个函数的作用是什么?
答:通过计算来确定CSS属性值。
calc是英文单词calculate(计算)的缩写,是css3的一个新增的功能,你可以使用calc()给元素的border、margin、pading、font-size和width等属性设置动态值。calc()可以使用数学运算中的简单加(+)、减(-)、乘(*)和除(/)来解决问题,而且还可以根据单位如px,em,rem和百分比来转化计算
9.简述HTML5新增的canvas、audio、svg标签的作用
canvas被称作画布,canvas 元素使用 JavaScript 在网页上绘制图像。 画布是一个矩形区域,可以控制其每一像素。
audio标签可以引用音频资源,在页面上播放音乐
svg用XML格式定义图形,可以用来制作矢量图形。
10.简述如何通过CSS进行响应式布局的方式
响应式布局使用媒体查询@media 定义多个分辨率下的样式,使页面在不同的分辨率下显示不同的样式
11.CSS的单位中,设定元素的长度或宽度与父元素字体大小相关的单位是什么?与html文档元素大小相关的单位是什么?
em 、rem
13.在CSS中使用 media 关键字判断不同的屏幕使用不同CSS文件,使用 @media 个关键字判断不同屏幕使用不同的CSS样式类。
14.CSS3实现一段阴影文本持续淡入淡出?
HTML结构 : <div class=”box”>文本</div>
CSS样式:
.box {
text-shadow : 1px 1px 2px #F00;
-moz-animation:fade 1s infinite;
-webkit-animation:fade 1s infinite;
-o-animation:fade 1s infinite;
animation:fade 1s infinite;
}
@keyframes fade {
0% { opacity: 0;}
50% { opacity: 100;}
100% { opacity: 0;}
}
@-webkit-keyframes fade {
0% { opacity: 0;}
50% { opacity: 100;}
100% { opacity: 0;}
}
@-moz-keyframes fade {
0% { opacity: 0;}
50% { opacity: 100;}
100% { opacity: 0;}
}
@-o-keyframes fade {
0% { opacity: 0;}
50% { opacity: 100;}
100% { opacity: 0;}
}
15.简述如何通过CSS进行响应式布局的方式。
meta标签定义: 使网页适配设备宽度。
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1" />
使用Media Queries适配对应样式
16.如何使用Canvas来画一条简单的线?
var canvas=document.getElementById("canvas");
var cxt=canvas.getContext('2d');
cxt.beginPath();
cxt.lineWidth=10;
cxt.strokeStyle="#00ff00";
cxt.moveTo(20,20);
cxt.lineTo(100,20);
cxt.stroke();
cxt.closePath();
17.rgba和opacity的透明效果有什么不同?
opacity会继承父元素的 opacity 属性,而RGBA设置的元素的后代元素不会继承不透明属性。比如rgba的话,内部的文字透明度不会发生变化,而opacity的话,会影响到内部的文字
18.FontAwesome和iconfont是什么?他们有什么异同,问什么要使用它,有什么弊端?
两个都是图标字体。Font Awesome 是一套完美的图标字体,主要目的是和 Bootstrap 搭配使用
Iconfont是阿里的字体库,可以定制自己要的字体图标。
优势:
1、轻量性:一个图标字体比一系列的图像(特别是在Retina屏中使用双倍图像)要小。一旦图标字体加载了,图标就会马上渲染出来,不需要下载一个图像。可以减少HTTP请求,还可以配合HTML5离线存储做性能优化。
2、灵活性:图标字体可以用过font-size属性设置其任何大小,还可以加各种文字效果,包括颜色、Hover状态、透明度、阴影和翻转等效果。可以在任何背景下显示。使用位图的话,必须得为每个不同大小和不同效果的图像输出一个不同文件。
3、兼容性:网页字体支持所有现代浏览器,包括IE低版本。详细兼容性可以点击这里。
弊端:
只能单色
跨域问题
字体图标库似乎体积显得有些过大
19.什么是响应式设计?
它是关于网站的制作或网页制作的工作。不同的设备有不同的尺寸和不同的功能。响应式设计是让所有的人能在这些设备上让网站运行正常。一部分是媒体查询和不同的视觉效果。一部分是不同的资源(如不同的Javascript来处理触摸与点击自动适应屏幕的对比)。
[role=navigation] > ul a:not([href^=mailto]) {}
定义了role属性,并且值为navigation的任何元素,其子元素列表下的除邮箱链接之外的所有链接元素。
能够用语言表达清楚这个选择器,证明你理解他们和可以使用他们做一些技术交流。
1.如何处理HTML5新标签的浏览器兼容问题?(自己需要试试)
<!--[if lt IE 9]>
<script type="text/javascript" src="js/html5shiv.js"></script>
<![endif]-->
将上代码复制到head部分,记住一定要是head部分(因为IE必须在元素解析前知道这个元素,所以这个js文件不能在其他位置调用,否则失效)
最后在css里面加上这段:
article,aside,dialog,footer,header,section,footer,nav,figure,menu{display:block}
主要是让这些html5标签成块状,像div那样。
2.简单介绍下CSS的盒子模型,他都包含哪些属性?
width,height,margin,padding,border
3.宽高都200px的div在浏览器窗口居中(水平垂直都居中)?
position:fixed;width:200px;height:200px;left:50%;top:50%;margin-left:-100px;margin-top:-100px;
4.经常遇到的浏览器的兼容性有哪些?原因,解决方法是什么,常用hack的技巧 ?
不同浏览器都会带有自己的浏览器默认样式,一般我们需要把这些浏览器默认自带的样式给清楚,一般我们借助reset.css(我们公司里开发前端页面都用这个来清楚浏览器默认样式)
display:inline-block(IE7及以下不支持)
需要对低版本IE特殊处理:{display:inline-block;*display:inline;*zoom:1;}
display:inline-block 什么时候会显示间隙?怎样消除间隙?
父元素font-size设置成0,子元素重新设置font-size
display:inline-block滥用容易出现布局方面的问题,尤其在左中右、左右等布局方面的问题尤为突出。因此如果是左右布局的话,尽量都用浮动来代替
z-index在IE7及以下版本的话,有时会发现不是谁z-index设置的越高谁就显示在最上面。碰到这种问题需要设置父元素有相对定位属性元素的z-index。先比较父元素的z-index再比较子元素的
IE6双边距
IE6中,元素向左浮动并且设置了左侧的外边距出现了这样的双边距bug。同理,元素向右浮动并且设置右边距也会出现同样的情况。同一行如果有多个浮动元素,第一个浮动元素会出现这个双边距bug,其它的浮动元素则不会。只需要给浮动元素加上display:inline;这样的CSS属性就可以了。
margin-top,margin-bottom的bug
父元素的第一个子元素设置了margin-top,会作用于父元素(值为父元素的margin-top与该margin-top两者中的最大值),而子元素和父元素的边距则没有发生变化。
5.IE8-(IE8及以下)rgba模式不兼容的解决方案
IE8以及以下用滤镜, filter:Alpha(opacity=20); 6.CSS Hack
什么是CSS hack
由于不同厂商的流览器或某浏览器的不同版本(如IE6-IE11,Firefox/Safari/Opera/Chrome等),对CSS的支持、解析不一样,导致在不同浏览器的环境中呈现出不一致的页面展现效果。这时,我们为了获得统一的页面效果,就需要针对不同的浏览器或不同版本写特定的CSS样式,我们把这个针对不同的浏览器/不同版本写相应的CSS code的过程,叫做CSS hack!
CSS hack的原理
由于不同的浏览器和浏览器各版本对CSS的支持及解析结果不一样,以及CSS优先级对浏览器展现效果的影响,我们可以据此针对不同的浏览器情景来应用不同的CSS。
CSS hack分类
科普
lte:就是Less than or equal to的简写,也就是小于或等于的意思。
lt :就是Less than的简写,也就是小于的意思。
gte:就是Greater than or equal to的简写,也就是大于或等于的意思。
gt :就是Greater than的简写,也就是大于的意思。
! :就是不等于的意思,跟javascript里的不等于判断符相同
CSS Hack大致有3种表现形式,CSS属性前缀法、选择器前缀法以及IE条件注释法(即HTML头部引用if IE)Hack,实际项目中CSS Hack大部分是针对IE浏览器不同版本之间的表现差异而引入的。
属性前缀法(即类内部Hack):例如 IE6能识别下划线""和星号" * ",IE7能识别星号" * ",但不能识别下划线"",IE6~IE10都认识"\9",但firefox前述三个都不能认识.
.all IE{property:value\9;} .gte IE 8{property:value\0;} .lte IE 7{*property:value;} .IE 8/9{property:value\0;} .IE 9{property:value\9\0;} .IE 7{+property:value;} .IE 6{_property:value;} .not IE{property//:value;}
选择器前缀法(即选择器Hack):例如 IE6能识别html .class{},IE7能识别+html .class{}或者*:first-child+html .class{}。
IE条件注释法(即HTML条件注释Hack):针对所有IE(注:IE10+已经不再支持条件注释): <!--[if IE]>IE浏览器显示的内容 <![endif]-->,针对IE6及以下版本: <!--[if lt IE 6]>只在IE6-显示的内容 <![endif]-->。这类Hack不仅对CSS生效,对写在判断语句里面的所有代码都会生效。
只在IE下生效 <!--[if IE]> 这段文字只在IE浏览器显示 <![endif]-->
只在IE6下生效 <!--[if IE 6]> 这段文字只在IE6浏览器显示 <![endif]-->
只在IE6以上版本生效 <--[if gte IE 6]> 这段文字只在IE6以上(包括)版本IE浏览器显示 <![endif]-->
只在IE8上不生效 <!--[if ! IE 8]> 这段文字在非IE8浏览器显示 <![endif]-->
非IE浏览器生效 <!--[if !IE]> 这段文字只在非IE浏览器显示 <![endif]-->
7.让学生写一个CSS3动画?并让描述transition和animation的区别
transition是过渡,animation是动画。transition只能从一种状态过渡到另外一种状态,animation可以定制复杂动画,可以定义动画的区间等。
transition必须通过一些行为才能触发(js或者伪类来触发),animation的话不需要直接就可以触发。
知道事件冒泡,一般我们需要阻止事件冒泡。
事件冒泡
父元素和子元素上面的话都添加的有click(不仅仅是click事件,只要保证是同一个事件即可)。子元素的click事件触发的时候,会导致该click事件冒泡到它的父元素上面,为了阻止父元素的事件触发,我们一般需要给子元素的事件里写上阻止事件冒泡的方法
场景:(下拉菜单)点击空白区域关闭下拉菜单
兼容性写法:
if(event.stopPropagation){
event.stopPropagation();
}else if(event.cancelBubble){
event.cancelBubble = true;
}
阻止浏览器默认行为
当我们不希望一些浏览器默认行为触发的时候,就需要给对应的事件添加上阻止浏览器默认行为。
场景:
禁止a链接的点击后发生跳转
禁止UC等手机浏览器左右滑动切换到前一页或者下一页(我们可以通过给document的touchmove事件加上阻止浏览器默认行为的方法)
1, 提高性能。
2, 新添加的元素还会有之前的事件。
详见:http://www.jb51.net/article/88425.htm
1>提高性能 2>新添加的元素还会有之前的事件
闭包就是能够读取其他函数内部变量的函数,如果一个函数内部又定义了一个内部函数,并将该内部函数作为返回值返回或者存储在某个对象的属性里,这时就会形成一个闭包。
使用场景:1.匿名自执行函数2缓存 3实现封装(封装的方式有很多,闭包只是其中一种,不是说到封装就一定会用闭包)
闭包的优缺点
闭包的优点:
1.缓存
2.面向对象中的对象
3.实现封装,防止变量跑到外层作用域中,发生命名冲突
4.匿名自执行函数,匿名自执行函数可以减小内存消耗
闭包的缺点:
1.闭包有一个非常严重的问题,那就是内存浪费问题,这个内存浪费不仅仅因为它常驻内存,更重要的是,对闭包的使用不当的话会造成无效内存的产生
2.性能问题 使用闭包时,会涉及到跨作用域访问,每次访问都会导致性能损失。
因此在脚本中,最好小心使用闭包,它同时会涉及到内存和速度问题。不过我们可以通过把跨作用域变量存储在局部变量中,然后直接访问局部变量,来减轻对执行速度的影响。
原型:
主要作用是用于继承
原型的作用是为函数对象声明通用的变量或者函数,构造函数的实例都会从原型上继承属性和方法。
每个对象中都有__proto__属性,这个属性指向的就是它基于的原型对象。
原型链:
var person = function(name){
this.name = name
};
person.prototype.getName = function(){
return this.name;
}
var zjh = new person(‘zhangjiahao’);
zjh.getName(); //zhangjiahao
JS在创建对象(不论是普通对象还是函数对象)的时候,都有一个叫做__proto__的内置属性,用于指向创建它的函数对象的原型对象prototype。以上面的例子为例:
console.log(zjh.__proto__ === person.prototype) //true
同样,person.prototype对象也有__proto__属性,它指向创建它的函数对象(Object)的prototype
console.log(person.prototype.__proto__ === Object.prototype) //true
继续,Object.prototype对象也有__proto__属性,但它比较特殊,为null
console.log(Object.prototype.__proto__) //null
我们把这个有__proto__串起来的直到Object.prototype.__proto__为null的链叫做原型链
我们调用一个对象的属性或者方法的时候,会存在一个优先级的问题。优先级为:
构造函数内定义的属性>构造函数的原型上定义的属性>沿着__proto__指定的原型(原型链)一直往上找,直到找到null为止。任何一步一旦找到就立马停止,不会继续往下找。
逼格低点的话这样说:
封装过,以前我主要是把一些公共的功能封装成函数来实现简单封装,比如tab切换封装的时候我会定义一个叫tab的函数,选项卡节点和内容节点作为函数tab的参数。假如我一个页面有多个tab切换,我只需要执行函数的时候给函数传入不同的参数即可。
逼格高点的这样说:
封装过,我们主要用面向对象中的混合模式来封装插件,把可变的属性或者方法(通常都是属性)在构造函数内定义,把一些不变的属性或者方法(通常是方法)定义在函数的原型上面。我们封装好的插件通常会放在一个匿名自执行函数里面,这样做的目的是为了避免变量冲突。
typeof str == “undefined”
instanceof arr Array
Ajax的原理(最次最次也得把XMLHttpRequest对象说出来)
Ajax基于XMLHttpRequest对象与Web服务器端进行异步数据通信。
首先基于这个对象的open方法创建一个浏览器跟服务器端连接,通过send方法从浏览器向服务器端发送请求。我们可以通过这个对象的onreadystatechange事件来监听请求的状态,当请求成功之后的话,我可以获取到这个对象responseText等方法获取到请求过来的数据,然后通过js对这些数据进行解析
Jsonp原理
Ajax不能跨域,但是script标签和img标签都可以跨域。jsonp的话就是动态创建一个script标签,把jsonp数据格式(callback(json))的接口的地址赋值给我们的script标签的src属性。每一次发送jsonp请求的时候都会创建一个全局的回调函数,全局回调函数名称跟我们jsonp接口里面的函数名称是一致的。全局函数里面写的就是对请求过来数据的操作。
Ajax不能跨域,JSONP可以跨域。
1.你们移动端怎么开发的?用的什么单位、js框架呢、怎么真机调试你们程序、怎么解决前缀问题呢
首先我们移动端用的是rem这个单位,移动端实际上还新增了vw,vh等一些单位,但是相对于rem来说,他们的兼容性都不好。rem是一个相对单位,是相对于根节点的font-size的比例。我们还会引用一个外部的js,这个js可以通过屏幕宽度动态计算根节点的font-size值。
我们移动端用的JS框架是zepto.js,因为相应来说它的的体积的话要小很多。而且我们项目中有时会需要使用一些触屏事件,比如滑动事件,那么我们还会调用它里面的touch模块
我们webapp的话都是基于gulp搭建的前端工程来开发,因为利用gulp起一个webserver特别简单,并且我还可以实现livereload功能(当我监控的文件发生变化的时候,可以触发浏览器的自动刷新功能),而且在css3里面加前缀的话是一个很头疼的问题,我们现在只需要用autoprefixer模块就可以很容易实现自动加css3前缀这个功能了。
2. 移动端兼容性?
2>zepto的touch模块的tap事件有点透的问题,也是用fastclick来解决
3>一些情况下对非可点击元素如(label,span)监听click事件,ios下不会触发,css增加cursor:pointer就搞定了
4>ios下取消input在输入的时候英文首字母的默认大写
<input autocapitalize="off" autocorrect="off" />
5>fixed定位缺陷
ios下fixed元素容易定位出错,软键盘弹出时,影响fixed元素定位
android下fixed表现要比iOS更好,软键盘弹出时,不会影响fixed元素定位
ios4下不支持position:fixed
解决方案: 可用iScroll插件解决这个问题
6>Input 的placeholder会出现文本位置偏上的情况
input 的placeholder会出现文本位置偏上的情况:PC端设置line-height等于height能够对齐,而移动端仍然是偏上,解决是设置line-height:normal
7>calc的兼容性处理
CSS3中的calc变量在iOS6浏览器中必须加-webkit-前缀,目前的FF浏览器已经无需-moz-前缀。
Android浏览器目前仍然不支持calc,所以要在之前增加一个保守尺寸:
div {
width: 95%;
width: -webkit-calc(100% - 50px);
width: calc(100% - 50px);
}
8>在移动端修改难看的点击的高亮效果,iOS和安卓下都有效:
* {-webkit-tap-highlight-color:rgba(0,0,0,0);}
9>阻止旋转屏幕时自动调整字体大小
html, body, form, fieldset, p, div, h1, h2, h3, h4, h5, h6 {-webkit-text-size-adjust:none;}
3.谈谈你对bootstrap的认识,用它做过项目么?
用Bootstrap主要用来做一些响应式的网站,它里面栅格化这块比较强大,我可以针对不同的屏幕尺寸定制不同页面结构。
我还用它做过后台管理系统,因为它里面集成的有风格标准统一的组件、插件、全局样式等,是我们做后台管理系统的话,不用再花大精力去布局页面了。而且甚至产品给我们一个原型图我们就可以开始开发,大大提高了开发效率。
综合:
1.压缩css,js,图片
2.减少http请求次数, 合并css,js 合并图片(雪碧图)
3.使用CDN
4.减少dom元素数量
5.图片懒加载
6.静态资源另外用无cookie的域名
7.减少dom的访问(缓存dom)
8.巧用事件委托
9.样式表置顶、脚本置低
1>约定规范(目录结构、命名规范、代码书写规范)
2>由我们组长(公司有的叫组长有的叫leader)给我们搭建前端工程gulp(最起码把browsersync模块能说出来,用它创建一个局域网server并实现监控文件有变化就自动刷新功能)(另外搭建前端工程的时候就会把我们会用到的库或者插件放进去)、拆分不同的前端模块给我们开发
3>正式开发(我们通过git工具来进行)
4>代码review(由我们组长来帮我们做)
5>交付给后端开发工程师,需要帮他们联调的话到时再帮他们联调
nodejs可以做一些服务器端的应用,比如我们可以用它搭建一个webserver(基于express框架可以实现)。我本人呢nodejs搭建webserver这块主要也是从网上看到一些文档自学的,谈不上精通。
我们公司的话主要用gulp来实现我们前端自动化。比如以前我们公司做webapp的项目有这样的需求,我们会用sass这个预编译器,我们写css3属性的时候我们经常还会用autoprefixer这个插件,我们发布上线的时候还需要把css文件进行压缩,如果没有一个很好的工具能帮我们管理并自动实现上面的操作的话,还是挺麻烦的。现在我们就可以用gulp来实现这些操作的自动化
第一种回答:(smarty啥都描述不出来,ajax交互这块特别特别差的学生,但这限定了你能就业的公司,因为大部分公司还是希望他招的人是很全面的人才,所以这个不推荐)
我们公司前端代码做完之后,直接就把前端代码的话交给后端了,页面绑定数据和ajax这块基本上都是后端开发工程师来完成的。除非他们碰到一些复杂点的js特别难写或者有些js的话需要处理样式这块的话会来让我们弄。
第二种回答:(适合大部分同学,前提你得理清楚)
我们公司的话,后端用的php语言,平时的话我们也会套一些smarty模板,只要我们前后端约定一下数据格式,然后我按照smarty模板的一些语法把数据解析成最终的HTML。
另外我们公司ajax这块的话一般都由我们前端来做,而且后端做的ajax这块我们通常也会去看下,尤其是ajax调用成功还需要js操作css样式这块的情况。Ajax接口这块的话,我们会事先约定下数据格式,我们公司的接口一般都是json格式的,而且我们有个文档是专门描述这个接口(里面通常会描述下返回结果是对象还是数组,对应里面的每一项又都是啥),我们前端只需要把json格式的数据结合上html渲染到我们也没对应的位置即可。我们拿到数据的话,现在一般很少直接用js拼接html了,一般会借助js模板引擎(handlerbars)来做这方面工作。
其他:
1.平常碰到问题一般都是怎么解决的呢?
百度、看一些博客(csdn、博客园cnblogs)、去论坛提问(比如知乎)、开发者问答社区(segmentfault)、会加一些qq技术交流群
看前端大牛的博客
玉伯 kissy框架(PC端淘宝、天猫),sea.js(前端模块加载器)
司徒正美 avalon(前端MVC框架)
阮一峰(翻译了很多国外文档)
张鑫旭(写了大量的博客,用生活化的例子来解释难点)
大漠穷秋(angular1,angular2慕课网视频教程)
徐飞(技术栈)
朴灵
寸志
2.专业宽度方面:最近在学习哪些新技术呀,以后准备往哪方面发展?
我最近在学习react。。。
我最近在学习sea.js。。。
我最近在学require.js。。。
我最近正在恶补node.js。。。
技术方向:高级前端开发工程师、全栈工程师(前端+后端nodejs)、前端架构师
管理方向:前端leader(前端主管、前端经理)、项目经理、CTO
3.你都做过什么项目呢?让他具体聊某一个项目中运用的技术
注意:用心找自己做的项目中自己感觉最拿出来手的(复杂度最高,用的技术最多的项目),描述的时候尽可能往里面添加一些技术名词
布局我们用html5+css3
我们会用reset.css重置浏览器的默认样式
JS框架的话我们选用的是jQuery(也可能是Zepto)
我们用版本控制工具git来协同开发
我们会基于gulp搭建的前端自动化工程来开发(里面包含有我们的项目结构、我们需要引用的第三方库等一些信息,我们还实现了sass编译、CSS3加前缀等的自动化)
我们的项目中还用到了表单验证validate插件、图片懒加载Lazyload插件
4.为啥要离开上家单位呀(或者从前从事的不是计算机相关,为啥改行了)?
1.千万别说这行工资高之类的
2.要说,自己对这个很感兴趣,大学的时候加入的有这个社团,跟着学长学了这个东西,越学越感兴趣,于是利用大学课余时间自学了前端的知识(也可以把这个东西说成自己亲戚)
5.我们这边的话会有加班的情况,不知道你能接受不?
可以,个人愿意与公司一块成长的,而且也有了解这行会有加班,会配合公司把项目用心完成的。
6.有没有什么问题要问我?
1.别问加班和啥时候调工资之类的
2.社保、公积金交么(千万别说基数是多少)
3.问公司做的项目主要是哪方面呢,我擅长的技术****(具体技术)不知道公司需不需要
注意:如果去的是国企,国企很强调奉献,尽量往这方面靠
面试公司前最好搜索下公司是干什么的,能把他们产品说上来点就更好了(上市公司、国企尤其得这样)
1、Angular的数据绑定采用什么机制?详述原理。
脏检查机制。
双向数据绑定是 AngularJS 的核心机制之一。当 view 中有任何数据变化时,会更新到 model ,当 model 中数据有变化时,view 也会同步更新,显然,这需要一个监控。
原理就是,Angular 在 scope 模型上设置了一个 监听队列,用来监听数据变化并更新 view 。每次绑定一个东西到 view 上时 AngularJS 就会往 $watch 队列里插入一条$watch ,用来检测它监视的 model 里是否有变化的东西。当浏览器接收到可以被 angular context 处理的事件时, $digest 循环就会触发,遍历所有的 $watch ,最后更新 dom。
1.sprites是什么,它的作用是什么?
雪碧图
减少http请求
2.前端优化常用技巧?
1.压缩css,js,图片
2.减少http请求次数, 合并css,js 合并图片(雪碧图)
3.使用CDN
4.减少dom元素数量
5.图片懒加载
6.静态资源另外用无cookie的域名
7.减少dom的访问(缓存dom)
8.巧用事件委托
9.样式表置顶、脚本置低
3.如果已经开发完一个web应用用于手机端访问,请问需要在哪方面优化页面?
按需加载
静态资源压缩
巧用图标字体
保证首屏相应速度
动画能用css3实现的尽量用css3实现
移动端事件优化(fastclick)
更多前端面试资料:https://juejin.im/post/5aae076d6fb9a028cc6100a9
作者:乐乐 链接:http://www.cnblogs.com/le220/p/8469918.html 本文属于个人原创,转载请注明出处,辛辛苦苦整理的,多谢配合。如果对你有帮助,动动手指,点个赞,谢谢!