HTML 語言簡介

1.概述

HTML 是網頁使用的語言,定義了網頁的結構和內容。瀏覽器訪問網站,其實就是從服務器下載 HTML 代碼,然后渲染出網頁。

HTML 的全名是“超文本標記語言”(HyperText Markup Language),上個世紀90年代由歐洲核子研究中心的物理學家蒂姆·伯納斯-李(Tim Berners-Lee)發明。它的最大特點就是支持超鏈接,點擊鏈接就可以跳轉到其他網頁,從而構成了整個互聯網。

1999年,HTML 4.01 版發布,成為廣泛接受的 HTML 標準。2014年,HTML 5 發布,這是目前正在使用的版本。

瀏覽器的網頁開發,涉及三種技術:HTML、CSS 和 JavaScript。HTML 語言定義網頁的結構和內容,CSS 樣式表定義網頁的樣式,JavaScript 語言定義網頁與用戶的互動行為。HTML 語言是網頁開發的基礎,CSS 和 JavaScript 都是基于 HTML 才能生效,即使沒有這兩者,HTML 本身也能使用,可以完成基本的內容展示。本教程只介紹 HTML 語言。

下面就是一個簡單網頁的 HTML 源碼。

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="utf-8"><title>網頁標題</title>
</head>
<body><p>Hello World</p>
</body>
</html>

上面這段代碼,可以保存成文件hello.html。瀏覽器打開這個本地文件,就能看到文字“Hello World”。

瀏覽器右鍵菜單的“查看源碼”(View page source),可以展示當前網頁的 HTML 源碼。

2.網頁的基本概念

2.1 標簽

網頁的 HTML 代碼由許許多多不同的標簽(tag)構成。學習 HTML 語言,就是學習各種標簽的用法。

下面就是標簽的一個例子。

<title>網頁標題</title>

上面代碼中,<title></title>就是一對標簽。

標簽用來告訴瀏覽器,如何處理這段代碼。標簽的內容就是瀏覽器所要渲染的、展示在網頁上的內容。

標簽放在一對尖括號里面(比如<title>),大多數標簽都是成對出現的,分成開始標簽和結束標簽,結束標簽在標簽名之前加斜杠(比如</title>)。但是,也有一些標簽不是成對使用,而是只有開始標簽,沒有結束標簽,比如上一節示例的<meta>標簽。

<meta charset="utf-8">

上面代碼中,<meta>標簽就沒有結束標簽</meta>

這種單獨使用的標簽,通常是因為標簽本身就足夠完成功能了,不需要標簽之間的內容。實際應用中,它們主要用來提示瀏覽器,做一些特別處理。

標簽可以嵌套。

<div><p>hello world</p></div>

上面代碼中,<div>標簽內部包含了一個<p>標簽。

嵌套時,必須保證正確的閉合順序,不能跨層嵌套,否則會出現意想不到的渲染結果。

<div><p>hello world</div></p>

上面代碼就是錯誤的嵌套,閉合順序不正確。

HTML 標簽名是大小寫不敏感,比如<title><TITLE>是同一個標簽。不過,一般習慣都是使用小寫。

另外,HTML 語言忽略縮進和換行。下面幾種寫法的渲染結果是一樣的。

<title>網頁標題</title><title>網頁標題
</title><title>網頁
標題</title>

進一步說,整個網頁的 HTML 代碼完全可以寫成一行,瀏覽器照樣解析,結果完全一樣。所以,正式發布網頁之前,開發者有時會把源碼壓縮成一行,以減少傳輸的字節數。

各種網頁的樣式效果,比如內容的縮進和換行,主要靠 CSS 來實現。

2.2 元素

瀏覽器渲染網頁時,會把 HTML 源碼解析成一個標簽樹,每個標簽都是樹的一個節點(node)。這種節點就稱為網頁元素(element)。所以,“標簽”和“元素”基本上是同義詞,只是使用的場合不一樣:標簽是從源碼角度來看,元素是從編程角度來看,比如<p>標簽對應網頁的p元素。

嵌套的標簽就構成了網頁元素的層級關系。

<div><p>hello world</p></div>

上面代碼中,div元素內部包含了一個p元素。上層元素又稱為“父元素”,下層元素又稱為“子元素”,即divp的父元素,pdiv的子元素。

2.3 塊級元素,行內元素

所有元素可以分成兩大類:塊級元素(block)和行內元素(inline)。

塊級元素默認占據一個獨立的區域,在網頁上會自動另起一行,占據 100% 的寬度。

<p>hello</p>
<p>world</p>

上面代碼中,p元素是塊級元素,因此瀏覽器會將內容分成兩行顯示。

行內元素默認與其他元素在同一行,不產生換行。比如,span就是行內元素,通常用來為某些文字指定特別的樣式。

<span>hello</span>
<span>world</span>

上面代碼中,span元素是行內元素,因此瀏覽器會將兩行內容放在一行顯示。

2.4 屬性

屬性(attribute)是標簽的額外信息,使用空格與標簽名和其他屬性分隔。

<img src="demo.jpg" width="500">

上面代碼中,<img>標簽有兩個屬性:srcwidth

屬性可以用等號指定屬性值,比如上例的demo.jpg就是src的屬性值。屬性值一般放在雙引號里面,這不是必需的,但推薦總是使用雙引號。

注意,屬性名是大小寫不敏感的,onclickonClick是同一個屬性。

HTML 提供大量屬性,用來定制標簽的行為,詳細介紹請看《元素的屬性》一章。

3.網頁的基本標簽

符合 HTML 語法標準的網頁,應該滿足下面的基本結構。

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="utf-8"><title></title>
</head>
<body>
</body>
</html>

不管多么復雜的網頁,都是從上面這個基本結構衍生出來的。

前面說過,HTML 代碼的縮進和換行,對于瀏覽器不產生作用。所以,上面的代碼完全可以寫成一行,渲染結果不變。上面這樣分行寫,只是為了提高可讀性。

下面就依次介紹,這個基本結構的主要標簽。它們構成了網頁的骨架。

3.1 <!doctype>

網頁的第一個標簽通常是<!doctype>,表示文檔類型,告訴瀏覽器如何解析網頁。

一般來說,只要像下面這樣,簡單聲明doctypehtml即可。瀏覽器就會按照 HTML 5 的規則處理網頁。

<!doctype html>

有時,該標簽采用完全大寫的形式,以便區別于正常的 HTML 標簽。因為<!doctype>本質上不是標簽,更像一個處理指令。

<!DOCTYPE html>

3.2 <html>

<html>標簽是網頁的頂層容器,即標簽樹結構的頂層節點,也稱為根元素(root element),其他元素都是它的子元素。一個網頁只能有一個<html>標簽。

該標簽的lang屬性,表示網頁內容默認的語言。

<html lang="zh-CN">

上面代碼表示,網頁是中文內容。如果是英文內容,zh-CN要改成en。更詳細的介紹,參見《元素的屬性》一章。

<head>標簽是一個容器標簽,用于放置網頁的元信息。它的內容不會出現在網頁上,而是為網頁渲染提供額外信息。

<!doctype html>
<html><head><title>網頁標題</title></head>
</html>

<head><html>的第一個子元素。如果網頁不包含<head>,瀏覽器會自動創建一個。

<head>的子元素一般有下面七個,后文會一一介紹。

  • <meta>:設置網頁的元數據。
  • <link>:連接外部樣式表。
  • <title>:設置網頁標題。
  • <style>:放置內嵌的樣式表。
  • <script>:引入腳本。
  • <noscript>:瀏覽器不支持腳本時,所要顯示的內容。
  • <base>:設置網頁內部相對 URL 的計算基準。

3.4 <meta>

<meta>標簽用于設置或說明網頁的元數據,必須放在<head>里面。一個<meta>標簽就是一項元數據,網頁可以有多個<meta><meta>標簽約定放在<head>內容的最前面。

不管什么樣的網頁,一般都可以放置以下兩個<meta>標簽。

<head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Page Title</title>
</head>

上面例子中,第一個<meta>標簽表示網頁采用 UTF-8 格式編碼,第二個<meta>標簽表示網頁在手機端可以自動縮放。

<meta>標簽有五個屬性,下面依次介紹。

(1)charset 屬性

<meta>標簽的charset屬性,用來指定網頁的編碼方式。該屬性非常重要,如果設置得不正確,瀏覽器可能無法正確解碼,就會顯示亂碼。

<meta charset="utf-8">

上面代碼聲明,網頁為 UTF-8 編碼。雖然開發者可以使用其他的編碼方式,但正確的做法幾乎總是應該采用 UTF-8。

注意,這里聲明的編碼方式,應該與網頁實際的編碼方式一致,即聲明了utf-8,網頁就應該使用 UTF-8 編碼保存。如果這里聲明了utf-8,實際卻是使用另一種編碼(比如 GB2312),并不會導致瀏覽器的自動轉碼,網頁可能會顯示為亂碼。

(2)name 屬性,content 屬性

<meta>標簽的name屬性表示元數據的名字,content屬性表示元數據的值。它們合在一起使用,就可以為網頁指定一項元數據。

<head><meta name="description" content="HTML 語言入門"><meta name="keywords" content="HTML,教程"><meta name="author" content="張三">
</head>

上面代碼包含了三個元數據:description是網頁內容的描述,keywords是網頁內容的關鍵字,author是網頁作者。

元數據有很多種,大部分涉及瀏覽器內部工作機制,或者特定的使用場景,這里就不一一介紹了。下面是一些例子。

<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="application-name" content="Application Name">
<meta name="generator" content="program">
<meta name="subject" content="your document's subject">
<meta name="referrer" content="no-referrer">

(3)http-equiv 屬性,content 屬性

<meta>標簽的http-equiv屬性用來補充 HTTP 回應的頭信息字段,如果服務器發回的 HTTP 回應缺少某個字段,就可以用它補充。<meta>標簽的content屬性是對應的字段內容。這兩個屬性與 HTTP 協議相關,屬于高級用法,這里就不詳細介紹了。

<meta http-equiv="Content-Security-Policy" content="default-src 'self'">

上面代碼設定 HTTP 回應的Content-Security-Policy字段。

下面是另一些例子。

<meta http-equiv="Content-Type" content="Type=text/html; charset=utf-8">
<meta http-equiv="refresh" content="30">
<meta http-equiv="refresh" content="30;URL='http://website.com'">

3.5 <title>

<title>標簽用于指定網頁的標題,會顯示在瀏覽器窗口的標題欄。

<head><title>網頁標題</title>
</head>

搜索引擎根據這個標簽,顯示每個網頁的標題。它對于網頁在搜索引擎的排序,有很大的影響,應該精心安排,反映網頁的主題。

<title>標簽的內部,不能再放置其他標簽,只能放置無格式的純文本。

3.6 <body>

<body>標簽是一個容器標簽,用于放置網頁的主體內容。瀏覽器顯示的頁面內容,都放置在它的內部。它是<html>的第二個子元素,緊跟在<head>后面。

<html><head><title>網頁標題</title></head><body><p>hello world</p></body>
</html>

4.空格和換行

HTML 語言有自己的空格處理規則。標簽內容的頭部和尾部的空格,一律忽略不計。

<p>  hello world   </p>

上面代碼中,hello前面的空格和world后面的空格,瀏覽器一律忽略不計。

標簽內容里面的多個連續空格(包含制表符\t),會被瀏覽器合并成一個。

<p>hello      world</p>

上面代碼中,helloworld之間有多個連續空格,瀏覽器會將它們合并成一個。網頁渲染的結果是,helloworld之間只有一個空格。

瀏覽器還會將文本里面的換行符(\n)和回車符(\r),替換成空格。

<p>helloworld
</p>

上面代碼中,helloworld之間有多個換行,瀏覽器會將它們替換成空格,然后再將多個空格合并成一個。網頁渲染的結果是,helloworld之間有一個空格。

這意味著,HTML 源碼里面的換行,不會產生換行效果。

5.注釋

HTML 代碼可以包含注釋,瀏覽器會自動忽略注釋。注釋以<!--開頭,以-->結尾,下面就是一個注釋的例子。

<!-- 這是一個注釋 -->

注釋可以是多行的,并且內部的 HTML 都不再生效了。

<!--<p>hello world</p>
-->

上面代碼是一個注釋的區塊,內部的代碼都是無效的,瀏覽器不會解析,更不會渲染它們。

注釋有助于理解代碼的含義,復雜的代碼塊前面最好加上注釋。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/36936.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/36936.shtml
英文地址,請注明出處:http://en.pswp.cn/news/36936.shtml

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

相關文章

zabbix自動注冊服務器以及部署代理服務器

文章目錄 Zabbix自動注冊服務器及部署代理服務器一.zabbix自動注冊1.什么是自動注冊2.環境準備3.zabbix客戶端配置4.在 Web 頁面配置自動注冊5.驗證自動注冊 二.部署 zabbix 代理服務器1.分布式監控的作用&#xff1a;2.環境部署3.代理服務器配置4.客戶端配置5.web頁面配置5.1 …

MS9940T 國產 模擬前端AFE芯片 11-15 節鋰電池或磷酸鹽電池管理芯片 替代BQ76940

產品簡述 MS9940T 是模擬前端 (AFE) 芯片&#xff0c;支持11 到 15 組電池串聯。通過 I 2 C &#xff0c;主機控制器 可以使用 MS9940T 來實現電池組管理功能&#xff0c;例如監控&#xff08;電池電壓、電池組電流、電池組 溫度&#xff09;、保護&#xff08;控制…

分類預測 | MATLAB實現GWO-BiLSTM-Attention多輸入分類預測

分類預測 | MATLAB實現GWO-BiLSTM-Attention多輸入分類預測 目錄 分類預測 | MATLAB實現GWO-BiLSTM-Attention多輸入分類預測預測效果基本介紹程序設計參考資料 預測效果 基本介紹 1.GWO-BiLSTM-Attention 數據分類預測程序 2.代碼說明&#xff1a;基于灰狼優化算法&#xff08…

vuejs 設計與實現 - 組件的實現原理

1.渲染組件 如果是組件則&#xff1a;vnode .type的值是一個對象。如下&#xff1a; const vnode {type: MyComponent,}為了讓渲染器能處理組件類型的虛擬節點&#xff0c;我們還需要在patch函數中對組件類型的虛擬節點進行處理&#xff0c;如下&#xff1a; function patc…

CentOS7.9 禁用22端口,使用其他端口替代

文章目錄 業務場景操作步驟修改sshd配置文件修改SELinux開放給ssh使用的端口修改防火墻&#xff0c;開放新端口重啟sshd生效 相關知識點介紹sshd服務SELinux服務firewall.service服務 業務場景 我們在某市實施交通信控平臺項目&#xff0c;我們申請了一臺服務器&#xff0c;用…

學習Vue:列表渲染(v-for)

在 Vue.js 中&#xff0c;實現動態列表的顯示是非常常見的需求。為了達到這個目的&#xff0c;Vue 提供了 v-for 指令&#xff0c;它允許您迭代一個數組或對象&#xff0c;將其元素渲染為列表。然而&#xff0c;在使用 v-for 時&#xff0c;key 屬性的設置也非常重要&#xff0…

微信小程序(原生)搜索功能實現

一、效果圖 二、代碼 wxml <van-searchvalue"{{ keyword }}"shape"round"background"#000"placeholder"請輸入關鍵詞"use-action-slotbind:change"onChange"bind:search"onSearch"bind:clear"onClear&q…

實踐-CNN卷積層

實踐-CNN卷積層 1 卷積層構造2 整體流程3 BatchNormalization效果4 參數對比5 測試效果 1 卷積層構造 2 整體流程 根據網絡結構來寫就可以了。 池化 拉平 訓練一個網絡需要2-3天的時間。用經典網絡來&#xff0c;一些細節沒有必要去扣。 損失函數&#xff1a; fit模型&…

運維監控學習筆記1

1、監控對象&#xff1a; 1、監控對象的理解&#xff1b;CPU是怎么工作的&#xff1b; 2、監控對象的指標&#xff1a;CPU使用率&#xff1b;上下文切換&#xff1b; 3、確定性能基準線&#xff1a;CPU負載多少才算高&#xff1b; 2、監控范圍&#xff1a; 1、硬件監控&#x…

線性掃描寄存器分配算法介紹

線性掃描寄存器分配 文章目錄 線性掃描寄存器分配1. 算法介紹2. 相關概念3. 算法的實現3.1 偽代碼3.2 圖示 參考文獻 論文地址&#xff1a; Linear Scan Register Allocation ? 我們描述了一種稱為線性掃描的快速全局寄存器分配的新算法。該算法不基于圖形著色&#xff0c;而…

echarts3d柱狀圖

//畫立方體三個面 const CubeLeft echarts.graphic.extendShape({shape: {x: 0,y: 0,width: 9.5, //柱狀圖寬zWidth: 4, //陰影折角寬zHeight: 3, //陰影折角高},buildPath: function (ctx, shape) {const api shape.api;const xAxisPoint api.coord([shape.xValue, 0]);con…

陪診小程序開發|陪診陪護小程序讓看病不再難

陪診小程序通過與醫療機構的合作&#xff0c;整合了醫療資源&#xff0c;讓用戶能夠更加方便地獲得專業醫療服務。用戶不再需要面對繁瑣的掛號排隊&#xff0c;只需通過小程序預約服務&#xff0c;便能夠享受到合適的醫療資源。這使得用戶的就醫過程變得簡單高效&#xff0c;并…

Redis使用規范及優化

緩存設計 緩存方案 普通緩存 查詢數據時&#xff0c;先查找緩存&#xff0c;如果有延長緩存時間并返回。如果沒有&#xff0c;再去查找數據庫&#xff0c;將查詢的數據再寫到緩存&#xff0c;同時設置過期時間。如果是靜態熱點數據&#xff0c;可以不設置緩存失效時間。 冷…

IntelliJ最佳插件

基于 IntelliJ 平臺的 JetBrains IDE 可能是當今最常見的 IDE 之一。它們的受歡迎程度在 JVM 語言社區中尤其明顯&#xff0c;IntelliJ IDEA 仍然是大多數開發人員的首選 IDE。所有這一切都是在一些新競爭對手的出現和老競爭對手克服以前的缺點并重新加入競爭者的情況下實現的。…

【EI/SCOPUS檢索】第三屆計算機視覺、應用與算法國際學術會議(CVAA 2023)

第三屆計算機視覺、應用與算法國際學術會議&#xff08;CVAA 2023) The 3rd International Conference on Computer Vision, Application and Algorithm 2023年第三屆計算機視覺、應用與算法國際學術會議&#xff08;CVAA 2023&#xff09;主要圍繞計算機視覺、計算機應用、計…

PPT顏色又丑又亂怎么辦?

一、設計一套PPT時&#xff0c;可以從這5個方面進行設計 二、PPT顏色 &#xff08;一&#xff09;、PPT常用顏色分類 一個ppt需要主色、輔助色、字體色、背景色即可。 &#xff08;二&#xff09;、搭建PPT色彩系統 設計ppt時&#xff0c;根據如下幾個步驟&#xff0c;依次選…

Arduino驅動紅外二氧化碳傳感器(氣體傳感器篇)

目錄 1、傳感器特性 2、驅動程序 紅外激光傳感器是將成熟的紅外吸收氣體檢測技術與精密光路設計、精良電路設計緊密結合而制作出的高性能傳感器,具有高靈敏度、高分辨率、低功耗,響應快、抗水汽干擾、不中毒、穩定性高、使用壽命長等特點。本篇博文使用Arduino驅動紅外二氧…

Android學習之路(2) 設置視圖

一、設置視圖寬高 ? 在Android開發中&#xff0c;可以使用LayoutParams類來設置視圖&#xff08;View&#xff09;的寬度和高度。LayoutParams是一個用于布局的參數類&#xff0c;用于指定視圖在父容器中的位置和大小。 ? 下面是設置視圖寬度和高度的示例代碼&#xff1a; …

Win10基于 Anaconda 配置 Deeplabcut 環境

最近需要做動物行為學分析的相關研究&#xff0c;同時由于合作者只有 Windows 系統&#xff0c;于是只好在 Windows 中配置環境。說實話還真的是挺折磨的。。。 一、下載 Anaconda 可以通過清華源下載 Anaconda&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/anaconda/ar…

算法leetcode|70. 爬樓梯(rust重拳出擊)

文章目錄 70. 爬樓梯&#xff1a;樣例 1&#xff1a;樣例 2&#xff1a;提示&#xff1a; 分析&#xff1a;題解&#xff1a;rust&#xff1a;go&#xff1a;c&#xff1a;python&#xff1a;java&#xff1a; 70. 爬樓梯&#xff1a; 假設你正在爬樓梯。需要 n 階你才能到達樓…