浏览器相关细节题(2)


什么是“渐进增强”和“优雅降级”?

  • 渐进增强

    答案

    先针对低版本浏览器构建页面,保证最基本的功能,然后再针对高版本浏览器进行功能的追加,交互的改进等,以达到更好的用户体验。

  • 优雅降级

    答案

    先针对高版本的浏览器构建完整的页面,然后再针对低版本的浏览器兼容处理。

HTML顶部的<!DOCTYPE>的作用是什么?

  • 作用

    答案

    它位于HTML文档中的第一行,用于告知浏览器应该用什么文档标准来解析这个文档。在HTML5中,我们只需要这样写就可以了:<!DOCTYPE>

说一说HTML语义化?

  • 语义化

    答案

    HTML5新增的主要结构元素有6个:header、nav、article、aside、section、footer

    • HTML语义化可以提高代码的可读性,便于开发调试和后期维护
    • 搜索引擎通过HTML标签来识别页面的结构,HTML语义化可以更好地实现搜索引擎优化(即SEO)

    加分项:HTML5语义化标签并没有广泛使用,例如淘宝、京东。原因可能为HTML5语义化标签的兼容性,为了确保网站在各种浏览器上正常显示,开发者可能更倾向于使用传统的div和span等标签;可能为许多现有的网站和应用程序使用传统的标签结构,将它们迁移到HTML5语义化标签可能需要大量的工作和修改。

块级元素有哪些?行内元素有哪些?空元素有哪些?

  • 概念

    答案

    其中,空元素就是我们所说的自闭合元素。

    • 块级元素:div、p、ul、ol、h1~h6等
    • 行内元素:strong、em、span、a等
    • 空元素:meta、link、hr、br、img、input等

label元素的作用是什么?具体是怎么使用的?

  • 概念

    答案

    label 元素用于将某个表单元素和某段说明文字关联起来,它主要有两个方面的作用。

    • 语义上绑定了label元素和表单元素。
    • 增强了鼠标可用性,使得我们单击label中的文本时,其所关联的表单元素也会获得焦点。

说一下h1与title、strong与b、em与i,3组标签之间的区别

  • h1与title

    答案

    title定义的是地址栏的标题,h1表示的是文章的标题。

  • strong与b

    答案

    strong是一个有语义的标签,用来加粗文本,带有强调的语义,搜索引擎会赋予一定的权重。

    b是一个无语义的标签,仅仅用来加粗文本。

    为了HTML语义化,我们应该使用strong,而不是b。

  • em与i

    答案

    em是一个有语义的标签,使得文本变成斜体,带有强调的语义,搜索引擎会赋予一定的权重。

    i是一个无语义的标签,仅仅使得文本变成斜体。

    为了HTML语义化,我们应该使用em,而不是i。

img标签中的alt和title这两个属性有什么区别?

  • 概念

    答案

    • alt属性用于描述图片,这个描述文字是给搜索引擎看的。当图片无法显示时,页面会显示alt中的文字。
    • title属性也是用于描述图片的,不过这个描述文字是给用户看的。当鼠标指针移到图片上时,图片会显示title中的文字。
  • 概念

    答案

    • 页面代码是从上到下进行渲染的,如果使用link方式,会先加载 CSS 后加载 HTML 。
    • 如果使用 @import 方式,会先加载 HTML 后加载 CSS 。
    • 如果 HTML 在 CSS 之前加载,页面用户体验就会非常差,因此一般情况下,我们只会用 link 方式,而不是 @import 方式。

哪些 CSS 属性可以继承,哪些可以不继承?请列举几个。

  • 概念

    答案

    • 可以继承的属性:font-family、font-size、font-weight、color等。
    • 不可继承的属性:width、height、padding、margin、border等。

为什么要初始化 CSS 样式?

  • 原因

    答案

    • 不同的浏览器中,有些标签的默认样式是不一样的。如果没有对 CSS 进行初始化,往往会出现浏览器之间的页面显示差异。
    • 初始化 CSS 样式,可以让 HTML 元素具有相同的初始样式,然后再对元素进行统一定义,这样就可以让页面在不同的浏览器中产生相同的结果。

简述一下 src 和 href 的区别

  • 区别

    答案

    • src 是 source 的缩写,表示来源地址,在img、script、iframe等元素上使用。src引入的内容,会插入到当前元素的位置,它是页面必不可少的内容。
    • href 是 Hypertext Reference 的缩写,表示超文本引用,在a、link 等元素上使用。href 引入的内容,并不会插入到当前元素的位置,仅仅表示在当前文档和引用资源之间建立联系。

请详细说一下 inline 元素和 inline-block 元素的区别。(不需要说相同点)

  • 区别

    答案

    • inline 元素无法定义宽度和高度,但是 inline-block 元素可以。
    • inline 元素(img,input)只能定义 margin-left 和 margin-right,不能定义 margin-top 和 margin-bottom,而 inline-block 元素可以定义4个方向的 margin。

display:none 和 visibility:hidden 二者有什么区别?

  • 区别

    答案

    • display:none 的元素被隐藏之后,不占据原来的位置。visibility:hidden 的元素被隐藏之后,还会占据原来的位置
    • 从搜索引擎优化的角度来看,display:none 隐藏的内容是不会纳入权重的考虑范围内的。

inline-block 元素之间产生空隙的原因是什么?怎么去除空隙?

  • 原因

    答案

    • 产生原因:HTML 代码中的换行、空格、Tab 等空白符,在字体大小不为0的情况下,会占据一定宽度,因此使用 inline-block 会产生一定的空隙
    • 解决方法:为父元素定义 font-size: 0

使用纯 CSS 来实现一个三角形的原理是什么?

  • 原理

    答案

    • 元素的宽度和高度都定义为0
    • border 设置得足够大
    • 使用 transparent 值把 3 个方向的边框隐藏掉。
    div
    {
    	width: 0;
    	height: 0;
    	border-width: 20px;
    	border-style: solid;
    	border-color: red transparent transparent transparent
    }

清除浮动都有哪些方式?每个方式都有哪些优缺点?

  • 方式

    答案

    常见的清除浮动的方式有3种:clear:both、overflow:hidden、::after 伪元素

    1. clear:both

      这种方式需要多增加一个无意义的标签。

    2. overflow:hidden

      这种方式虽然不会增加多余的标签,但是会隐藏超出父元素的内容部分

    3. ::after 伪元素

      这种方式不会增加无意义的标签,也不会隐藏超出父元素的内容部分。

      .clearfix::after
      {
      	clear:both;
      	content:'';
      	display:block;
      	height:0;
      	visibility:hidden;
      }

如何实现块元素的水平居中和垂直居中?如何实现行内元素的水平居中和垂直居中?

详见:CSS水平垂直居中详解 | QT-7274 (qblog.top)

如何实现两栏布局?

详见:CSS中的布局汇总 | QT-7274 (qblog.top)

如何实现三栏布局?(至少说三种)

详见:CSS中的布局汇总 | QT-7274 (qblog.top)

如何创建一个新的BFC

  • 概念

    答案

    如果一个元素具备以下任何条件,则该元素都会创建一个新的BFC。

    • float 的值不为 none。
    • position 的值不是 static 和 relative。
    • overflow 的值不是 visible。
    • display 的值为inline-block、table-cell、table-caption 中的任意一个。

BFC 都有什么特点?简单说一下。

  • 特点

    答案

    BFC 有以下6个方面的特点(尽量多回答)。

    • 在一个BFC内部,盒子会在垂直方向上一个接一个排列。
    • 在一个BFC内部,相邻的 margin-top 和 margin-bottom 会叠加。
    • 在一个BFC内部,每一个元素的左外边界会紧贴着包含盒子的容器的左边,即使是浮动元素也是如此。
    • 在一个BFC内部,如果存在内容元素是一个新的 BFC ,并且存在内部元素是浮动元素,则该 BFC 的区域不会与 float 元素的区域重叠。
    • BFC 就是页面上的一个隔离的盒子,该盒子内部的子元素不会影响外面的元素。
    • 计算一个 BFC 的高度时,其内部浮动元素的高度也会参与计算。

为什么一般推荐将 CSS 中的link放置在 head 之间,而将 JavaScript 中的script放置在body之前?你知道有哪些例外吗?

  • 原因

    答案

    • 浏览器是从上到下来解析一个页面的,如果外部CSS文件放到中,那么浏览器会先解析HTML,再解析CSS。此时用户看到的是一个没有样式的页面,这样的用户体验是非常差的。
    • 对于外部 JavaScript 文件,如果放到页面的顶部,那么浏览器就会先解析 JavaScript,然后再去解析 CSS。如果外部 JavaScript 文件过大,那么页面渲染和交互都会被阻塞。
    • 如果希望在 DOM 加载前就执行外部 JavaScript 文件,此时
评论
  目录