夯實前端基礎之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.pswp.cn/web/65770.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/65770.shtml
英文地址,請注明出處:http://en.pswp.cn/web/65770.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Qt資源文件以及文件加密

1、Qt資源文件 在Qt中&#xff0c;資源文件&#xff08;.qrc&#xff09;是一種方便的方式來管理應用程序中的多媒體文件&#xff0c;如圖像、圖標和其他資源。這些文件使用XML格式定義&#xff0c;并在編譯時嵌入到應用程序的二進制文件中。 創建資源文件的步驟如下&#xff…

深入詳解人工智能自然語言處理(NLP)之文本處理:分詞、詞性標注、命名實體識別

【自然語言處理】——深入詳解人工智能自然語言處理&#xff08;NLP&#xff09;之文本處理&#xff1a;分詞、詞性標注、命名實體識別 自然語言處理&#xff08;Natural Language Processing&#xff0c;簡稱NLP&#xff09;是人工智能的一個重要分支&#xff0c;涉及如何使計…

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

文章目錄 老照片修復上色SD模型Node節點工作流程開發與應用效果展示老照片修復上色 該工作流專門設計用于老照片的修復和上色,通過一系列高級的圖像處理技術,包括深度圖預處理、面部修復、上色和圖像放大等步驟,來恢復老照片的質量并增加色彩。首先,工作流加載老照片并進行…

后端技術選型 sa-token校驗學習 下 結合項目學習 前后端登錄

目錄 后端設置 Controller 層 Service 層 后端返回 Token 給前端 1. 用戶提交登錄請求 2. 后端驗證用戶身份 3. 返回 Token 4. 前端保存 Token 前端存儲 1. 前端向后端發起請求 2. 前端存儲一下 Token 3.管理用戶認證的 token 的 工具 4. 在 Service 層進行設置 H…

dtdug匯編指令練習

r 通用寄存器 m 代表內存 imm 代表立即數 r8 代表8位通用寄存器 m8 代表8位內存 imm8 代表8位立即數 mov指令練習 MOV 的語法: mov 目標操作數&#xff0c;源操作數 作用:拷貝源操作數到目標操作數 1、源操作數可以是立即數、通用寄存器、段寄存器、或者內存單元. 2、目標操作數…

vue3模板引用ref

1.訪問模板引用 要在組合式 API 中獲取引用&#xff0c;我們可以使用輔助函數 useTemplateRef() 只可以在組件掛載后才能訪問模板引用 <script setup> import { useTemplateRef, onMounted } from vue// 第一個參數必須與模板中的 ref 值匹配 const input useTempla…

如何用 SSH 訪問 QNX 虛擬機

QNX 虛擬機默認是開啟 SSH 服務的&#xff0c;如果要用 SSH 訪問 QNX 虛擬機&#xff0c;就需要知道虛擬機的 IP 地址&#xff0c;用戶和密碼。本文我們來看看如何獲取這些參數。 1. 啟動虛擬機 啟動過程很慢&#xff0c;請耐心等待。 2. 查看 IP 地址 等待 IDE 連接到虛擬機。…

【Java基礎】Java異常捕捉,throws/throw、finally、try、catch關鍵字的含義與運用

1. Java 異常處理&#xff1a; 異常是程序中的一些錯誤&#xff0c;但并不是所有的錯誤都是異常&#xff0c;并且錯誤有時候是可以避免的。 比如說&#xff0c;你的代碼少了一個分號&#xff0c;那么運行出來結果是提示是錯 java.lang.Error&#xff1b;如果你用System.out.p…

js 中堆、棧、隊列+宏任務+微任務+web workers

文章目錄 js 中堆、棧、隊列介紹js中 堆、棧、隊列的區別與應用拓展&#xff08;宏任務與微任務&#xff09;Web Workers js 中堆、棧、隊列介紹 棧&#xff08;Stack&#xff09; 概念&#xff1a; 棧是一種遵循后進先出&#xff08;LIFO - Last In First Out&#xff09;原則…

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;更換阿里云鏡像和中央倉庫都沒辦法…

谷歌開放語音命令數據集,助力初學者踏入音頻識別領域

在人工智能的浪潮中&#xff0c;語音識別技術正逐漸成為我們日常生活的一部分。從智能助手到語音控制設備&#xff0c;語音識別的應用場景越來越廣泛。然而&#xff0c;對于初學者來說&#xff0c;進入這一領域往往面臨諸多挑戰&#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]…

字節小米等后端崗位C++面試題

C 基礎 引用和指針之間的區別&#xff1f;堆棧和堆中的內存分配有何區別&#xff1f;存在哪些類型的智能指針&#xff1f;unique_ptr 是如何實現的&#xff1f;我們如何強制在 unique_ptr 中僅存在一個對象所有者&#xff1f;shared_ptr 如何工作&#xff1f;對象之間如何同步…

極狐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的整個過…