整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          htmx:增強版 HTML 來了!

          今,Web 用戶期望得到單頁應用(SPA)提供的流暢、動態的體驗。然而,創建 SPA 往往需要使用復雜的框架,如 React 和 Vue,學習和使用起來可能比較困難。這就是htmx的用武之地:一種通過直接在HTML中利用Ajax和CSS過渡效果等功能,為構建動態 Web 體驗帶來新思路的工具。下面就來看看 htmx 是什么,它有什么強大之處!

          htmx 概述

          HTMX 允許在不使用 JavaScript 的情況下添加現代瀏覽器功能。可以直接在 HTML 中使用屬性來訪問 AJAX、CSS 過渡效果、WebSockets 和服務器推送等功能,以便以超文本的簡單性和強大性構建現代用戶界面。

          HTMX的設計理念是通過解除HTML在前端開發中的一些限制,使其成為一個更加完整和強大的超文本工具。通常情況下,在傳統的Web開發中,只有<a><form>標簽可以發起HTTP請求,只有點擊和提交事件可以觸發這些請求,只有GET和POST方法可用,并且只能替換整個屏幕內容。而HTMX打破了這些限制,允許使用額外的HTML屬性來實現更多的功能,而不需要編寫大量的JavaScript代碼。例如,在HTML中使用特定的屬性即可實現進度條、懶加載、無限滾動、內聯驗證等特性。

          與其他前端框架(如Vue.js和React)不同,HTMX的工作方式是:當向服務器發送請求時,服務器返回完整的HTML響應,并更新頁面中的相應部分,而不是以JSON格式返回數據。這使得HTMX可以與任何服務器端技術進行集成,因為應用的邏輯和處理都發生在后端。這種方式簡化了前端開發并減少了對JavaScript的依賴。

          可以通過如下方式使用npm安裝HTMX:

          npm install htmx.org
          

          htmx 使用

          HTMX提供了一組屬性,可以直接從 HTM L中進行AJAX請求:

          • hx-post:發送一個POST請求到指定的URL。
          • hx-get:發送一個GET請求到指定的URL。
          • hx-put:發送一個PUT請求到指定的URL。
          • hx-patch:發送一個PATCH請求到指定的URL。
          • hx-delete:發送一個DELETE請求到指定的URL。

          這些屬性都接受一個 URL 作為參數,用于發送AJAX請求。因此,每當觸發元素時,它會向指定的URL發送指定類型的請求。來看下面的例子:

          <button hx-get="/api/resource">加載數據</button>
          

          在上面的例子中,按鈕元素被賦予了hx-get屬性。一旦點擊該按鈕,就會向/api/resource URL發送一個GET請求。

          那當從服務器返回數據時會發生什么呢?默認情況下,htmx 會將這個響應直接注入到發起請求的元素中,也就是示例中的按鈕元素。然而,htmx 并不局限于這種行為,它提供了將響應數據指定為不同元素的目標的能力,接下來將深入探討這個功能。

          使用htmx觸發請求

          htmx根據特定元素上發生的特定事件來觸發Ajax請求:

          • 對于inputtextareaselect元素,觸發事件是change事件。
          • 對于表單元素,觸發事件是submit事件。
          • 對于其他所有元素,觸發事件是click事件。

          下面來看一個例子:

          <label>關鍵詞:
            <input
              type="text"
              placeholder="輸入關鍵詞"
              hx-get="https://v2.jokeapi.dev/joke/Any?format=txt&safe-mode"
              hx-target="#joke-container"
              name="contains"
            />
          </label>
          
          <p id="joke-container">笑話內容</p>
          

          為了觸發搜索,需要激活change事件。對于<input>元素而言,當元素失去焦點且其值已被改變時就會觸發change事件。因此,當在文本框中輸入一些內容,然后點擊頁面上其他地方,一個笑話就會出現在<p>元素中。簡而言之,在輸入關鍵詞后,光標離開輸入框,笑話就會自動顯示出來。

          這很不錯,但通常用戶希望在輸入時就看到搜索結果更新,也就是說,當用戶在輸入框中輸入內容時,將自動觸發Ajax請求,并在后臺獲取最新的搜索結果,并將其更新到頁面上相應的位置。因此,用戶不需要手動點擊其他地方以觸發搜索,而是實時地在輸入的同時獲得更新的搜索結果。為了實現這一點,可以給<input>元素添加一個htmx trigger屬性:

          <input
            ...
            hx-trigger="keyup"
          />
          

          現在結果會立即更新。但同時引入了一個新的問題:現在會在每次輸入時都進行一次API調用。為了避免這個問題,可以使用修飾符來改變觸發器的行為。htmx 提供了以下修飾符選項:

          • once:如果希望請求只執行一次,可以使用此修飾符。
          • changed:此修飾符確保只有在元素的值發生變化時才發出請求。
          • delay:<時間間隔>:此修飾符設置一個等待期(如1秒),在此等待期間再次觸發事件將重新計時。
          • throttle:<時間間隔>:使用此修飾符,可以在發出請求之前設置一個等待期(例如1秒)。然而,與delay不同的是,如果在設定的時間內觸發了新的事件,則該事件將被忽略,確保請求僅在定義的時間后觸發。
          • from:<CSS選擇器>:此修飾符使得可以在特定的元素上監聽事件,而不是原始元素。

          在這種情況下,delay是我們想要的修飾符:

          <input
            ...
            hx-trigger="keyup delay:500ms"
          />
          

          現在,當在輸入框中輸入內容時(嘗試輸入一個較長的詞,比如"developer"),只有在暫停或完成輸入時才會觸發請求。

          <label>關鍵字:
            <input
              type="text"
              placeholder="E輸入關鍵字d"
              hx-get="https://v2.jokeapi.dev/joke/Any?format=txt&safe-mode"
              hx-target="#joke-container"
              name="contains"   
              hx-trigger="keyup delay:500ms"
            />
          </label>
          
          <p id="joke-container">笑話內容</p>
          

          正如你所見,這種做法只需要幾行客戶端代碼就可以實現一個搜索框模式。

          請求指示器

          在Web開發中,當用戶執行某個操作并且該操作可能需要一段時間才能完成(如進行網絡請求),我們通常需要給用戶提供反饋。其中一種常見的反饋方式是使用請求指示器,以可視化的方式提示用戶該操作正在進行中。

          htmx集成了對請求指示器的支持,讓我們能夠向用戶提供這種反饋。它使用hx-indicator類來指定一個元素作為請求指示器。具有此類的任何元素的默認不透明度為 0,使其在DOM中不可見但存在。

          當htmx發起一個Ajax請求時,它會在觸發元素上應用htmx-request類。htmx-request類會導致該元素或任何具有htmx-indicator類的子元素的不透明度變為 1。

          例如,下面是一個具有加載旋轉圖標作為其請求指示器的元素:

          <button hx-get="/api/data">
            加載數據
            <img class="htmx-indicator" src="/spinner.gif" alt="Loading">
          </button>
          

          當具有hx-get屬性的按鈕被點擊并且請求開始時,按鈕會自動添加一個htmx-request類。這個類可以讓請求指示器(例如加載旋轉圖標)在按鈕上顯示,當請求完成后,這個類會被移除,請求指示器也會停止顯示。還可以使用htmx-indicator屬性來指示接收htmx-request類的元素(顯示請求指示器的元素)。

          <label>關鍵字:
            <input
              type="text"
              placeholder="輸入關鍵字"
              hx-get="https://v2.jokeapi.dev/joke/Any?format=txt&safe-mode"
              hx-target="#joke-container"
              name="contains"   
              hx-trigger="keyup delay:500ms"
              hx-indicator=".loader"
            />
          </label>
          
          <span class="loader htmx-indicator"></span>
          
          <p id="joke-container">笑話內容</p>
          

          定位元素和更新內容

          在某些情況下,我們可能需要在發送請求的元素之外更新其他元素。htmx 允許我們hx-target屬性來指定Ajax響應應該更新的特定元素。可以通過在hx-target屬性中設置一個CSS選擇器來指定要更新的元素。例如有一個用于發布新評論的表單,希望將新評論添加到評論列表中,而不是更新表單本身。

          <button
            hx-get="https://v2.jokeapi.dev/joke/Any?format=txt&safe-mode&type=single"
            hx-target="#joke-container"
          >
            Hello htmx!
          </button>
          

          當用戶點擊按鈕并發起請求時,獲取到的響應數據將會更新顯示在頁面上具有"joke-container"這個ID的元素內部,而不是替換按鈕本身的內容。這樣可以實現在特定位置更新內容,而不影響其他部分的效果。

          擴展CSS選擇器

          htmx提供了一些擴展的CSS選擇器,用于更高級的元素選擇和內容加載:

          • this :指定帶有 hx-target 屬性的元素作為實際更新目標。
          • closest :找到與給定CSS選擇器匹配的最近的祖先元素。
          • nextprevious :在DOM中查找與給定CSS選擇器匹配的后續或前置元素。
          • find :查找與給定CSS選擇器匹配的第一個子元素。

          通過使用這些關鍵字,我們可以更靈活地選擇要更新的元素。例如,在之前的例子中,我們可以使用 hx-target="next p" 來指定更新目標元素,而不是使用具體的 ID。這樣可以簡化代碼,并且使得更新更加動態和通用。

          更新內容

          默認情況下,htmx會用Ajax響應替換目標元素的內容。但是,如果希望追加新內容而不是替換它,那就可以使用hx-swap屬性。該屬性允許指定新內容應該如何插入目標元素中。可能的取值包括outerHTMLinnerHTMLbeforebeginafterbeginbeforeendafterend。例如,使用hx-swap="beforeend"會將新內容追加到目標元素的末尾,這對于新評論的場景非常合適。

          CSS 過渡

          可以使用CSS過渡效果來使元素在不使用JavaScript的情況下平滑地改變樣式。要實現這一點,需要在多個HTTP請求之間保持相同的元素 ID。這樣,當 htmx 接收到新的內容并更新元素時,它將能夠應用CSS過渡效果,使樣式的改變過渡得更加平滑。

          <button hx-get="/new-content" hx-target="#content">
            請求數據
          </button>
          
          <div id="content">
            初始內容
          </div>
          

          在htmx發起到/new-content的Ajax請求后,服務器返回以下內容:

          <div id="content" class="fadeIn">
            新內容
          </div>
          

          盡管內容發生了變化,但是<div>元素保持了相同的ID。然而,新增的內容中添加了一個fadeIn類。通過為新內容添加fadeIn類,我們可以定義相應的CSS規則,例如opacitytransition屬性,來實現淡入效果。這樣,當htmx接收到新的內容并更新元素時,CSS過渡效果將被觸發,使元素的變化過渡得更加平滑。

          下面來創建一個 CSS 過渡效果,使元素從初始狀態平滑過渡到新狀態:

          .fadeIn {
            animation: fadeIn 2.5s;
          }
          
          @keyframes fadeIn {
            0% {opacity: 0;}
            100% {opacity: 1;}
          }
          

          當htmx加載新內容時,它會觸發CSS過渡效果,從而創建一個流暢的視覺過渡到更新后的狀態。

          使用 View Transitions API

          全新的View Transitions API提供了一種在DOM元素的不同狀態之間進行動畫轉換的方式。與涉及元素CSS屬性變化的CSS過渡不同,視圖過渡是用于動畫元素內容的變化。

          View Transitions API 是一個正在積極開發中的全新實驗性功能。該API已經在Chrome 111+中實現,并預計將來會有更多的瀏覽器支持它。htmx提供了與View Transitions API一起使用的接口,并在不支持該API的瀏覽器中回退到非過渡機制。

          在 htmx 中,View Transitions API 的使用方法如下:

          • htmx.config.globalViewTransitions配置變量設置為true。這將對所有交換使用過渡效果。
          • hx-swap屬性中使用transition:true選項。可以使用CSS定義和配置視圖過渡效果。

          下面是一個“彈跳”過渡效果的示例,其中舊內容彈出,新內容彈入:

          @keyframes bounce-in {
            0% { transform: scale(0.1); opacity: 0; }
            60% { transform: scale(1.2); opacity: 1; }
            100% { transform: scale(1); }
          }
          
          @keyframes bounce-out {
            0% { transform: scale(1); }
            45% { transform: scale(1.3); opacity: 1; }
            100% { transform: scale(0); opacity: 0; }
          }
          
          .bounce-it {
            view-transition-name: bounce-it;
          }
          
          ::view-transition-old(bounce-it) {
            animation: 600ms cubic-bezier(0.4, 0, 0.2, 1) both bounce-out;
          }
          
          ::view-transition-new(bounce-it) {
            animation: 600ms cubic-bezier(0.4, 0, 0.2, 1) both bounce-in;
          }
          

          在使用htmx時,可以在hx-swap屬性中添加transition:true選項來啟用過渡效果。然后,可以將bounce-it類添加到想要進行動畫處理的內容上。

          <button
            hx-get="https://v2.jokeapi.dev/joke/Any?format=txt&safe-mode" 
            hx-swap="innerHTML transition:true" 
            hx-target="#joke-container"
          >
            加載新動畫
          </button>
          
          <div id="joke-container" class="bounce-it">
            <p>初始動畫內容</p>
          </div>
          

          在這個例子中,當<div>的內容被更新時,舊內容會以彈跳的方式退出視圖,而新內容會以彈跳的方式進入視圖,從而產生一種生動的視覺效果。

          表單校驗

          htmx 與 HTML5 Validation API 可以良好的集成,在表單提交時,htmx會利用瀏覽器原生的驗證功能進行表單驗證。

          例如,當用戶點擊提交按鈕時,只有當輸入字段包含有效的電子郵件地址時,才會向/contact發送POST請求。

          <form hx-post="/contact">
            <label>Email:
              <input type="email" name="email" required>
            </label>
            <button>提交</button>
          </form>
          

          值得注意的是,htmx在驗證過程中會觸發一系列事件,可以利用這些事件來添加自己的驗證邏輯和錯誤處理方法。例如,如果想要在JavaScript代碼中實現郵箱檢查,可以這樣做:

          form hx-post="/contact">
            <label>Email:
              <input type="email" name="email" required>
            </label>
            <button>提交</button>
          </form>
          
          <script>
            const emailInput = document.querySelector('input[type="email"]');
          
            emailInput.addEventListener('htmx:validation:validate', function() {
              const  pattern = /@gmail\.com$/i;
          
              if (!pattern.test(this.value)) {
                this.setCustomValidity('只接受谷歌郵箱!');
                this.reportValidity();
              }
            });
          </script>
          

          這里使用了htmx的htmx:validation:validate事件,該事件在調用元素的checkValidity()方法之前被觸發。

          現在,當嘗試提交帶有非gmail.com地址的表單時,將會看到一樣的錯誤提示。

          其他功能

          除了上述提到的功能外,htmx 還具有很多其他功能,旨在增強HTML的能力,并為處理Web應用中的動態內容更新提供簡單而強大的方式。它的功能不僅限于已經介紹的內容,還包括一些設計用于創建更具交互性和響應性的網站的功能,而無需使用復雜的JavaScript框架。

          擴展

          擴展是htmx工具中功能強大的工具。這些可定制的JavaScript組件使我們能夠根據我們的特定需求進一步增強和定制庫的行為。擴展包括在請求中啟用JSON編碼、操作HTML元素上類的添加和刪除、調試元素、支持客戶端模板處理等。有了這些,我們就可以將htmx自定義為更精細的粒度。

          Boosting

          htmx的“Boosting”功能允許我們將標準的HTML錨點(即鏈接)和表單轉換為Ajax請求。在傳統的Web開發中,點擊鏈接或提交表單通常會導致整個頁面刷新。而通過使用htmx的"boosting"功能,這些鏈接和表單將通過Ajax請求來處理,只更新需要更新的部分內容,而不需要刷新整個頁面。這使得網站的加載速度更快,并提供了更流暢的用戶體驗。類似的技術在過去被稱為pjax,現在在htmx中也可以實現類似的效果。

          <div hx-boost="true">
            <a href="/blog">Blog</a>
          </div>
          

          這個 div 中的錨點標簽會發出一個 Ajax GET 請求到 /blog,并將 HTML 響應替換到 <body> 標簽中。

          通過利用這個功能,可以為用戶創建更流暢的導航和表單提交體驗,使我們的 Web 應用更像單頁面應用(SPA)。

          歷史記錄管理

          htmx 內置了對瀏覽器歷史記錄的支持,可以與標準的瀏覽器歷史API對接。這樣,可以將URL添加到瀏覽器導航欄,并將頁面當前狀態存儲在瀏覽器的歷史記錄中,確保"返回"按鈕按照用戶的期望進行操作。這樣一來,我們就可以創建出類似于SPA的網頁,能夠在不重新加載整個頁面的情況下維護狀態和處理導航。

          與第三方庫一起使用

          htmx 可以很容易的與其他庫進行集成。它可以無縫地與許多第三方庫進行整合,利用它們的事件來觸發請求。

          總結

          htmx是一個多功能、輕量級且易于使用的工具。它成功地將HTML的簡潔性與通常與復雜JavaScript庫相關的動態功能相結合,為創建交互式網絡應用程序提供了一個全新的選擇。

          然而,它并不是適用于所有情況的解決方案。對于更復雜的應用,我們可能仍然需要使用JavaScript框架。但是,如果目標是創建一個快速、交互性強且用戶友好的Web應用,而又不增加太多復雜性,那么 htmx 絕對是值得考慮的。

          介紹

          在創建網頁時,超鏈接是非常重要的元素之一,它能夠跳轉到其他頁面、文檔或者不同網站上。這是網頁設計中必不可少的功能之一。本篇文章將教你怎么在網頁中創建鏈接,讓你的網頁內容更加豐富多樣。

          創建網頁鏈接的HTML代碼

          在HTML中,超鏈接由標簽來完成。它通常包含在和的標簽內,擁有兩個主要屬性:href和text。其中,href屬性用于指定鏈接目標的URL,而text則用于定義鏈接的文本內容。

          舉個例子,你可以使用以下代碼創建一個簡單的鏈接:


          lt;h2 id="title1">開發工具(工欲善其事必先利其器)</h2>

          • 為了讓大家更快的融入到編程的世界中, 不被繁瑣的英語單詞所困擾, 不用每天編寫很多沒有意義的重復代碼, 提升大家的開發效率今后的課程中我們統一采用最高級高發工具來編寫網頁

          <h3 id="title2">常見的前端開發工具</h3>

          • 記事本: 提示功能較差

          • editplus/nodepad++: 提示功能較差

          • Dreamwaver: 更偏向設計

          • Sublime: 輕量級,自帶功能不太全, 但是插件十分豐富

          • WebStorm: 重量級, 自帶功能全面

          • 其它ide(zend studio、netbean等)

          • 為了讓大家更快的融入到編程的世界中, 不被繁瑣的英語單詞所困擾, 今后的課程中我們統一采用最牛逼最高級的高發工具WebStorm

          <h3 id="title3">WebStorm安裝和使用</h3>

          • 安裝軟件

          1.png

          2.png

          3.png

          4.jpg

          5.jpg

          6.png

          7.jpg

          8.png

          • 破解軟件

          9.png

          10.png

          11.jpg

          12.jpg

          13.png

          14.png

          • 漢化軟件

          15.png

          16.jpg

          • 設置模版

          • 創建文件

          17.png

          18.jpg

          關注微信訂閱號:網頁設計輕松學 有更多內容

          19.png

          • WebStorm常見快捷鍵

          • 如何在WebStorm中利用快捷鍵創建一個新的.html的文件

            • 同時按下鍵盤上的Ctrl + Alt + Insert

          • 如何在WebStorm中讓光標移動到當前行的末尾

            • 按下鍵盤上的End鍵即可

          • 如何在WebStorm中讓光標移動到當前行的最前面

            • 按下鍵盤上的Home鍵即可

          • 如何在WebStorm中讓光標在多行中閃爍

            • 按住鍵盤上的Alt鍵不放, 然后再按住鼠標的左鍵不放, 然后再拖動鼠標即可

          • 如何在WebStorm中快速的復制光標所在的那一行

            • 按下鍵盤上的Ctrl + D

          • 如何在WebStorm中快速的刪除光標所在的那一行

            • 按下鍵盤上的Ctrl + X

          • 如何在WebStorm中讓標簽包裹一段內容, 也就是自動在一段內容前后加上標簽

            • 按下鍵盤上的Ctrl + Alt + T, 然后按下回車, 然后輸入對應的標簽即可


          <h2 id="title4">基礎標簽學習</h2>

          <h3 id="title5">H系列標簽(Header 1~Header 6)</h3>

          • 作用:

            • 用于給文本添加標題語義

          • 格式:

            • <h1>xxxxxx</h1>

          • 注意點:

            • H標簽是用來給文本添加標題語義的, 而不是用來修改文本的樣式的

            • H標簽一共有6個, 從H1~H6, 最多就只能到6, 超過6則無效

            • 被H系列標簽包裹的內容會獨占一行

            • 在H系列的標簽中, H1最大, H6最小

            • 在企業開發中, 一定要慎用H系列的標簽, 特別是H1標簽. 在企業開發中一般情況下一個界面中只能出現一個H1標簽(和SEO有關)

          <h3 id="title6">P標簽(Paragraph)</h3>

          • 作用:

            • 告訴瀏覽器哪些文字是一個段落

          • 格式:

            • <p>xxxxxxxx</p>

          • 注意點:

            • 在瀏覽器中會單獨占一行

          <h3 id="title7">Hr標簽(Horizontal Rule)</h3>

          • 作用:

            • 在瀏覽器上顯示一條分割線

          • 格式:

            • <hr />

          • 注意點:

            • 在瀏覽器中會單獨占一行

            • 通過我的觀察發現HR標簽可以寫/也可以不寫/, 如果不寫/那么就是按照HTML的規范來編寫, 如果寫上/那么就是按照XHTML的規范來編寫.但是在HTML5中, 由于HTML5兼容HTML和XHTML所有寫不寫都可以.那么以后我們在做前端開發時到底寫還是不寫呢? 按照高級開發工具的提示來寫即可.

            • 由于hr標簽是用來修改樣式的, 所以不推薦使用. 今后開發中添加水平線一般都使用CSS盒子來做


          <h2 id="title8">HTML注釋(Annotation)</h2>

          • 什么是注釋?

            • 注釋是在所有計算機語言中都非常重要的一個概念,從字面上看,就是注解、解釋的意思

            • 注釋可以用來解釋某一段程序或者某一行代碼是什么意思,方便直接或程序員之間的交流

          • 為什么要使用注釋?

            • 適當的注釋,能夠讓我們的程序更加可讀,所以用中文提示自己,這里的程序是干什么的

          • 注釋格式

          <!--被注釋的內容-->
          • 注意點:

            • 被注釋的內容不會在瀏覽器中顯示, 注釋是寫給我們自己看的

            • 注釋不能嵌套使用

          <!--<!--被注釋的內容-->-->
          • 快捷鍵: ctrl + /


          <h3 id="title9">img標簽(image)</h3>

          • 作用: 在網頁上插入一張圖片

          • 格式: ![](圖片路徑)

          • 標簽的屬性

            • 寫在標簽中K="V"這種格式的文本我們稱之為標簽屬性

          屬性名稱作用
          src(source)告訴瀏覽器需要插入的圖片路徑, 以便于瀏覽器到該路徑下找到需要插入的圖片
          alt(alternate)規定圖像的替代文本, 只有在src指定的路徑下找不到圖片,才會顯示alt指定的文本
          title懸停文本(介紹這張圖片, 只有在鼠標移動到圖片上時才會顯示)
          height設置圖片顯示的高度
          width設置圖片顯示的寬度
          • 注意點:

            • img標簽添加的圖片默認不是占一整行空間

            • 如果想讓圖片等比拉伸, 只寫高度或者寬度即可

          關注微信訂閱號:網頁設計輕松學 有更多內容

          <h3 id="title10">br標簽(Break)</h3>

          • 作用:

            • 讓內容換行

          • 格式:

            • <br/>

          • 注意點:

            • br的意思是不另起一個段落進行換行, 而網頁中99.99%需要換行時都是因為另起了一個段落, 所以應該用p來做

          <h3 id="title11">相對路徑和絕對路徑</h3>

          • 圖片路徑分為兩種, 一種是絕對路徑, 一種是相對路徑, 我們重點學習相對路徑, 因為在企業級開發中沒有人使用絕對路徑

          • 絕對路徑

            • 從電腦的具體盤符開始尋找我們需要的資源

            • ![](F:/lnj/girl.png)

            • 以上代碼表示在F盤下查找lnj文件夾, 然后在lnj文件夾下查找girl.png圖片

          • 相對路徑

            • 一個文件相對于另外一個文件的位置尋找我們需要的資源

            • ![](girl.png)

            • 假設html文件和girl.png都在lnj文件夾下, 以上代碼表示在lnj文件夾下查找girl.png圖片

          • 為什么沒人使用絕對路徑?

            • 可以移植性太差.

          • 什么是可移植性?

            • 可以簡單的理解為把寫到的代碼拷貝到另外一臺電腦上是否能夠正常運行

          • 為什么絕對路徑可移植性差?

            • 假如我編寫的html文件放在我電腦的 F:/lnj 目錄下, html文件中用到的圖片放在F:/lnj/images目錄下, 我給src指定的絕對路為F:/lnj/images/girl.png. 那么將來我將整個lnj文件夾拷貝給你, 如果你將lnj文件夾放在非F盤下, 那么將無法顯示圖片

            • 例如你存放在C盤根目錄, 那么圖片的絕對路徑會變為C:/lnj/images/girl.png, 而src會去F盤找, 所以不會顯示

            • 你只有將lnj文件夾存放在F盤根目錄下時圖片才會正常運行, 這就叫做可移植性不好

            • Q群;162542073

          • 為什么相對路徑可移植性好?

            • 同上, 如果src指定的路徑為images/girl.png, 那么無論你拷貝到那個盤, 哪個文件夾. 系統都只會在當前文件夾中的images下去查找圖片, 不會受到盤符和存儲位置的影響, 只要保證頁面和圖片位置的相對關系不變就不會影響到圖片的顯示

          • 相對路徑幾種查找方式

            • ../代表訪問上級目錄

            • 假設a文件夾下面有b文件夾, 圖片存放在a文件夾中, html文件存放在b文件夾中, 那么路徑為../girl.png

            • 因為html文件在b文件夾中, 所以路徑是相對于b文件夾的, 所以../代表訪問b文件夾的上一級目錄, b文件夾的上一級目錄是a文件夾, 所以../girl.png就代表在a文件夾查找girl.png

            • 直接編寫, 例如abc/girl.png

            • 加上./ 編寫, 例如./abc/girl.png

            • 相對當前目錄有幾個文件夾,就在后面依次補全幾個文件夾名稱即可, 例如 abc/bbb/ccc/ddd/girl.png./abc/bbb/ccc/ddd/girl.png

            • 直接編寫, 例如: girl.png

            • 加上./ 編寫, 例如./girl.png

            • ./代表當前目錄, ./girl.png代表在當前目錄下查找

            • 同級

            • 下級

            • 上級

          • 注意事項:

            • 相對路徑不會出現這種格式aaa/../bbb/girl.png

            • 雖然可以顯示, 但是企業開發中千萬不要這么寫

          <h3 id="title12">a標簽(anchor)</h3>

          • 格式: <a >江哥博客</a>

          • 作用: 用于從一個頁面鏈接到另一個頁面

          • 注意事項:

            • 在a標簽之間一定要寫上文字, 如果沒有, 那么在頁面上找不到這個標簽

            • a標簽也叫做超級鏈接超鏈接

          • a標簽的屬性

          屬性名稱作用
          href(hypertext reference)指定跳轉的目標地址
          target告訴瀏覽器是否保留原始界面, _blank保留, _self不保留
          title懸停文本(介紹這個鏈接, 只有在鼠標移動到超鏈接上時才會顯示)
          • base標簽和a標簽結合使用

            • 如果每個a標簽都想在新頁面中打開,那么逐個設置a標簽的target屬性比較麻煩, 這時我們可以使用base和a標簽結合的方式,一次性設置有a標簽都在新頁面中打開

            • 格式: <base target="_blank" />

          • 注意事項:

            • base必須嵌套在head標簽里面

            • 如果標簽上指定了target,base中也指定了target,那么會按照標簽上指定的來執行

          • a標簽其它用法

            • 例如<a href="girl.zip">下載福利資源<a/>

            • 格式: <a href="01-錨點鏈接.html#location">跳轉到指定位置</a>

            • 只需要在01-錨點鏈接.html頁面添加一個id位置即可

            • 2.1.格式<a href="#location">跳轉到指定位置</a>

            • 2.2.在頁面的指定位置給任意標簽添加一個id屬性

            • 例如 <p id="location">這個是目標</p>

            • 格式<a href="#">江哥博客</a>

            • 格式<a href="javascript:">江哥博客</a>

            • 假鏈接(本質是跳轉到當前頁面)

            • 跳轉到當前頁面指定位置(錨點鏈接)

            • 跳轉到指定頁面的指定位置

            • 下載(極力不推薦使用)


          主站蜘蛛池模板: 国产精品亚洲一区二区三区| 色噜噜狠狠一区二区三区果冻 | 中日韩一区二区三区| 国产观看精品一区二区三区| 无码精品黑人一区二区三区| 精品欧美一区二区在线观看 | 国产福利一区视频| 熟女少妇丰满一区二区| 精品国产亚洲第一区二区三区| 国产激情一区二区三区| AV天堂午夜精品一区二区三区| 中文字幕一区在线| 免费观看日本污污ww网站一区 | 日韩精品在线一区二区| 国产一区二区三区四| 国产成人综合一区精品| 国产AV午夜精品一区二区入口 | 亚洲制服中文字幕第一区| 国产精品免费大片一区二区| 国产在线视频一区二区三区| 最新欧美精品一区二区三区| 亚洲AV无码一区二区二三区入口| 一级特黄性色生活片一区二区 | 亚洲福利精品一区二区三区| 日本一区二区三区不卡视频| 久久精品无码一区二区WWW| 高清一区二区三区免费视频| 精品国产一区二区三区2021| 一区 二区 三区 中文字幕| 亚洲国产成人久久一区WWW| 一本色道久久综合一区 | 国产一区二区免费视频| 亚洲色精品vr一区二区三区| 国模大尺度视频一区二区| 久久影院亚洲一区| 日本不卡在线一区二区三区视频| 国产成人无码一区二区在线观看| 手机看片一区二区| 久久精品免费一区二区| 麻豆果冻传媒2021精品传媒一区下载 | 国产福利一区二区在线视频|