每日一盘八股文- 4.18

33 阅读3分钟

CSS篇

1、css的盒模型

html中每个元素都可以称之为一个盒模型。盒模型主要由4部分构成:margin+border+padding+content。

通过box-sizing可以设置盒模型的模式,有两种模式

  • 标准盒模型:box-sizing: content-box,是默认模式,这个模型的宽/高=margin+border+padding+content

  • IE盒模型:box-sizing:border-box,这个模型的宽/高=margin+content(padding+border+content)

2、隐藏元素的方法

display:none //元素不占据页面位置

opacity: 0 //元素在页面中占有位置,只是将其透明度设置为0,视觉上不可见

visibility: hidden // 页面中占有位置,可见性设置为hidden,视觉上不可见

position: absolute //通过绝对定位,配合任何一个足够大的top,left,right或bottom的负值

3、px,rem,em的区别

px:像素,是绝对单位

rem:相对单位,相对于html根节点的font-size的值

em:相对单位,相对于父节点的font-size的值

4、重排(回流)、重绘

(1) 首先说下浏览器的渲染机制:

  • 解析html,生成dom tree
  • 解析css,生成style rules
  • 将dom tree和style rules结合,生成render tree
  • 布局,绘制渲染树,页面展示

(2) 重排(回流):浏览器为了重新渲染部分或整个页面,重新计算页面元素位置和几何解构

引起重排的原因:改变元素的几何信息(大小和位置)

  • 添加/删除可见的dom元素(display)
  • 元素位置改变或使用动画
  • 元素尺寸改变(margin,padding,border,width,height,font-size)
  • 内容改变
  • 浏览器窗口改变(resize)
  • 页面渲染初始化
  • 激活css伪类(:hover)
  • 布局信息:offsetTop

(3) 重绘:元素的外观改变,布局未发生改变时,会引发重绘

引发重绘的属性:

  • opacity, visibility, background-size, border-radiu, text, color

(4)避免重排/重绘的方法

  • 避免一条一条修改dom样式,采用添加class的方式
  • 避免把dom节点的属性放到循环里当成循环变量
  • 给动画的html元件设置position为fixed或absolute,这样修改css不会引发重排
  • 避免在大量元素上设置伪类,如:hover
  • 避免在布局信息改变时查询布局信息
  • 避免使用table布局
  • 避免设置多层内联样式

重绘不一定引起重排,但重排一定会重绘

5、元素水平垂直居中

  • 定位+margin

image.png

  • 定位+transform

image.png

  • flex布局

image.png

JS篇

1、js组成三部分

ECMAScript:js的核心内容

文档对象模型(DOM)

浏览器对象模型(BOM)

2、JS数据类型的检测方法

image.png

3、闭包

定义:函数嵌套函数,内部函数被外部函数返回并保存下来时,就会产生闭包

特点:可以重复利用变量,且不会污染全局的一种机制,这个变量一直保存在内存中,不会被垃圾回收机制回收

缺点:闭包较多时,会消耗内存,导致页面的性能下降,在IE浏览器中会导致内存泄露

场景:节流,防抖

  • 防抖:在一段固定时间内,只能触发一次函数,如果触发多次,只执行最后一次

    • 场景:用户搜功能,在用户输入结束后才开始发送搜索请求
  • 节流:限制一个函数在一段时间内只能执行一次

    • 场景:改变浏览器尺寸大小;滚动条scroll事件

    节流是为了限制函数执行次数,防抖是为了限制函数执行时机