当高度确定时,如何设置一个左右宽度固定,中间宽度自适应
浮动,定位,flex,table-cell,grid
盒模型
标准模型/ie模型分别是什么?他们之间的区别?
标准模型的width不包括padding/border/margin
ie模型的width包括padding和border
css如何设置这两种模型?
box-sizing:content-box;//标准模型
box-sizing:border-box;//ie模型
js如何设置获取盒模型对应的高和宽?
dom.style.width/height
dom.currentStyle.width/height
window.getCopmputedStyle(dom).width/height
dom.getBoundingClientRect().width/height
实例题(根据盒模型解释边距重叠)
数值方向上边距重叠(父子,兄弟) 会取最大值
子元素的margin-top会将父元素也掉下来
BFC(边距重叠解决方案)
- BFC的基本概念
BFC 即 Block Formatting Contexts (块级格式化上下文),它属于上述布局模式的流动模型。是W3C CSS2.1规范中的一个概念,决定了元素如何对其内容进行定位,以及与其他元素的关系和相互作用。具有BFC特性的元素可以看做是隔离了的独立容器,容器里面的元素不会在布局上影响到外面的元素,并且BFC具有普通容器所没有的的一些特性。通俗一点来讲,可以把BFC理解为一个封闭的大箱子,箱子内部的元素无论如何翻江倒海,都不会影响到外部。 - BFC的原理
- 如何创建BFC
/*overflow: auto;!*auto或hidden*!*/
/*float: left;!*除了none的所有属性*!*/
/*position: fixed;!*fixed或absolute*!*/
/*display: table-cell;*/
/*display: table-caption;*/
/*display: flow-root;*/
/*display: inline-block;*/
- BFC使用场景
边距重叠的情况
dom事件
- 基本类型:dom事件的级别
dom0
element.onclick = function(){}
dom2 false=>指定事件是否在捕获或冒泡阶段执行。false:冒泡(默认) true:捕获
element.addEventListener('click',function(){},false)
dom3 相对于dom2增加了很多方法
element.addEventListener('keyup',function(){},false)
- dom事件模型
捕获(从上而下) 冒泡(从下往上) - dom事件流
鼠标左键的点击是怎么传到页面上,事件通过捕获到达目标元素,从目标元素上传到window对象也就是冒泡 - 描述dom事件捕获的具体流程
window=>document=>html标签=>body=>页面标签
冒泡就是反过来 - event对象的常见应用
event.preventDefault();//阻止默认行为
event.stopPropagation();//阻止冒泡
event.stopImmediatePropagation();//绑定的多个事件 只执行优先级第一个
event.currentTarget;//事件代理 当给一个父元素的十个子元素都绑定了事件后 获得当前绑定的时间
event.target;//当前被操作的元素
- 自定义事件
var eve = new Event('custom');
document.getElementById('btn').addEventListener('custom',function () {
console.log('custom');
})
document.getElementById('btn').dispatchEvent(eve);
customEvent也是自定义方法,还可以指定obj
http协议
- http协议的主要特点
简单快速,灵活,无连接,无状态
重绘和回流
浏览器使用流式布局模型 (Flow Based Layout)。
浏览器会把HTML解析成DOM,把CSS解析成CSSOM,DOM和CSSOM合并就产生了Render Tree。
有了RenderTree,我们就知道了所有节点的样式,然后计算他们在页面上的大小和位置,最后把节点绘制到页面上。
由于浏览器使用流式布局,对Render Tree的计算通常只需要遍历一次就可以完成,但table及其内部元素除外,他们可能需要多次计算,通常要花3倍于同等元素的时间,这也是为什么要避免使用table布局的原因之一。
一句话:回流必将引起重绘,重绘不一定会引起回流。
-
回流:当Render Tree中部分或全部元素的尺寸、结构、或某些属性发生改变时,浏览器重新渲染部分或全部文档的过程称为回流。
会导致回流的操作:
页面首次渲染
浏览器窗口大小发生改变
元素尺寸或位置发生改变
元素内容变化(文字数量或图片大小等等)
元素字体大小变化
添加或者删除可见的DOM元素
激活CSS伪类(例如::hover)
查询某些属性或调用某些方法
一些常用且会导致回流的属性和方法:
clientWidth、clientHeight、clientTop、clientLeft
offsetWidth、offsetHeight、offsetTop、offsetLeft
scrollWidth、scrollHeight、scrollTop、scrollLeft
scrollIntoView()、scrollIntoViewIfNeeded()
getComputedStyle()
getBoundingClientRect()
scrollTo() -
重绘:当页面中元素样式的改变并不影响它在文档流中的位置时(例如:color、background-color、visibility等),浏览器会将新样式赋予给元素并重新绘制它,这个过程称为重绘。
HTTP协议类
- HTTP协议的主要特点:
简单快速,灵活,无连接(连接一次就会断掉),无状态(HTTP协议不能区分状态) - HTTP报文的组成部分
请求报文分为 请求行(http方法 页面地址 http协议 版本),请求头(要哪些内容 什么形式),空行,请求体 响应报文分为 状态行(多状态码),响应头,空行,响应体 - HTTP方法
get获取资源 post传输资源 put更新资源 delete删除资源 head获取报文头部 - post和get的区别
- get在浏览器回退时是无害的 而post会再次提交请求
- get产生的url地址会被收藏,post不可以
- get会被浏览器主动缓存,post不会,除非主动设置
- get只能进行url编码,而post支持多种编码方式
- get参数会被完整保留在浏览器历史记录中,而post参数不会被保留
- get请求在url传输的参数是有长度限制的,而post没有限制
- 对参数的数据类型,get只接受ascll字符,而post没有限制
- get比post更不安全,因为参数直接暴露在url上
- get参数通过url传递,post放在request body中
- HTTP状态码
- 1xx 指示信息-表示请求已接受,继续处理
- 2xx 成功 206 当请求太大时会返回,如请求视频时
- 3xx 重定向-要完成请求必须进行更进一步的操作
301 永久重定向 302 临时重定向 304 资源没有发生变化,有缓存跨域直接用 - 4xx 客户端错误-请求有语法错误或请求无法实现
400 客户端请求有语法错误,不能被服务器所理解
401 请求未经授权
403 对被请求页面的访问被禁止
404 请求资源不存在 - 5xx 服务器错误-服务器未能实现合法的请求
500 服务器发生不可预期的错误
503 请求未完成 服务器临时过载或宕机,一段时间后可能回复正常
- HTTP持久连接(Keep-Alive)
1.1版本支持,持久连接即客户端到服务端的连接持续有效,当出现对服务器的后续请求时,Keep-Alive功能呢避免了建立或重新建立连接 - 管线化
通过持久连接完成,请求和回应不是一来一回,而是请求1请求2请求3回应1回应2回应3
只有get和head可以进管线化,post有限制
第一次连接的时候不要开启管线化,因为对方不一定时1.1