前端 HTML 与 CSS 面试题大汇总

116 阅读4分钟

# 怎么理解HTML语义化

  1. 增强了代码可读性,让人更容易读懂
  2. 让搜索引擎更容易读懂,有助于爬虫抓取更多有效的信息
  3. 在没有CSS样式下页面也能呈现出很好的内容结构和代码结构

# script 标签中 defer 和 async 的区别?

  • script:会阻碍 HTML 解析,只有下载好并执行完脚本才会继续解析 HTML。
  • async script:解析 HTML 过程中进行脚本的异步下载,下载成功立马执行,有可能会阻断 HTML 的解析。
  • defer script:完全不会阻碍 HTML 的解析,解析完成之后再按照顺序执行脚本。

# 什么是盒子模型?

在网页中,一个元素占有空间的大小有元素内容、内边距、边框和外边距四部分组成。有的部分可先显示相应的内容,而有的部分只用来分隔相邻的区域,共有两种盒模型:

  • W3C标准盒模型/默认的
    width + height+content,不包含border 和 padding
    box-sizeing: content-box;
  • IE盒模型/怪异
    width + height + content + border + padding
    box-sizeing: border-box;

在项目中常用到IE盒模型: box-sizeing: border-box

# 什么是回流和重绘?

回流是元素尺寸和结构发生变化时,浏览器重新渲染部分或全部文档的过程

如何引发回流

  1. 页面首次渲染
  2. 浏览器窗口改变大小
  3. 尺寸或位置发生改变
  4. 元素内容变化,字体大小变化
  5. 激活CSS伪类

重绘是素样式的改变并不影响它在文档流中的位置时,浏览器重新绘制的过程

如何避免重绘

  1. 避免使用table布局
  2. 避免设置多层内联样式
  3. 避免使用CSS表达式,如:calc
  4. 避免频繁操作样式
  5. 尽可能在DOM树的最末端改变class

浏览器使用流式布局模型把HTML解析成DOM以及CSS解析成CSSOM,DOM 和 CSSOM合并就产生了Render Tree渲染树。有了RenderTree就知道了所有节点的样式,然后计算他们在页面上的大小和位置,最后把节点绘制到页面上。

回流必将引起重绘,重绘不一定会引起回流

# 什么是BFC

BFC(Block Formatting Context)是块级格式上下文。

根据盒模型可知每个元素都被定义为一个矩形盒子,然盒子的布局会受到尺寸、定位、盒子的子元素或兄弟元素以及视口的尺寸等因素决定,所以这里有个浏览器计算过程,计算的规则就是由一个叫作视觉格式化模型的东西定义的,BFC就是来自这个概念,他是CSS视觉渲染的一部分,用于决定块级盒的布局及浮动相互影响范围的一个区域

BFC的一些特性

  1. 块级元素会在垂直方向一个接一个的排列,和文档流排列方式一致
  2. 分属于不同的BFC时可以阻止Margin重叠
  3. 计算BFC的高度时,需要计算浮动元素的高度即清除浮动
    当给元素设置overflow: hidden时,实际上创建了BFC并决定了height:auto是如何计算的。在BFC布局规则中提到:计算BFC的高度时,浮动元素也参与计算。因此,父元素在计算其高度时,加入了浮动元素的高度,达成了清除浮动的目标,所以父元素就包裹住了子元素。
  4. BFC区域不会与浮动的容器发生重叠
  5. BFC是独立的容器,容器内部元素不会影响外部元素

如何触发BFC

  1. float的值不为none
  2. overflow的值不为visible
  3. position的值为fixed、absolute
  4. display的值为table-cell、table-caption、inline-block、flex、inline-flex。

# link 和 @import的区别

  1. link是XHTML标签,除了加载CSS外,还可以定义RSS等其他事务;@import属于CSS范畴,只能加载CSS。
  2. link引用CSS时,在页面载入时同时加载;@import需要页面网页完全载入以后加载。
  3. link是XHTML标签,无兼容问题;@import是在CSS2.1提出的,低版本的浏览器不支持。
  4. link支持使用Javascript控制DOM去改变样式;而@import不支持。

# CSS 选择器和优先级

优先级一般为 !important > style > id > class