一、CSS部分
1、W3C标准盒模型
2、垂直水平居中
3、flex布局
4、position的几种属性值
- static:默认位置。 在一般情况下,我们不需要特别的去声明它,但有时候遇到继承的情况,我们不愿意见到元素所继承的属性影响本身,从而可以用Position:static取消继承,即还原元素定位的默认值。设置为 static 的元素,它始终会处于页面流给予的位置(static 元素会忽略任何 top、 bottom、left 或 right 声明)。一般不常用。
- relative:相对定位。 相对定位是相对于元素默认的位置的定位,它偏移的 top,right,bottom,left 的值都以它原来的位置为基准偏移,而不管其他元素会怎么 样。注意 relative 移动后的元素在原来的位置仍占据空间。
- absolute:绝对定位。 设置为 absolute 的元素,如果它的 父容器设置了 position 属性,并且 position 的属性值为 absolute 或者 relative,那么就会依据父容器进行偏移。如果其父容器没有设置 position 属性,那么偏移是以 body 为依据。注意设置 absolute 属性的元素在标准流中不占位置。
- fixed:绝对定位。 位置被设置为 fixed 的元素,可定位于相对于浏览器窗口的指定座标。不论窗口滚动与否,元素都会留在那个位置。它始终是以 body 为依据的。 注意设置 fixed 属性的元素在标准流中不占位置。
5、display的几种属性值
- 默认值 inline
此元素会被显示为内联元素,元素前后没有换行符。设置width,height,margin-top,margin- bottom,padding-top,padding-bottom无效;
内联元素不能设置宽高,但这也不是绝对的。
html标签中有部分标签,例如:<span/>、<a>、<em>、<img>、<input>、<label>等等都是内联元素,默认display属性均为inline,但是<img>、<input>标签的元素却可以设置宽高!因为它有内在尺寸,所以具有width和height,可以设定。
- none
此元素不会被显示。
经常会考到,display:none与visibility: hidden有什么区别?
都是看不见元素,但是display:none意思是不展示这个元素,该元素不占据空间,
而visibility: hidden只是将该元素隐藏了,只是用户不可见而已,占据页面空间
- block
此元素将显示为块级元素,此元素前后会带有换行符。
块状元素可以设置宽高。
html标签中有部分标签,例如:<div>、<p>、<ol>等等,其display属性默认为block
- inline-block
行内块元素,结合了inline、block的特点,此元素前后没有换行符,可以设置宽高。
参考:https://blog.csdn.net/Elena_cc/article/details/71750833
6、css3新特性
border-radius:5px; //圆角边框
background: url(img_flwr.gif) right bottom no-repeat, url(paper.gif) left top repeat; //多背景图片
background: rgba(0,0,0,.5); //颜色和透明度
display: flex; //弹性布局
transform: translate(50px,100px);//移动
transform: rotate();//旋转
transform: scale();//缩放
transform: skew();//倾斜
// 用于元素的直接或者鼠标感应变化,没有其他变幻参数(如延时,持续时间,变幻曲线),立即改变。
transition: width 1s linear 2s; //过渡效果,transition通过指定某些属性和变幻参数,以原始定义为开始状态,通过鼠标操作变化(hover),hover状态定义结束状态,实现过渡效果。
animation: myfirst 5s;
@keyframes myfirst {
0% {background: block;}
25% {background: red;}
50% {background: yellow;}
100% {background: green;}
}
//动画效果,加强版的过渡效果,通过animation指定动画名和动画参数,@keyframes定义动画内容,根据参数自动触发。
@media screen //媒体查询
h1 {//文字阴影
text-shadow: 5px 5px 5px red;
}
div {//盒子阴影
box-shadow: 10px 5px 5px yellow;
}
7、css选择器
CSS的选择器分为两大类:基本选择题和扩展选择器。
基本选择器:
- 标签选择器:针对一类标签
- ID选择器:针对某一个特定的标签使用
- 类选择器:针对你想要的所有标签使用
高级选择器:
- 后代选择器:用空格隔开
- 伪类选择器
- 伪元素选择器
8、css单位
px 像素(Pixel)。绝对单位。像素 px 是相对于显示器屏幕分辨率
而言的,是一个虚拟长度单位,是计算 机系统的数字化图像长度单位,如果 px 要换算成物理长度,需要指定精度 DPI。
em 是相对长度单位,相对于当前对象内文本的字体尺寸
。如当前对行内文本的字体尺寸未被人为设置, 则相对于浏览器的默认字体尺寸。它会继承父级元素的字体大小,因此并不是一个固定的值。
rem 是 CSS3 新增的一个相对单位(root em,根 em),使用 rem 为元素设定字体大小时,仍然是相对大小, 但相对的只是 HTML 根元素
。
9、浮动、清除浮动
参考:http://luopq.com/2015/11/08/CSS-float/
10、相邻的两个inline-block节点为什么会出现间隔,该如何解决
由于浮动造成的,一种方式为两个节点添加clear:both,另一种方式是增加父标签,设置overflow:hidden
11、css实现宽度自适应100%,宽高16:9的比例的矩形
<style>
/* box 用来控制宽度 */
.box {width: 100%;}
/* scale 用来实现宽高等比例 1:1 padding-bottom:100%; 4:3 padding-bottom:75%; 16:9 padding-bottom:56.25%; */
.scale {width: 100%;padding-bottom: 56.25%;height: 0;position: relative;}
/* item 用来放置全部的子元素 */
.item {width: 100%;height: 100%;background-color: #000;position: absolute;}
</style>
<div class="box">
<div class="scale">
<div class="item">
<img src=""/>
</div>
</div>
</div>
12、1像素边框问题
一般是采用伪元素模拟的方式
.scale{
position: relative;
border:none;
}
.scale:after{
content: '';
position: absolute;
bottom: 0;
background: #000;
width: 100%;
height: 1px;
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
-webkit-transform-origin: 0 0;
transform-origin: 0 0;
}
13、css3动画优化
14、BFC相关
定义:BFC(Block formatting context)直译为"块级格式化上下文"。它是一个独立的渲染区域,只有 Block-level box 参 与, 它规定了内部的 Block-level Box 如何布局,并且与这个区域外部毫不相干。
BFC布局规则 BFC 就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。反之也如此。
- BFC这个元素的垂直方向的边距会发生重叠,垂直方向的距离由
margin
决定,取最大值 - BFC 的区域不会与浮动盒子重叠(
清除浮动原理
)。 - 计算 BFC 的高度时,浮动元素也参与计算。
哪些元素会生成 BFC
- 根元素
- float 属性不为 none
- position 为 absolute 或 fixed
- display 为 inline-block, table-cell, table-caption, flex, inline-flex
- overflow 不为 visible
15、移动端css问题总结
16、一些css问题总结
https://juejin.im/post/5a0c184c51882531926e4294
二、HTML部分
1、语义化
什么是语义化?就是用合理、正确的标签来展示内容,比如h1~h6定义标题。
2、HTML5新标签新特性
主体结构标签,如图:
新表单标签,calendar、date、time、email、url、search
媒介标签: video 和 audio
绘画标签: canvas
3、移动端忽略将页面中的数字识别为电话号码的方法
<meta name = "format-detection" content = "telephone=no">
meta标签中format-detection翻译成中文的意思是“格式检测”,是用来检测html里的文本格式的,还包括:
<meta name="format-detection" content="telephone=no"> //禁止把数字转化为拨号链接
<meta name="format-detection" content="email=no"> //禁止邮箱,禁止发送邮件
<meta name="format-detection" content="adress=no"> //禁止地址跳转至地图
<meta name="format-detection" content="telephone=no,email=no,adress=no"> //合并写法
4、用一个div模拟textarea的实现
<div class="textarea" contenteditable="true">输入文字</div>
.textarea{
resize: both;
min-width: 300px;
min-height: 100px;
padding: 5px;
border: 1px solid #ccc;
border-radius:5px;
line-height: 1.2;
outline:none;
overflow:auto;
}
5、实现两个窗口间通信
HTML5 postMessage 和 localStorage 实现窗口间通信
三、JS部分
1、原型到原型链
2、作用域和作用域链
3、闭包
4、this,apply,call,bind相关问题
5、对象深拷贝、浅拷贝
6、js执行机制
JavaScript:彻底理解同步、异步和事件循环(Event Loop)
7、继承的几种方式
8、跨域
9、正则
10、常见的工具函数(节流、防抖、柯里化)
11、ES6相关
12、dom
dom里各种尺寸区别(offsetWidth,scrollWidth,clientWidth,innerWidth....)
13、promise
promise实现原理:手把手教你实现一个完整的 Promise
14、Generator,async/await相关
阮一峰:Generator,async,Thunk,co 系列
15、js基础
16、垃圾回收机制
17、es6对数组的几种遍历方法
some为数组中的每一个元素执行一次callback函数,直到找到callback返回为true的值为止,找到这样的值后直接返回true,其余的不在运行,如果到结束也没找到,则返回false
find()方法返回数组中符合测试函数条件的第一个元素。否则返回undefined
findIndex()与find()的使用方法相同,只是当条件为true时findIndex()返回的是索引值
filter()返回的是数组,数组内是所有满足条件的元素,而find()只返回第一个满足条件的元素。如果条件不满足,filter()返回的是一个空数组,而find()返回的是undefined
18、加载远程数据几种方法
ajax:
本身是针对MVC的编程,不符合现在前端MVVM的浪潮
基于原生的XHR开发,XHR本身的架构不清晰,已经有了fetch的替代方案
JQuery整个项目太大,单纯使用ajax却要引入整个JQuery非常的不合理(采取个性化打包的方案又不能享受CDN服务)
axios:
1.从浏览器中创建 XMLHttpRequest
2.支持 Promise API
3.客户端支持防止CSRF
4.提供了一些并发请求的接口(重要,方便了很多的操作)
5.从 node.js 创建 http 请求
6.拦截请求和响应
7.转换请求和响应数据
8.取消请求
9.自动转换JSON数据
fetch:
符合关注分离,没有将输入、输出和用事件来跟踪的状态混杂在一个对象里
更好更方便的写法
更加底层,提供的API丰富(request, response)
脱离了XHR,是ES规范里新的实现方式
1)fetch只对网络请求报错,对400,500都当做成功的请求,需要封装去处理
2)fetch默认不会带cookie,需要添加配置项
3)fetch不支持abort,不支持超时控制,使用setTimeout及Promise.reject的实现的超时控制并不能阻止请求过程继续在后台运行,造成了量的浪费
4)fetch没有办法原生监测请求的进度,而XHR可以
Fly.js 是一个基于 promise 的,轻量且强大的 Javascript http 网络库
提供统一的 Promise API。
支持浏览器环境,轻量且非常轻量 。
支持 Node 环境。
支持请求/响应拦截器。
自动转换 JSON 数据。
支持切换底层 Http Engine,可轻松适配各种运行环境。
浏览器端支持全局Ajax拦截 。
H5页面内嵌到原生 APP 中时,支持将 http 请求转发到 Native。
支持直接请求图片。
高度可定制、可拆卸、可拼装。
Fly最大的特点就是在混合APP中支持请求转发,而axios不支持
Fly采用分层的设计思想,将上层用户接口和底层Http Engine分离。
18、localStorage单页面及不同页面监听变动
19、defer和async的区别
四、VUE部分
深入理解 Object.defineProperty 及实现数据双向绑定
五、Webpack部分
六、JS相关设计模式
观察者模式(发布/订阅模式),代理模式,工厂模式,单例模式
七、React部分
其他常见相关问题
模块化
前端规范
SPA(单页面应用)和MPA(多页面应用)
移动端适配
PC端兼容性
移动端兼容性
调试技巧
常见数据结构与算法
版本控制(git/svn)
前端部署代码问题
前端持续集成
https
http2.0
浏览器工作原理
浏览器缓存机制
浏览器综合
从输入URL到页面加载的过程?如何由一道题完善自己的前端知识体系!
前端安全
sql注入问题:网络攻击技术开篇——SQL Injection
SEO
PWA
Nginx