夯实前端基础之HTML篇

知识点概览

在这里插入图片描述

HTML部分

1. DOM和BOM有什么区别?

  • DOM(Document Object Model)

当网页被加载时,浏览器会创建页面的对象文档模型,HTML DOM 模型被结构化为对象树

用途: 主要用于网页内容的动态修改和交互,比如网页的局部更新、表单验证、创建动态列表等场景。

在这里插入图片描述

  • 什么是Shadow DOM?和普通DOM树有什么区别?
    • web component做到真正的组件化
    • 原生规范,无需框架
    • 天然与用户隔离,真正意义上的CSS scope
    • 比如常用的video标签,我们通常只能在DOM结构中看到一个video标签,但在设置中选择显示Shadow DOM的时候,能看到它真正的结构

在这里插入图片描述

// 手动实现一个shadow DOM
<body><script>customElements.define("my-shadow-dom",class extends HTMLElement {connectedCallback() {const shadow = this.attachShadow({ mode: "open" });shadow.innerHTML = "this is my shadow DOM!";}});</script><my-shadow-dom></my-shadow-dom></body>

在这里插入图片描述

  • BOM(Browser Object Model)

浏览器对象模型,document也是浏览器的对象

用途: 主要用于用于控制浏览器的行为,如页面导航、获取浏览器信息、管理浏览器窗口大小和位置等操作。

2. HTML中meta有什么作用?

HTML 标签

作用:定义该html文档的元数据(字符集、页面描述、关键词、文档作者和视口设置等)

浏览器(如何显示内容或重新加载页面)、搜索引擎(关键词)和其他网络服务会用到元数据

<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><!-- 它为浏览器提供了关于如何控制页面尺寸和缩放比例的指令。 --><meta name="keywords" content="css, JavaScript, CSS3"><meta name="author" content="guoshouying"><meta name="description" content="this is my site."><meta http-equiv="refresh" content="10"><!-- 每 10 秒刷新一次文档 -->
</head>

3. HTML5中语义化标签有哪些及特性

优点:1、利于搜索引擎优化SEO,2、方便开发和维护,3、无障碍访问(Accessibility)

在这里插入图片描述

4. 如何检查浏览器是否支持h5

  • 检测特定的html5标签或者API,如 canvas,video,audio等标签,看浏览器能否正确识别
var canvas = document.createElement('canvas'); 
if (canvas.getContext) { console.log("浏览器支持canvas"); 
} else { console.log("浏览器不支持canvas"); 
}

5. 哪些标签可以优化SEO?

  • 元标签(meta
  • 语义化标签(headersectionarticle等)- 这些标签能够让搜索引擎更好地理解页面的结构和内容。
  • 链接标签(a
  • 图像标签(img)- alt属性是搜索引擎理解图像内容与页面相关性的重要依据。

6. 对target='_blank’的理解?有什么安全性问题?如何防范?

作用:在新的窗口中打开链接指向的内容

  • 安全问题
    • 钓鱼攻击风险:打开新的窗口后,通过window.opener可以访问原始窗口对象,进而获取到一些隐私信息,如登录状态,账号信息等,从而进行钓鱼攻击。
    • 跨站脚本攻击(XSS)风险:如果新打开的页面包含恶意脚本,并且能够通过window.opener与原始页面进行交互,就有可能将恶意脚本注入到原始页面中,导致用户信息泄露或者其他安全问题
  • 防范措施
<a href="http://www.baidu.com" target="_blank" rel="norefferrer noopener">打开百度</a>

7. src和href的区别?

  • src(Souce)
    • 常用于img, script, iframe等标签,用于指定要加载到当前元素中的外部资源的位置。加载时,浏览器会停止对HTML文档的解析,直到获取并加载完指定的资源,然后再继续HTML解析。
  • href(hypertext reference)
    • 常用于a(超链接),link标签(链接样式表),用于指定目标资源的位置,这个资源和当前文档是引用关系,浏览器不会暂停HTML解析去执行它。a标签中只有点击的时候才执行加载该页面。对于<link rel="stylesheet" href="styles.css">,浏览器会在后台异步加载样式表,不会阻塞 HTML 文档的解析
    • href=“javascript:void(0) " 和 href=”#" 有什么区别?
      • href="javascript:void(0) ":表示死链接,通常用于需要在点击链接时执行 JavaScript 代码,但不希望页面有任何跳转或刷新的情况:<a href="javascript:void(0)" onclick="doSomething()">点击我</a>,如果页面javascript被禁用,将不工作。
      • href="#":锚点,默认是#top,页面会向上滚动,如果页面javascript被禁用,仍然工作。

8. script标签中的defer和async的区别?

  • 相同点
    • 都是实现脚本的异步加载,不会阻塞浏览器对HTML文档的解析,在后台下载脚本,提高网页性能及用户体验。
  • 不同点
    • defer:脚本加载完后不会立即执行,等HTML解析完按顺序执行脚本。适用于脚本间有依赖顺序,或者需要操作DOM的场景。
    • async:脚本加载完立即执行,且不按照顺序,哪个下载完的快先执行哪个。适用于不操作DOM的独立脚本,比如广告脚本,第三方统计脚本。

9. 什么是canvas & 什么时候用?

  • 概念
    • h5提供的标签,允许用JavaScript在画布上绘图(形状、线条、曲线、方框、文本和图像,以及颜色、旋转、透明度和其他像素操作)
    • canvas是基于像素的,有一个二维的网格系统,原点为(0,0)在左上角,x轴水平向右,y轴垂直向下。
    • 与SVG相比,SVG是可缩放矢量图形,使用XML来描述图形,可以方便的缩放,修改。canvas绘制的图形基于像素修改比较困难。
  • 使用场景
    • 游戏开发:简单的休闲游戏,如连连看,绘制图形。
    • 可视化开发:柱状图,折线图等各种图表。
    • 图像处理和特效:例如,实现图像的灰度化、模糊处理、旋转、缩放等效果。
    • 动画制作:加载动画,粒子动画(比如模拟雪花飘落、烟花绽放等效果)等。
  • 代码实现 Canvas API
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Canvss</title>
</head>
<body><!-- 创建canvas元素 --><canvas id="myCanvas" width="500" height="500"></canvas><script>const canvasElem = document.getElementById('myCanvas');// 创建绘图上下文context对象const ctx = canvasElem.getContext('2d');ctx.fillStyle = "#ff0000";   // 设置填充颜色ctx.fillRect(0, 0, 200, 100); // 绘制矩形,fillRect(x, y, width, height)ctx.clearRect(10, 10, 50, 50); // 清除矩形区域,clearRect(x, y, width, height)ctx.strokeStyle = "red";   // 设置边框颜色   ctx.strokeRect(0, 102, 100, 50); // 绘制矩形边框,strokeRect(x, y, width, height)ctx.beginPath(); // 开始绘制路径ctx.moveTo(0,220); // 将画笔移动到指定的坐标点,不进行绘制,主要用于确定线条的起始点ctx.lineTo(150, 220); // 画一条线段到指定位置ctx.stroke(); // 绘制线段// 绘制圆形// x和y是圆心的坐标,radius是半径,startAngle和endAngle是起始角度和结束角度(以弧度为单位),counterclockwise是一个布尔值,用于指定是否逆时针绘制。ctx.beginPath();ctx.arc(100, 300, 50, 0, Math.PI * 2, true); // arc(x, y, radius, startAngle, endAngle, counterclockwise)ctx.stroke();</script>
</body>
</html>

svg和canvas画出的圆形区别

在这里插入图片描述

10. 渐进增强和优雅降级之间的区别?

  • 渐进增强(Progressive Enhancement)
    • 一种网页设计和开发理念。它强调从最基本的、能在所有浏览器和设备上正常工作的核心内容和功能开始构建网页。然后,根据浏览器的能力和设备的特性,逐步添加更高级的样式、交互功能和性能优化。
    • 例如,先构建一个只包含纯文本内容和基本链接的网页,确保它在最古老的浏览器或功能受限的设备(如一些低性能的移动设备)上能够正常访问和理解。之后,再为支持 CSS3 和 JavaScript 的现代浏览器添加样式(如渐变背景、动画效果)和交互功能(如表单验证、下拉菜单的动态效果)。
    • 兼容性好,易于维护和扩展
  • 优雅降级(Graceful Degradation)
    • 优雅降级的理念与渐进增强相反。它是从一个功能齐全、具有高级特性(如复杂的 CSS 样式、大量的 JavaScript 交互)的网站开始构建,然后考虑当浏览器或设备不支持某些高级特性时,如何让网站 “优雅地” 降级,即仍然能够提供基本的、可接受的用户体验。
    • 用户体验优化在先,灵活性。

11. 什么是回流和重绘?

  • 回流(重排)Reflow
    • 浏览器重新计算页面中元素的几何属性(如位置,大小等)
      • 修改元素的尺寸、位置、边距、填充等属性.
      • 添加或删除可见的 DOM 元素.
      • 改变元素的字体大小.
      • 页面的尺寸变化(如窗口大小调整).
      • 获取元素的几何属性(如 offsetWidthoffsetHeight 等).
    • 比如排队前面的一个人走了,后面所有人都要向前走一步,或者有人插队,后面所有人都要向后退,这就是回流
  • 重绘 Repaint
    • 浏览器重新绘制元素的过程
      • image的宽高定了,只是换了src
      • 改变元素的颜色,边框等属性
      • 修改元素可见性(display:none改为block)
    • 比如排队有人替你占位置,你来了,替你的那个人走了,不影响到后面的人,这就是重绘
  • 优化策略
    • 使用虚拟DOM:现代化前端框架像 React、Vue.js 等都使用了虚拟 DOM 来优化 DOM 更新。当数据发生变化时,框架会先在虚拟 DOM 上进行操作,计算出新旧虚拟 DOM 的差异(这个过程称为 “diffing”),然后只将真正需要更新的部分应用到真实 DOM 上。这样可以避免不必要的 DOM 操作,从而减少回流和重绘。因为在虚拟 DOM 层面,可以高效地比较和计算出最小的更新范围,而不是像直接操作真实 DOM 那样,每次小的修改都可能引发大面积的布局重新计算和重绘。
    • 避免内联样式的频繁修改: 内联样式(通过style属性修改样式)会导致浏览器立即重新计算样式和布局。如果需要频繁地修改元素的样式,最好使用类名切换或者外部 CSS 样式表来控制样式变化。
    • 使用display:none代替visibility:hidden: 缺点:在合适的场景下才能用。
    • 脱离文档流(使用position:absoluteposition:fixed:需要谨慎使用,可能会带来布局上的复杂性。

12. iframe有哪些应用?如何处理iframe通信?

  • 应用
    • 最常见的一种微前端手段
    • 利用iframe开发低代码平台
    • 嵌入第三方内容(如广告,地图,AI助手等)
    • 跨域
  • 通信: window.postMessage方法

iframeA.html

<body>这是页面A<button onclick="onClick()">点击我</button><iframe id="iframe" src="./iframeB.html"></iframe><script>//向iframe发送消息const iframe = document.getElementById("iframe");function onClick() {iframe.contentWindow.postMessage("hello b页面", "*");}//监听iframe里的页面发出的消息window.addEventListener("message", (val) => {console.log("message", val);});</script></body>

iframeB.html

<body>这是页面B<button onclick="onClick()">点击我</button><script>//向父页面发送消息function onClick() {window.parent.postMessage("message", "*");}//接受父页面传来的消息window.addEventListener("message", (val) => {console.log("valll", val);});</script></body>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/65770.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SD ComfyUI工作流 老照片修复上色

文章目录 老照片修复上色SD模型Node节点工作流程开发与应用效果展示老照片修复上色 该工作流专门设计用于老照片的修复和上色,通过一系列高级的图像处理技术,包括深度图预处理、面部修复、上色和图像放大等步骤,来恢复老照片的质量并增加色彩。首先,工作流加载老照片并进行…

后端技术选型 sa-token校验学习 下 结合项目学习 前后端登录

目录 后端设置 Controller 层 Service 层 后端返回 Token 给前端 1. 用户提交登录请求 2. 后端验证用户身份 3. 返回 Token 4. 前端保存 Token 前端存储 1. 前端向后端发起请求 2. 前端存储一下 Token 3.管理用户认证的 token 的 工具 4. 在 Service 层进行设置 H…

如何用 SSH 访问 QNX 虚拟机

QNX 虚拟机默认是开启 SSH 服务的&#xff0c;如果要用 SSH 访问 QNX 虚拟机&#xff0c;就需要知道虚拟机的 IP 地址&#xff0c;用户和密码。本文我们来看看如何获取这些参数。 1. 启动虚拟机 启动过程很慢&#xff0c;请耐心等待。 2. 查看 IP 地址 等待 IDE 连接到虚拟机。…

java面向对象编程特性概述

目录 1. 类和对象 2. 封装&#xff08;Encapsulation&#xff09; 3. 继承&#xff08;Inheritance&#xff09; 4. 多态&#xff08;Polymorphism&#xff09; 5. 抽象&#xff08;Abstraction&#xff09; (1). 抽象类&#xff08;Abstract Class&#xff09; (2).接口…

React(二)——Admin主页/Orders页面/Category页面

文章目录 项目地址一、侧边栏1.1 具体实现 二、Header2.1 实现 三、Orders页面3.1 分页和搜索3.2 点击箭头显示商家所有订单3.3 页码按钮以及分页 四、Category页面4.1 左侧商品添加栏目4.2 右侧商品上传栏 五、Sellers页面六、Payment Request 页面&#xff08;百万数据加载&a…

maven 下载依赖 jhash:2.1.2 和对应 jar 包

原文地址 前言 25年新的一年&#xff0c;那就先更新一篇技术文章吧&#xff0c;这个是这几天刚遇到的一个有意思的bug&#xff0c;记录分享一下 原因分析 在使用maven加载一个项目的时&#xff0c;发现maven的依赖一直无法解析&#xff0c;更换阿里云镜像和中央仓库都没办法…

nums[:]数组切片

问题&#xff1a;给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 使用代码如下没有办法通过测试示例&#xff0c;必须将最后一行代码改成 nums[:]nums[-k:]nums[:-k]切片形式&#xff1a; 原因&#xff1a;列表的切片操作 …

python-leetcode-三数之和

15. 三数之和 - 力扣&#xff08;LeetCode&#xff09; class Solution:def threeSum(self, nums: List[int]) -> List[List[int]]:nums.sort() # 排序n len(nums)res []for i in range(n):# 剪枝&#xff1a;如果当前数 > 0&#xff0c;三数之和不可能为 0if nums[i]…

极狐GitLab 正式发布安全版本17.7.1、17.6.3、17.5.5

本分分享极狐GitLab 补丁版本 17.7.1, 17.6.3, 17.5.5 的详细内容。这几个版本包含重要的缺陷和安全修复代码&#xff0c;我们强烈建议所有私有化部署用户应该立即升级到上述的某一个版本。对于极狐GitLab SaaS&#xff0c;技术团队已经进行了升级&#xff0c;无需用户采取任何…

探索绿色能源系统的固态继电器:2025年展望

随着全球向绿色能源转型的加速&#xff0c;对高效、可靠和环保元件的需求从未如此强烈。在这种背景下&#xff0c;国产固态继电器(SSR)在实现太阳能逆变器、风力涡轮机和储能系统等关键技术方面发挥着关键作用。本文探讨了绿色能源系统背景下中国固态继电器行业的前景&#xff…

Rust语言使用iced实现简单GUI页面

使用cargo新建一个rust项目 cargo new gui_demo cd gui_demo 编辑Cargo.toml文件 ,添加iced依赖 [package] name "gui_demo" version "0.1.0" edition "2021"[dependencies] iced "0.4.2" 编辑src/main.rs文件&#xff1a; u…

Github提交Pull Request教程 Git基础扫盲(零基础易懂)

1 PR是什么&#xff1f; PR&#xff0c;全称Pull Request&#xff08;拉取请求&#xff09;&#xff0c;是一种非常重要的协作机制&#xff0c;它是 Git 和 GitHub 等代码托管平台中常见的功能&#xff0c;被广泛用于参与社区贡献&#xff0c;从而促进项目的发展。 PR的整个过…

RabbitMQ 可观测性最佳实践

RabbitMQ 简介 RabbitMQ 是一个开源的消息代理和队列服务器&#xff0c;用 Erlang 语言编写&#xff0c;支持多种客户端。它通过使用交换机&#xff08;Exchanges&#xff09;、队列&#xff08;Queues&#xff09;和绑定&#xff08;Bindings&#xff09;来路由消息&#xff…

美摄科技PC端视频编辑解决方案,为企业打造专属的高效创作平台

在当今这个信息爆炸的时代&#xff0c;视频已成为不可或缺的重要内容形式&#xff0c;美摄科技推出了PC端视频编辑解决方案的私有化部署服务&#xff0c;旨在为企业提供一款量身定制的高效创作平台。 一、全面功能&#xff0c;满足企业多样化需求 美摄科技的PC端视频编辑解决…

【Oracle篇】深入了解执行计划中的访问路径(含表级别、B树索引、位图索引、簇表四大类访问路径)

&#x1f4ab;《博主介绍》&#xff1a;✨又是一天没白过&#xff0c;我是奈斯&#xff0c;从事IT领域✨ &#x1f4ab;《擅长领域》&#xff1a;✌️擅长阿里云AnalyticDB for MySQL(分布式数据仓库)、Oracle、MySQL、Linux、prometheus监控&#xff1b;并对SQLserver、NoSQL(…

腾讯云AI代码助手编程挑战赛-厨房助手之AI大厨

腾讯云AI代码助手编程挑战赛-厨房助手之AI大厨 作品简介 身处当今如火箭般迅猛发展的互联网时代&#xff0c;智能聊天助手已然化身成为提升用户体验的关键利器&#xff0c;全方位渗透至人们的数字生活。 紧紧跟随着这股汹涌澎湃的时代浪潮&#xff0c;我毅然投身于极具挑战性…

vscode 无法使用npm, cmd命令行窗口可以正常执行

解决方法&#xff1a; 执行命令获得命令的位置 get-command npm 得到如下 然后删除或者修改 npm.ps1文件 让其不能使用就行。然后重启vscode即可。 pnpm 同理即可 另外加速源 国内镜像源&#xff08;淘宝&#xff09;&#xff1a; npm config set registry https://regist…

简易CPU设计入门:算术逻辑单元(四)

项目代码下载 请大家首先准备好本项目所用的源代码。如果已经下载了&#xff0c;那就不用重复下载了。如果还没有下载&#xff0c;那么&#xff0c;请大家点击下方链接&#xff0c;来了解下载本项目的CPU源代码的方法。 CSDN文章&#xff1a;下载本项目代码 上述链接为本项目…

Spring Boot 和微服务:快速入门指南

&#x1f496; 欢迎来到我的博客&#xff01; 非常高兴能在这里与您相遇。在这里&#xff0c;您不仅能获得有趣的技术分享&#xff0c;还能感受到轻松愉快的氛围。无论您是编程新手&#xff0c;还是资深开发者&#xff0c;都能在这里找到属于您的知识宝藏&#xff0c;学习和成长…

VSCode 使用鼠标滚轮控制字体

一、 文件 | 首选项 | 设置 二、单击在 settings.json中编辑 "editor.mouseWheelZoom": true 注注注意&#xff1a;保存哦&#xff01;ctrlS 三、测试 按住ctrl鼠标滚轮&#xff0c;控制字体大小