2024年前端面试高频题(一)

366 阅读8分钟

前端高频面试题11.png

1. 什么是盒子模型

盒子模型
每个HTML元素都可以看作是一个矩形盒子,盒子模型表示该元素的宽度和高度以及它们的外部和内部间距。

  • 内容(content) :实际内容的区域。
  • 内边距(padding) :内容与边框之间的距离。
  • 边框(border) :围绕内边距的边界区域。
  • 外边距(margin) :边框外部的空间。

盒子模型的类型

  • 标准盒子模型widthheight 属性指的是内容区域的尺寸,不包括内边距和边框。
  • IE盒子模型widthheight 属性包括内边距和边框。可通过 box-sizing: border-box; 来应用。

内容区(Content)

这是盒子的实际显示内容区域,可以是文本、图片或其他元素。其宽度和高度由CSS属性widthheight定义。

内边距(Padding)

内边距是在内容与边框之间的空间,形成盒子的内部边距。使用CSS定义:

.box {
    padding: 10px; /* 上下左右各10px的内边距 */
}

边框(Border)

边框包裹内边距和内容区域,边框的样式、宽度和颜色都可以设置。例如:

.box {
    border: 1px solid #000; /* 1px实线黑色边框 */
}

外边距(Margin)

外边距是盒子与外部元素之间的间隔,不影响背景色。可以通过CSS进行设置:

.box {
    margin: 20px; /* 上下左右各20px的外边距 */
}

盒模型类型

根据不同的盒模型计算方式,盒子大小的计算结果也是不同的。

  • 标准盒模型:宽度和高度只包括内容区,不包括内边距和边框。
  • IE盒模型:宽度和高度包括内容区、内边距和边框。

可以通过CSS属性box-sizing进行控制:

/* 标准盒模型 */
.box {
    box-sizing: content-box; /* 默认行为 */
}

/* IE盒模型 */
.box {
    box-sizing: border-box; /* 包括内边距和边框 */
}

2. HTML5的新特性

2.1 语义化元素

HTML5引入了许多语义化的新元素,使得网页结构更加清晰:

  • <header>: 定义文档的头部
  • <footer>: 定义文档的底部
  • <nav>: 定义导航链接
  • <article>: 定义独立的内容
  • <section>: 定义文档中的区块

2.2 图形与多媒体

HTML5支持多媒体,无需外部插件:

  • <audio>: 用于嵌入音频
  • <video>: 用于嵌入视频
  • <canvas>: 提供绘图功能,支持动态生成图形
<canvas id="myCanvas" width="200" height="100" style="border:1px solid #000000;"></canvas>

<script>
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
ctx.font = "30px Arial";
ctx.fillText("Hello World", 10, 50);
</script>

2.3 本地存储与离线支持

HTML5提供了Web Storage API和Application Cache技术:

  • Local Storage: 允许在用户的浏览器中存储数据,数据不会过期。
  • Session Storage: 只在一个浏览器会话中有效。
  • IndexedDB: 提供了一种存储大量结构化数据的方法。
// 使用 Local Storage 存储数据
localStorage.setItem("username", "JohnDoe");
console.log(localStorage.getItem("username")); // JohnDoe

2.4 表单控件的增强

HTML5增加了一些新的表单控件,比如 date, email, urlrange 等。

<input type="date" id="start" name="trip-start" value="2023-10-01">
<input type="email" id="email" name="email" required>

2.5 新的API

  • Geolocation API: 获取用户的地理位置信息。
  • Drag and Drop API: 实现拖放操作。
  • Web Workers: 允许在后台线程中运行 JavaScript。

3. 如何避免网站出现乱码问题

乱码问题通常是因为字符编码不一致导致的。在前端开发中,我们可以通过以下几种方式避免乱码问题:

3.1 使用UTF-8编码

确保文件编码为UTF-8是避免乱码的有效方法。在HTML中,我们可以通过以下方式指定字符集:

<meta charset="UTF-8">

3.2 设置HTTP头

在服务器端,设置响应头也可以确保浏览器以正确的字符集解析内容:

Content-Type: text/html; charset=UTF-8

3.3 数据库设置

在数据库中存储数据时,也要确保使用UTF-8编码,例如在MySQL中,可以使用:

ALTER DATABASE mydatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

3.4 文件保存

在文本编辑器中保存文件时,选择UTF-8作为编码格式,以防止保存时产生乱码。

4. 常见的css布局方式有哪些

  • 常规流(Normal Flow) :元素按文档顺序排列。
  • 浮动布局(Float) :使用float属性实现元素的左右排列。
  • 定位布局(Position) :使用position属性(如absoluterelativefixedsticky)来精确控制元素位置。
  • Flex布局:使用display: flex,实现一维布局,元素可以自动调节。
  • Grid布局:使用display: grid,实现二维布局。

5.什么是跨域

5.1 跨域的概念

跨域是指在一个域(协议+域名+端口)下的脚本试图去请求另一个域的资源。在浏览器的同源策略下,出于安全考虑,跨域请求会被阻止。

5.2 跨域的解决方法

  • JSONP
    利用<script>标签可以跨域的特点,通过返回一个函数来实现跨域请求的回调。
function handleResponse(data) {
    console.log(data);
}
var script = document.createElement('script');
script.src = 'https://api.example.com/data?callback=handleResponse';
document.body.appendChild(script);
  • CORS

Cross-Origin Resource Sharing,是一种允许服务器指定哪些源可以访问其资源的机制。我们可以在服务器端设置相应的HTTP头来允许CORS。

Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST
Access-Control-Allow-Headers: Content-Type
  • 代理服务器

通过设置Proxy(代理)来避免跨域请求,前端请求先发送到同源的服务器,然后由该服务器转发请求到第三方。

通过设置代理服务器,在同源请求中转发请求。一般在开发环境中使用此方法。

// 使用webpack-dev-server的proxy配置
devServer: {
    proxy: {
        '/api': {
            target: 'https://api.example.com',
            secure: false
        }
    }
}

6. 介绍一下CSS预处理器

CSS预处理器是一种用于扩展CSS功能和提高CSS编写效率的工具。通过使用预处理器,开发者可以使用变量、嵌套、混入等功能,使得CSS开发更加灵活和高效。

6.1 常见的CSS预处理器

  • Sass: Sass是最流行的CSS预处理器之一,支持变量、嵌套和混入等功能。使用.scss.sass格式。
$primary-color: #333;

body {
    color: $primary-color;
}
  • LESS: LESS是一个动态样式表语言,类似于Sass,功能也包括变量、嵌套和混入,使用.less格式。
@primary-color: #333;

body {
    color: @primary-color;
}
  • Stylus: Stylus是一种强大的CSS预处理器,具有极大的灵活性和可扩展性。使用 .styl 格式。
primary-color = #333

body
    color primary-color

6.2 为什么要使用预处理器

  • 使用变量可以避免重复代码。
  • 支持嵌套使得样式结构更清晰。
  • 提高了维护性。

7. 什么是单页面应用(SPA)

7.1 单页面应用的定义

单页面应用(SPA)是指一个Web应用程序或网站,它通过动态加载内容而不需要重新加载整个页面。用户在与应用交互时,浏览器会使用JavaScript在后台请求内容并更新页面,而不是每次都请求新页面。

7.2 SPA的优点

  • 快速的用户体验: 因为页面不需要重新加载,切换之间的响应速度更快。
  • 减少HTTP请求: 只在必要时请求数据,减少了请求次数。
  • 状态管理: 使用JavaScript可以更为灵活地管理应用的状态。

7.3 SPA的缺点

  • SEO问题: 由于内容是通过JavaScript动态加载的,搜索引擎可能无法抓取和索引。
  • 初次加载慢: 由于需要加载大量JavaScript和资源,首屏加载时间可能较长。
  • 浏览器历史管理: 需要手动管理用户的历史记录和前进/后退操作。

8. 什么是响应式设计

响应式设计是一种网页设计技术,可以确保网站能够在不同设备上自动调整和适应布局,以便用户在电脑、平板、手机等各种设备上都具有良好的用户体验。通过使用媒体查询、弹性图片、流式布局等技术,设计响应式网站可以确保网页内容能够根据设备的尺寸和分辨率进行自适应,避免了传统网页固定布局的限制。

8.1 媒体查询

CSS3的媒体查询允许开发者根据设备的特性(如宽度、分辨率)来应用不同的样式。

/* 适用于宽度小于600px的设备 */
@media (max-width: 600px) {
    body {
        background-color: lightblue;
    }
}

8.2 流式布局

流式布局使得网页元素宽度可以相对于其容器进行设置,而不是固定值。这使得页面在不同尺寸的设备上都能够自适应。

.container {
    width: 80%; /* 百分比宽度 */
    margin: 0 auto; /* 水平居中 */
}

8.3 弹性布局(Flexbox)

Flexbox布局可以轻松地进行一维布局,使得元素在空间变化时能够自适应对齐。

.container {
    display: flex;
    flex-wrap: wrap; /* 允许折行 */
}

.item {
    flex: 1 1 200px; /* 自适应宽度,最小宽度200px */
}

5.4 CSS Grid布局

CSS Grid是一种实现二维布局的强大工具,可以将页面分割成网格,并控制元素的位置和大小。

.container {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(100px, 1fr)); /* 自适应列 */
}

5.5 灵活的图片

确保图片在不同设备上适应其容器,可以设置为最大宽度100%。

img {
    max-width: 100%; /* 使图片宽度自适应容器 */
    height: auto; /* 保持比例 */
}