选择器优先级important > 行内样式(style=“…”)>ID 选择器(#box{…})>类选择器(.con{…})>标签选择器(div{…})>伪元素选择器(f) > 通用选择器(*{…})
盒模型 box-sizing contentbox borderbox JS获取盒模型宽高 el.style.width getComputedStyle el.getCurrentStyle.width getBoundingClientRect().width()
margin 塌陷/重叠 标准文档中 竖直方向的margin不叠加,取较大的作为margin 父子元素之间,父100px高度,子100px高度 10px margin-top,父元素不会110px高度 而是100px 可以父设为overflow:hidden (BFC)解决这个问题(善于使用父亲的padding而不是儿子的margin)
BFC:块级格式化上下文 (边距重叠解决方案) 1.BFC 内部的子元素,在垂直方向,边距会发生重叠。2.BFC在页面中是独立的容器,外面的元素不会影响里面的元素. 3.计算BFC的高度时,浮动的子元素也参与计算。4.BFC区域不与旁边的float box区域重叠。(可以用来清除浮动带来的影响)。
如何生成BFC 方法1:overflow: 不为visible,可以让属性是 hidden、auto。【最常用】
方法2:浮动中:float的属性值不为none。意思是,只要设置了浮动,当前元素就创建了BFC。
方法3:定位中:只要posiiton的值不是 static或者是relative即可,可以是absolute或fixed,也就生成了一个BFC。
方法4:display为inline-block, table-cell, table-caption, flex, inline-flex
HTML5和CSS3的新特性 新增语义化标签< header >
< nav >
< article >
< section >
< aside >
< footer >新增多媒体标签
音频:< audio >视频:< video >autoplay:自动播放
controls:显示插件 loop:循环播放 poster:预先加载显示
新增input类型 type=" "
email
url
date
time
month
week
number
tel
search 搜索框
color新增表单属性
required=“required” 非空
placeholder=“xinyue” 提示信息
autofocus=“autofocus” 自动聚焦
autocomplete=“off” 阻止记录信息
multipe=“multipe” 提交多个文件
CSS3新特性 属性选择器 权重为10
利用属性选择器就可以不用借助于类或者id选择器
语法:input[value=password ] ^=icon开头为icon &=icon结尾为icon *=i 含有 i
结构伪类选择器 权重为10 root选择器、:not选择器、:only-child选择器、:first-child选择器、:last-child选择器、:nth-child(n)选择器、:nth-last-child(n)选择器、:nth-of-type(n)选择器、:nth-last-of-type(n)选择器、:empty选择器、:target选择器
伪元素选择器::before ::after 行内元素
实现遮罩层 实现清除浮动 父元素添加个clearfix
居中方案
内联元素居中布局
水平居中
行内元素可设置:text-align: center
flex布局设置父元素:display: flex; justify-content: center
垂直居中
单行文本父元素确认高度:height === line-height
多行文本父元素确认高度:display: table-cell; vertical-align: middle
块级元素居中布局
水平居中
定宽: margin: 0 auto
绝对定位+left:50%+margin:负自身一半
垂直居中
position: absolute设置left、top、margin-left、margin-top(定高)
display: table-cell
transform: translate(x, y)
flex(不定高,不定宽)
grid(不定高,不定宽),兼容性相对比较差
PromisePromise是ES6新增的异步编程的解决方案,promise 是一个构造函数 接收一个函数为参数,并传入两个参数 resolve和reject,分别表示异步操作成功后的回调函数和异步操作失败的回调函数,支持链式调用,回调函数更灵活
状态改变pending -> resolved pending -> rejected
成功后结果value,失败结果reason(res)
Promise.prototype.then 方法:
说明:.then() 方法用来预先指定成功和失败的回调函数,调用 .then() 方法时,成功的回调函数是必选的,失败的回调函数是可选的
Promise.prototype.catch 方法:
说明:.catch() 方法用来捕获与处理错误 ,相当于 then(undefined, onRejected);
返回一个 失败 的 promise 对象
** Promise.all ** 只有所有的promise成功才成功,有一个失败就失败,返回一个新的Promise,成功返回数组形式的数组,失败返回最先被reject的值
内存泄露
1.意外的全局变量: 无法被回收
2.定时器: 未被正确关闭,导致所引用的外部变量无法被释放
3.事件监听: 没有正确销毁 (低版本浏览器可能出现)
4.闭包: 会导致父级中的变量无法被释放
5.dom 引用: dom 元素被删除时,内存中的引用未被正确清空
强缓存/协商缓存
Exprires的值为服务端返回的数据到期时间。当再次请求时的请求时间小于返回的此时间,则直接使用缓存数据。但由于服务端时间和客户端时间可能有误差,这也将导致缓存命中的误差。另一方面,Expires是HTTP1.0的产物,故现在大多数使用Cache-Control替代
**Cache-Control(HTTP1.1)**:有很多属性,不同的属性代表的意义也不同
private:客户端可以缓存
public:客户端和代理服务器都可以缓存
max-age=t:缓存内容将在t秒后失效
no-cache:需要使用协商缓存来验证缓存数据,可以在客户端存储资源,每次都必须去服务端做新鲜度校验,来决定从服务端获取新的资源(200)还是使用客户端缓存(304)
no-store:所有内容都不会缓存,永远都不要在客户端存储资源,永远都去原始服务器去获取资源
协商缓存需要进行对比判断是否可以使用缓存。浏览器第一次请求数据时,服务器会将缓存标识与数据一起响应给客户端,客户端将它们备份至缓存中。再次请求时,客户端会将缓存中的标识发送给服务器,服务器根据此标识判断。若未失效,返回304状态码,浏览器拿到此状态码就可以直接使用缓存数据了
缓存总结
缓存分为两种:强缓存和协商缓存,根据响应的 header 内容来决定。
强缓存 从缓存取 200(from cache) 否,直接从缓存取
协商缓存 从缓存取 304(not modified) 是,通过服务器来告知缓存是否可用
强缓存相关字段有 expires,cache-control。如果 cache-control 与 expires 同时存在的话, cache-control 的优先级高于 expires。
协商缓存相关字段有 Last-Modified/If-Modified-Since,Etag/If-None-Match
CommonJS和ES6 Module
导出方式的不同
动态与静态
值拷贝与动态映射
循环依赖
设计模式有哪些 1.单例模式:一个类只有一个实例,并提供一个访问它的全局访问点。 Vuex 源码中的单例模式,2.工厂模式:
3.适配器模式:用于解决兼容问题,接口/方法/数据不兼容,将其转换成访问者期望的格式进行使用。4.装饰器模式:在不改变原对象的基础上,增加新的属性和方法,对象的核心职责和装饰功能区分开,可以通过动态增删装饰去除目标对象中的装饰逻辑。5.策略模式:定义一系列算法,根据输入的参数决定使用哪个策略。6.观察者模式 7.发布订阅模式
哪些方法能脱离文档流
垂直水平居中有哪些方法
js中 堆和栈 存储方式
事件循环 even loop
原型和原型链
es6 新特性
var let const 区别
箭头函数 与 普通函数的区别
v-model
vue响应式原理
vue组件通信
diff算法
做过哪些前端优化
webpack 打包配置有了解过吗
有个用户名的输入框需要做是否已存在的校验 你会怎么做
xss攻击 和xsrf攻击
从浏览器输入一个url到网页呈现的过程
之前团队规模 开发流程 及 开发规范
你们是怎么高效的完成团队合作的 (前后端配合)
之前团队 怎么控制 代码质量 code review
职业规划
Vue 详解VueRouter路由的实现方法
hash模式、history 模式和abstract 模式。根据mode 参数来决定采用哪一种方式。
Vue如何监听路由的变化watch监听$route、vue-router 的钩子函数 beforeRouteEnter beforeRouteUpdate beforeRouteLeave,使用computed属性和Date()可以保证每一次的key都是不同的,这样就可以如愿刷新数据了。
自我介绍
介绍一下项目
项目中的难点及怎么解决
在前端领域中有没有遇到一些困难
版权归原作者 j: ) 所有, 如有侵权,请联系我们删除。