1.请列举一些css3的新特性:
1.新选择器
2.文本
3.边框
4.背景
5.渐变
6.多列布局
7.过渡
8.动画、旋转
9.flex布局
10.media媒体查询
2.请实现一个垂直居中
方法一:position加margin
方法二:diaplay:table-cell
方法三:position加 transform
方法四:flex;align-items: center;justify-content: center
方法五:display:flex;margin:auto
方法六:纯position
方法七:兼容低版本浏览器,不固定宽高
方法一:position加margin
/**html**/
<div class="wrap">
<div class="center"></div>
</div>
/**css**/
.wrap {
width: 200px;
height: 200px;
background: yellow;
position: relative;
}
.wrap .center {
width: 100px;
height: 100px;
background: green;
margin: auto;
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
}
兼容性:主流浏览器均支持,IE6不支持
方法二: diaplay:table-cell
<!-- html -->
<div class="wrap">
<div class="center"></div>
</div>
/*css*/
.wrap{
width: 200px;
height: 200px;
background: yellow;
display: table-cell;
vertical-align: middle;
text-align: center;
}
.center{
display: inline-block;
vertical-align: middle;
width: 100px;
height: 100px;
background: green;
}
兼容性:由于display:table-cell的原因,IE6\7不兼容
方法三:position加 transform
<!-- html -->
<div class="wrap">
<div class="center"></div>
</div>
/* css */
.wrap {
position: relative;
background: yellow;
width: 200px;
height: 200px;
}
.center {
position: absolute;
background: green;
top:50%;
left:50%;
-webkit-transform:translate(-50%,-50%);
transform:translate(-50%,-50%);
width: 100px;
height: 100px;
}
兼容性:ie9以下不支持 transform,手机端表现的比较好。
方法四:flex;align-items: center;justify-content: center
<!-- html -->
<div class="wrap">
<div class="center"></div>
</div>
/* css */
.wrap {
background: yellow;
width: 200px;
height: 200px;
display: flex;
align-items: center;
justify-content: center;
}
.center {
background: green;
width: 100px;
height: 100px;
}
移动端首选
方法五:display:flex;margin:auto
<!-- html -->
<div class="wrap">
<div class="center"></div>
</div>
/* css */
.wrap {
background: yellow;
width: 200px;
height: 200px;
display: flex;
}
.center {
background: green;
width: 100px;
height: 100px;
margin: auto;
}
移动端首选
方法六:纯position
<!-- html -->
<div class="wrap">
<div class="center"></div>
</div>
/* css */
.wrap {
background: yellow;
width: 200px;
height: 200px;
position: relative;
}
/**方法一**/
.center {
background: green;
position: absolute;
width: 100px;
height: 100px;
left: 50px;
top: 50px;
}
/**方法二**/
.center {
background: green;
position: absolute;
width: 100px;
height: 100px;
left: 50%;
top: 50%;
  margin-left:-50px;
  margin-top:-50px;
}
兼容性:适用于所有浏览器
方法六中的方法一计算公式如下:
子元素(conter)的left值计算公式:left=(父元素的宽 - 子元素的宽 ) / 2=(200-100) / 2=50px;
子元素(conter)的top值计算公式:top=(父元素的高 - 子元素的高 ) / 2=(200-100) / 2=50px;
方法二计算公式:
left值固定为50%;
子元素的margin-left= -(子元素的宽/2)=-100/2= -50px;
top值也一样,固定为50%
子元素的margin-top= -(子元素的高/2)=-100/2= -50px;
方法七:兼容低版本浏览器,不固定宽高
<!-- html -->
<div class="table">
<div class="tableCell">
<div class="content">不固定宽高,自适应</div>
</div>
</div>
/*css*/
.table {
height: 200px;/*高度值不能少*/
width: 200px;/*宽度值不能少*/
display: table;
position: relative;
float:left;
background: yellow;
}
.tableCell {
display: table-cell;
vertical-align: middle;
text-align: center;
*position: absolute;
padding: 10px;
*top: 50%;
*left: 50%;
}
.content {
*position:relative;
*top: -50%;
*left: -50%;
background: green;
}
详解:xiaolin111.blog.163.com/blog/static…
3.transition和animation的区别
4.请简述浏览器渲染过程
1.处理 HTML 并构建 DOM 树。
2.处理 CSS 构建 CSSOM 树。
3.将 DOM 与 CSSOM 合并成一个渲染树。
4.根据渲染树来布局,计算每个节点的位置。
5.调用 GPU 绘制,合成图层,显示在屏幕上。
5.请简述前端事件流
详解:segmentfault.com/a/119000001…
6.请简述前端节流及防抖原理(代码实现更优)
7.ajax是什么?优势、劣势?应该注意的问题?
详解:xiaolin10.blog.163.com/blog/static…
8.js统计字符串'absgkhqiodjnfxcjhd'频率出现最高的字母?
// 第一种
function num (str){
var a = {};
var b = str.split("");
// key为元素 值为个数
for (let i = 0; i < b.length; i++) {
if(a[b[i]]){
a[b[i]]++;
}else{
a[b[i]] = 1;
}
}
// 通过比较找出最大的
var maxLetter = "";
var levelNum = 0;
for (const k in a) {
if(a[k] > levelNum){
levelNum = a[k];
maxLetter = k;
}
}
console.log(maxLetter + ":" + levelNum);
return maxLetter;
}
var cc = "dafsfsfasfafaqertyyuuioll,mmnnbvvsfsdfqgsafsafgff";
num(cc);
// 第二种
function num(str) {
let map={};
let data={};
let arr=[];
str.split('').reduce((obj, item) => {
if(map[item]) {
data[item] ++;
} else {
map[item]=true;
data[item]=1
}
return data
}, data)
for(let i in data) {
arr.push({name: i, count: data[i]})
}
arr.sort(function(a, b){
return a.count - b.count
})
let minCount=arr[0].count;
let minArr=arr.filter(item=> item.count === minCount);
console.log(minArr, 'minArr')
console.log('高频字母:'+ arr[arr.length-1].name,'高频字母数目:'+ arr[arr.length-1].count);
}
let str = "sdddsssvvffgeei";
num(str);
9.js计算数组arr中最大相差值?
var data = [1,2,8,-5,6];
function difference(data) {
let min = data[0];
let max = data[0];
for (let i=0;i<data.length; i++) {
if(data[i]>max) {
max=data[i];
console.log(max, '555',data[i])
}
if(data[i]<min) {
min=data[i];
console.log(min, '666',data[i])
}
}
return max-min;
}
console.log(difference(data), 'data');