Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 啪啪网站免费观看,国产不卡在线视频,欧美一级淫片免费视频日本动漫

          整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          html基礎(chǔ)知識解析(二) -實(shí)用干貨

          級鏈接標(biāo)簽

          1. 語法<a></a>
          2. 必須屬性href=”url”, 它指定鏈接的目標(biāo)。
          3. 常用屬性 target=”_blank” 在新窗口中打開鏈接
          4. 錨屬性:一般在兩個頁面之間 或者在一個較長的頁面之間 進(jìn)行通訊所用

          目的頁面的地區(qū)用 name屬性定義(name的值可自己定義,一般為英文),鏈接頁面的鏈接應(yīng)寫為<a href=”url#name”></a>

          1. 在鏈接中,#可用來指代鏈接出發(fā)點(diǎn)的頁面本身
          2. 鏈接有四種狀態(tài),在所有瀏覽器中,鏈接的默認(rèn)外觀是:

          未被訪問的鏈接帶有下劃線而且是藍(lán)色的

          已被訪問的鏈接帶有下劃線而且是紫色的

          活動鏈接帶有下劃線而且是紅色的

          關(guān)于錨的進(jìn)一步說明:

          <a> 標(biāo)簽可定義錨,錨 (anchor) 有兩種用法:

          通過使用 href 屬性,創(chuàng)建指向另外一個文檔的鏈接(或超鏈接)

          通過使用 name 或 id 屬性,創(chuàng)建一個文檔內(nèi)部的書簽(也就是說,可以創(chuàng)建指向文檔片段的鏈接)


          圖片標(biāo)簽 <img>

          1、img標(biāo)簽是一個單標(biāo)簽,必須和src(source:指出圖像的路徑)屬性連用,

          網(wǎng)頁上圖像的路徑有絕對路徑和相對路徑兩種,但在實(shí)際運(yùn)用中往往只用相對路徑

          絕對路徑:圖片在硬盤上的路徑 (分割符號是/)

          相對路徑:圖片相對于網(wǎng)頁而言的路徑

          如果圖片與網(wǎng)頁在同一個文件夾下,那么可以直接用圖片的名稱表示其路徑

          如果圖片在網(wǎng)頁的下一層文件夾中,比如圖片在網(wǎng)頁文件下面的images文件夾中,則可用images/表示

          我們也可以用./表示網(wǎng)頁所在的文件夾

          如果圖片在網(wǎng)頁的上一層文件夾中,則用../表示

          事實(shí)上,不但圖片文件是如此,網(wǎng)頁中應(yīng)用的文件都分為相對路徑和絕對路徑兩種表達(dá)方式。

          2、在網(wǎng)頁上,支持的圖片格式包括.gif .jpg .png .bmp,一般用前三者居多,因?yàn)榍叭叩膱D片壓縮比較好。但是,gif格式只有256種顏色,所以,在需要豐富顏色的場合,往往多用jpg和png格式。不過,gif擁有動態(tài)功能,而后兩者則不具備。

          3、img標(biāo)簽可以與其它標(biāo)簽共處一行,如果有多個圖形出現(xiàn)時,默認(rèn)為同一行顯示

          4、img標(biāo)簽有4個常用標(biāo)簽,分別是

          alt 圖片說明,在圖像無法顯示時表現(xiàn)為圖像的替代文本

          width 寬 屬性值可以是象素,也可以是%

          height 高 屬性值可以是象素,也可以是%

          border 邊框

          5、圖片鏈接仍然是用a標(biāo)簽來顯示

          例子:<a href=“http://www.rwxy.xnc.edu.cn”><img src="sample.jpg" ></a>

          6、可以用圖像映射實(shí)現(xiàn)圖像不同區(qū)域的鏈接

          圖象映射

          所謂圖象映射是指一個圖片上的不同位置被指定了不同的超級鏈接;點(diǎn)擊圖片的不同位置會打開不同的超級鏈接目標(biāo)。這與前面的默認(rèn)超級鏈把整個圖片作為超級鏈接的元素是很不一樣的。

          圖象映射由<map>定義。<map>有一個基本屬性是name。name給圖象映射命名,這個命名將會被<img>元素用usemap屬性引用。所以,圖象上的圖象映射實(shí)際上是對<map>定義的映射的一個引用。

          <map>在定義圖象映射時,可以定義三種形狀的映射: circle(圓形)、rect(矩形rectangle)、poly(多邊形)

          圖象映射實(shí)例

          <img src="bear.jpg" usemap="#map" >

          <map name=“map">

          <area shape="rect" coords="46,29,253,164" href="#" >

          <area shape="circle" coords="76,510,59" href="#" >

          <area shape="poly" coords="219,482,253,448,310,462,297,527,220,523" href="#" >

          </map>


          表格標(biāo)簽

          表格由三個標(biāo)簽構(gòu)成,分別是

          <table>...</table> - 定義表格

          <tr> - 定義表行

          <th> - 定義表頭

          <td> - 定義表格單元(表格的具體數(shù)據(jù))

          在表格標(biāo)簽中,table、tr、td標(biāo)簽都具備不同的屬性

          table:border(邊框尺寸設(shè)置);width(表格的寬);height(表格的高);align(橫向?qū)R:left center right);bgcolor(背景色彩);background(背景圖像);cellspacing(表格單元的間隙設(shè)置);cellpadding(表元內(nèi)部空白設(shè)置);

          tr:height(行高);align(橫向?qū)R:left center right);valign(縱向?qū)R:top middle bottom);bgcolor(背景色彩);

          td:width(表格的寬);height(表格的高);align(橫向?qū)R:left center right);valign(縱向?qū)R:top middle bottom);bgcolor(背景色彩);background(背景圖像);

          注:當(dāng)talble、tr、td有共同的屬性而且屬性值發(fā)生沖突之際,其優(yōu)先性是td > tr > table

          表格在html中最大的作用不是用來整理數(shù)據(jù),而是用來排版,所以它是html中用處最廣的標(biāo)簽之一。

          表格內(nèi)部可以繼續(xù)放入表格,這被稱之為表格嵌套,利用表格嵌套可以制作出非常復(fù)雜的排版。

          表格的單元格可以跨行跨列顯示

          跨多列的單元格 <td colspan=#>

          <table border=1>

          <tr><td colspan=3> morning menu</td>

          <tr><td>food</td> <td>drink</td> <td>sweet</td>

          <tr><td>a</td><td>b</td><td>c</td>

          </table>

          morning menu

          food

          drink

          sweet

          a

          b

          c

          跨多行的單元格 <td rowspan=#>

          <table border=1>

          <tr><td rowspan=3> morning menu</td>

          <td>food</td> <td>a</td></tr>

          <tr><td>drink</td> <td>b</td></tr>

          <tr><td>sweet</td> <td>c</td></tr>

          </table>

          morning menu

          food

          a

          drink

          b

          sweet

          c

          ....................................................................

          我的微信公眾號:UI嚴(yán)選 —越努力,越幸運(yùn)

          本內(nèi)鏈接

          最后這些關(guān)于html的內(nèi)容有點(diǎn)查漏補(bǔ)缺的意思了,這一次是關(guān)于文本內(nèi)鏈接的使用方法,簡單來說就是我們的頁面中有一個章節(jié)名稱目錄,如何點(diǎn)擊目錄中的名稱,就能正好在頁面中顯示相應(yīng)內(nèi)容。

          如圖所示:

          點(diǎn)擊目錄的"總體評價"跳轉(zhuǎn)到相應(yīng)內(nèi)容,如圖:

          就是這樣的一個效果。在很多網(wǎng)頁中經(jīng)常看到。

          這個案例我們會分三部分來講解。

          今天主要學(xué)習(xí)如何使用<a>標(biāo)簽進(jìn)行頁面內(nèi)鏈接,已及從其他網(wǎng)頁鏈接該頁面內(nèi)的指定內(nèi)容。

          這里會有一個問題,就是點(diǎn)擊鏈接后,文字內(nèi)容會置頂顯示,這個默認(rèn)形式會給我們帶來不便,解決方案較復(fù)雜,會在最后一次講解中給出。

          下一次我們來學(xué)習(xí)如何對圖片添加映射超鏈接,映射超鏈接的意思是,假如我的圖片中有兩個人物或物象,考慮讀者會感興趣,想了解更多內(nèi)容,如何框選出物象邊緣來添加鏈接,這就是圖像映射超鏈接。如圖:使用一個平時不可見的邊框來制作圖片映射鏈接,確保感興趣的讀者能點(diǎn)擊到畫面中的目標(biāo)物體。

          最后一部分我們將回答今天結(jié)尾的問題,也就是如何解決置頂問題。這一部分也會作為HTML部分結(jié)束的綜合練習(xí),和css部分啟蒙的預(yù)熱練習(xí)。,

          首先看一下今天的基礎(chǔ)代碼

          <!DOCTYPE HTML>
            <html>
            <head> 
            <title>文內(nèi)鏈接</title>
            </head> 
            <body >
            <a>試飛進(jìn)程</a>
            <a>研制情況</a>
            <a>服役動態(tài)</a>
            <a>總體評價</a>
            <p>
            <h2><a>試飛進(jìn)程</a></h2>
            殲-20隱形戰(zhàn)斗機(jī)首架技術(shù)驗(yàn)證機(jī)于2011年1月11日中午12時50分左右進(jìn)行首次升空飛行測試,13時08分成功著陸,歷時18分鐘。<br>整個首飛過程在殲-10S戰(zhàn)斗教練機(jī)陪伴下完成 。2016年10月28日,首次發(fā)布"空軍試飛員將駕殲-20飛機(jī)亮相中國航展"后,還陸續(xù)發(fā)布了"殲-20戰(zhàn)機(jī)列裝空軍作戰(zhàn)部隊(duì)""空軍殲-20戰(zhàn)機(jī)首次開展海上方向?qū)崙?zhàn)化訓(xùn)練"等。
            <h2><a>研制情況</a></h2>
            在2016年11月1日,第十一屆珠海航展,殲-20首次進(jìn)行空中飛行展示。兩架殲-20做了公開飛行,不僅在現(xiàn)場引起轟動,也立刻被西方媒體大量報(bào)道。殲-20是中國現(xiàn)代空中力量的代表作,也進(jìn)入了世界最先進(jìn)的第五代戰(zhàn)斗機(jī)行列,它是中國國防能力高速發(fā)展的一個象征。<br>2018年11月11日,第十二屆中國航展在珠海迎來"高光時刻":殲-20戰(zhàn)機(jī)在公開飛行展示中掛彈開倉,震撼獻(xiàn)禮人民空軍成立69周年紀(jì)念日。 <br>2019年10月13日,慶祝人民空軍成立70周年航空開放活動新聞發(fā)布上,空軍新聞發(fā)言人申進(jìn)科大校介紹殲-20戰(zhàn)機(jī)列陣人民空軍"王牌部隊(duì)"
            <h2><a>服役動態(tài)</a></h2>
            2017年3月9日,中央電視臺報(bào)道殲-20戰(zhàn)斗機(jī)正式進(jìn)入空軍序列。<br>2017年3月13日,《中國日報(bào)》發(fā)布消息稱,中國自主研制的殲-20近期將裝配國產(chǎn)發(fā)動機(jī)。<br>2017年7月30日,殲-20三機(jī)編隊(duì)參加在朱日和舉行的慶祝中國人民解放軍成立90周年閱兵。殲擊機(jī)梯隊(duì)飛來,3架殲-20隱形戰(zhàn)斗機(jī)以楔形編隊(duì)的形式在天空中飛過。<br>2017年9月28日,在中國國防部行記者會上,國防部新聞發(fā)言人吳謙大校介紹殲-20飛機(jī)已經(jīng)列裝部隊(duì)。<br>2017年11月10日上午,中國空軍發(fā)言人申進(jìn)科大校表示,殲-20 列裝部隊(duì)后,已經(jīng)開展編隊(duì)訓(xùn)練。<br>2018年2月9日,中國空軍新聞發(fā)言人申進(jìn)科大校發(fā)布消息,殲-20開始列裝空軍作戰(zhàn)部隊(duì)。<br>2018年10月30日,中國空軍4架殲-20隱形戰(zhàn)斗機(jī)現(xiàn)身珠海金灣機(jī)場上空。<br>2019年10月1日,殲-20現(xiàn)身慶祝中華人民共和國成立70周年閱兵式;閱兵中,殲-20與殲-16、殲-10C三型飛機(jī)分別以5機(jī)楔隊(duì)組成戰(zhàn)斗隊(duì)形接受檢閱;該三款殲擊機(jī)被譽(yù)為中國空軍殲擊機(jī)家族的"三劍客",是未來聯(lián)合作戰(zhàn)的骨干力量
            <h2><a>總體評價</a></h2>
            殲-20是眼下亞洲區(qū)域最先進(jìn)的戰(zhàn)機(jī),這讓中國空軍在面對日本、韓國與印度等國家的空軍時占有顯著優(yōu)勢。外媒將殲-20與其他國家戰(zhàn)機(jī)進(jìn)行了對比。俄羅斯蘇霍伊蘇-57戰(zhàn)斗機(jī)由于研制進(jìn)度幾度推遲,尚未正式交付入役;美國F-35戰(zhàn)斗機(jī)也多次出現(xiàn)飛機(jī)供氧不足的問題,大面積停飛,出口受阻;韓國KF-X隱形戰(zhàn)機(jī)先是被爆出因掌握不了關(guān)鍵技術(shù)而被迫降成四代半戰(zhàn)機(jī)的情況,后又傳出了合作方印尼打算撤資并已告知韓國的消息。因此,中國殲-20戰(zhàn)機(jī)成為亞太區(qū)域領(lǐng)跑的優(yōu)勢戰(zhàn)機(jī)。<br>中國空軍正向全疆域作戰(zhàn)的現(xiàn)代化戰(zhàn)略性軍種邁進(jìn),成為有效塑造態(tài)勢、管控危機(jī)、遏制戰(zhàn)爭、打贏戰(zhàn)爭的重要力量。殲-20戰(zhàn)機(jī)列裝空軍作戰(zhàn)部隊(duì),將進(jìn)一步提升空軍綜合作戰(zhàn)能力,有助于空軍更好的肩負(fù)起維護(hù)國家主權(quán)、安全和領(lǐng)土完整的神圣使命。<br>殲20是我國自主研制的第五代戰(zhàn)斗機(jī),它的研制實(shí)現(xiàn)了既定的四大目標(biāo)——打造跨代新機(jī)、引領(lǐng)技術(shù)發(fā)展、創(chuàng)新研發(fā)體系、建設(shè)卓越團(tuán)隊(duì)。打造跨代新機(jī),是按照性能、技術(shù)和進(jìn)度要求,研制開發(fā)我國自己的新一代隱身戰(zhàn)斗機(jī)。引領(lǐng)技術(shù)發(fā)展,指通過自主創(chuàng)新實(shí)現(xiàn)強(qiáng)軍興軍的目標(biāo)。殲20在態(tài)勢感知、信息對抗、協(xié)同作戰(zhàn)等多方面取得了突破,這是中國航空工業(yè)從跟跑到并跑,再到領(lǐng)跑的必由之路。創(chuàng)新研發(fā)體系,是指建設(shè)最先進(jìn)的飛機(jī)研制條件和研制流程。通過一大批大國重器的研制,我們建立了具有我國特色的數(shù)字化研發(fā)體系。建設(shè)卓越團(tuán)隊(duì),是指通過型號研制,錘煉一支愛黨愛國的研制隊(duì)伍,這些擁有報(bào)國情懷、創(chuàng)新精神的優(yōu)秀青年是航空事業(yè)未來發(fā)展的生力軍。未來,我們將在戰(zhàn)斗機(jī)的機(jī)械化、信息化、智能化發(fā)展征程上不斷前行。
            </p>
            </body> 
            </html>

          看著復(fù)雜,實(shí)際上主要都是些內(nèi)容文字,簡化后的代碼如下:

          <!DOCTYPE HTML>
            <html>
            <head> 
            <title>文內(nèi)鏈接</title>
            </head> 
            <body >
            <a>試飛進(jìn)程</a>
            <a>研制情況</a>
            <a>服役動態(tài)</a>
            <a>總體評價</a>
            <p>
            <h2><a>試飛進(jìn)程</a></h2>
              殲-20隱形........首次開展海上方向?qū)崙?zhàn)化訓(xùn)練"等。
            <h2><a>研制情況</a></h2>
              在2016年......"王牌部隊(duì)"
            <h2><a>服役動態(tài)</a></h2>
              2骨干力量
            <h2><a>總體評價</a></h2>
              殲-20是眼下亞洲區(qū)域最先進(jìn)的戰(zhàn)機(jī)......不斷前行。
            </p>
            </body> 
            </html>

          就是在<body></body>中添加四個<a></a>標(biāo)簽來寫入標(biāo)題,并列寫入一個<p></p>標(biāo)簽,并在<p></p>標(biāo)簽中添加文字內(nèi)容和<h2></h2>標(biāo)簽。這時需要注意的是,<h2></h2>中還要用<a></a>標(biāo)簽夾住標(biāo)題。

          頁面效果如下:

          下面我們來添加文章內(nèi)部鏈接

          添加文章內(nèi)部鏈接需要一前一后兩個<a></a>標(biāo)簽。一個是目錄中的<a></a>,如圖:

          一個是正文中的標(biāo)題上的<a></a>,如圖:

          添加內(nèi)部鏈接的辦法非常簡單,首先我們把目錄中的標(biāo)題<a></a>標(biāo)簽稱為"召喚者"。把正文中的標(biāo)題中的<a></a>標(biāo)簽稱為"被召喚者"。如果您學(xué)過《》這篇教程就會知道,一個標(biāo)簽召喚或調(diào)用另一個標(biāo)簽需要能叫出被調(diào)用標(biāo)簽的名字!

          所以先要給"被召喚者"起名字,起名字的方法有兩種,一種是name="",還有一種是id="",建議大家都寫上,因?yàn)橛械臑g覽器不支持name屬性。具體寫法如下:

          <h2><a name="chapter1" id="chapter1">試飛進(jìn)程</a></h2>

          在"召喚者"<a>標(biāo)簽中使用href屬性來叫出"被召喚者"的名字!示例代碼如下:需要在引號中添加#后再寫名字。

          <!DOCTYPE HTML>
            <html>
            <head> 
            <title>文內(nèi)鏈接</title>
            </head> 
            <body >
            <a href="#chapter1">試飛進(jìn)程</a><!--看這里-->
            <a>研制情況</a>
            <a>服役動態(tài)</a>
            <a>總體評價</a>
            </body> 
            </html>

          <a>標(biāo)簽有點(diǎn)懶,只叫名字的話它會假裝聽不見,所以還要具體描述它的特征,讓它不好意思偷懶,也就是前后兩個<a></a>標(biāo)簽中間夾的文字內(nèi)容要一致,比如上文中的兩個<a>中間的內(nèi)容都是"試飛進(jìn)程"。如果字不一樣,休想叫得動"被召喚者"。

          效果如下:

          點(diǎn)擊后,試飛進(jìn)程標(biāo)簽跳到了視窗的最頂端,如圖:這種頂在視窗頂端的顯示的方式我們稱之為"置頂"。

          下面我們使用這個方法,為剩下的標(biāo)題添加頁面內(nèi)鏈接。

          打開外部頁面中指定信息位置的方法

          首先,我們復(fù)制一下這個頁面文件命名為"打開外部頁面文件指定位置.html",然后刪掉<p></p>和其中內(nèi)容。示例代碼如下:

          <!DOCTYPE HTML>
            <html>
            <head> 
            <title>打開外部頁面文件指定位置</title>
            </head> 
            <body >
            <a href="#chapter1">試飛進(jìn)程</a>
            <a href="#chapter2">研制情況</a>
            <a href="#chapter3">服役動態(tài)</a>
            <a href="#chapter4">總體評價</a>
            </body> 
            </html>

          方法非常簡單,在href中添加外部頁面路徑即可!示例代碼如下:

          <a href="文內(nèi)鏈接ceshi.html#chapter1">試飛進(jìn)程</a>

          依次添加后,頁面效果如下:

          點(diǎn)擊其中一個標(biāo)題"研制情況",頁面跳轉(zhuǎn),如圖:

          這里,置頂?shù)膯栴}就出現(xiàn)了,如果我們的文章目錄一直在視圖的頂部,每次點(diǎn)擊頁面內(nèi)鏈接時,頂部的目錄就會和標(biāo)題重疊,非常不美觀,解決這個問題就要涉及到<div>布局的應(yīng)用,我們以后再說。

          OK!今天我們的內(nèi)容結(jié)束了,下一次學(xué)習(xí)圖片映射鏈接功能。

          喜歡的朋友請關(guān)注我,點(diǎn)贊也會讓我動力滿滿。

          HTML完整學(xué)習(xí)目錄

          HTML序章(學(xué)習(xí)目的、對象、基本概念)——零基礎(chǔ)自學(xué)網(wǎng)頁制作

          HTML是什么?——零基礎(chǔ)自學(xué)網(wǎng)頁制作

          第一個HTML頁面如何寫?——零基礎(chǔ)自學(xué)網(wǎng)頁制作

          HTML頁面中head標(biāo)簽有啥用?——零基礎(chǔ)自學(xué)網(wǎng)頁制作

          初識meta標(biāo)簽與SEO——零基礎(chǔ)自學(xué)網(wǎng)頁制作

          HTML中的元素使用方法1——零基礎(chǔ)自學(xué)網(wǎng)頁制作

          HTML中的元素使用方法2——零基礎(chǔ)自學(xué)網(wǎng)頁制作

          HTML元素中的屬性1——零基礎(chǔ)自學(xué)網(wǎng)頁制作

          HTML元素中的屬性2(路徑詳解)——零基礎(chǔ)自學(xué)網(wǎng)頁制作

          使用HTML添加表格1(基本元素)——零基礎(chǔ)自學(xué)網(wǎng)頁制作

          使用HTML添加表格2(表格頭部與腳部)——零基礎(chǔ)自學(xué)網(wǎng)頁制作

          使用HTML添加表格3(間距與顏色)——零基礎(chǔ)自學(xué)網(wǎng)頁制作

          使用HTML添加表格4(行顏色與表格嵌套)——零基礎(chǔ)自學(xué)網(wǎng)頁制作

          16進(jìn)制顏色表示與RGB色彩模型——零基礎(chǔ)自學(xué)網(wǎng)頁制作

          HTML中的塊級元素與內(nèi)聯(lián)元素——零基礎(chǔ)自學(xué)網(wǎng)頁制作

          初識HTML中的<div>塊元素——零基礎(chǔ)自學(xué)網(wǎng)頁制作

          在HTML頁面中嵌入其他頁面的方法——零基礎(chǔ)自學(xué)網(wǎng)頁制作

          封閉在家學(xué)網(wǎng)頁制作!為頁面嵌入PDF文件——零基礎(chǔ)自學(xué)網(wǎng)頁制作

          HTML表單元素初識1——零基礎(chǔ)自學(xué)網(wǎng)頁制作

          HTML表單元素初識2——零基礎(chǔ)自學(xué)網(wǎng)頁制作

          HTML表單3(下拉列表、多行文字輸入)——零基礎(chǔ)自學(xué)網(wǎng)頁制作

          HTML表單4(form的action、method屬性)——零基礎(chǔ)自學(xué)網(wǎng)頁制作

          HTML列表制作講解——零基礎(chǔ)自學(xué)網(wǎng)頁制作

          為HTML頁面添加視頻、音頻的方法——零基礎(chǔ)自學(xué)網(wǎng)頁制作

          音視頻格式轉(zhuǎn)換神器與html視頻元素加字幕——零基礎(chǔ)自學(xué)網(wǎng)頁制作

          HTML中使用<a>標(biāo)簽實(shí)現(xiàn)文本內(nèi)鏈接——零基礎(chǔ)自學(xué)網(wǎng)頁制作

          家好,我是Echa。

          好消息, 2023年4月1號 愚人節(jié)這天 JavaScript import maps (導(dǎo)入映射)現(xiàn)在支持跨瀏覽器了,下面小編詳細(xì)介紹:

          全文大綱

          1. 如何不基于構(gòu)建工具優(yōu)雅的實(shí)現(xiàn)模塊導(dǎo)入?
          2. JavaScript import maps 現(xiàn)在支持跨瀏覽器

          如何不基于構(gòu)建工具優(yōu)雅的實(shí)現(xiàn)模塊導(dǎo)入?

          當(dāng) ES Module 最開始作為一種新的 JavaScript 模塊化方案在 ES6 中被引入的候,其實(shí)是通過在 import 語句中強(qiáng)制指定相對路徑或絕對路徑來實(shí)現(xiàn)的。

          import dayjs from "https://cdn.skypack.dev/dayjs@1.10.7"; // ES modules
          console.log(dayjs("2023-04-1").format("YYYY-MM-DD"));

          這和其他常見的模塊化系統(tǒng)(例如 CommonJS)的工作方式略有不同,并且在使用像 webpack 這樣的模塊打包工具的時候會使用更簡單的語法:

          const dayjs = require('dayjs') // CommonJS
          
          import dayjs from 'dayjs'; // webpack

          在這些系統(tǒng)里,模塊導(dǎo)入語句通過 Node.js 運(yùn)行時或相關(guān)構(gòu)建工具映射到特定(版本)的文件。用戶只需要在 import 語句中直接編寫模塊說明符(通常是包名),模塊就可以自動處理。

          由于開發(fā)人員已經(jīng)熟悉了這種從 npm 導(dǎo)入包的方式,因此必須要先經(jīng)過一個的構(gòu)建步驟才能確保以這種方式編寫的代碼可以在瀏覽器中運(yùn)行。

          Import maps 就可以解決這個問題,它可以將模塊說明符(包名)自動映射到它的相對或絕對路徑。從而讓我們不使用構(gòu)建工具也能使用簡潔的模塊導(dǎo)入語法。

          如何使用 Import maps

          我們可以通過 HTML 中的 <script type="importmap"> 標(biāo)簽來指定一個 Import maps

          <script type="importmap">
          {
            "imports": {
              "dayjs": "https://cdn.skypack.dev/dayjs@1.10.7",
            }
          }
          </script>

          為了成功的在模塊解析之前對其進(jìn)行解析。這個 script 標(biāo)簽必須放在文檔中第一個 <script type="module"> 標(biāo)簽之前(最好放在 <head>中),另外,目前每個 HTML 只允許編寫一個 Import maps

          <script type="module">
            import dayjs from 'dayjs';
          
            console.log(dayjs("2023-04-01").format("YYYY-MM-DD"));
          </script>

          script 標(biāo)簽內(nèi),我們可以通過一個 JSON 對象來為文檔中的腳本所需導(dǎo)入的模塊指定所有必要的映射。一個典型的 importmap 結(jié)構(gòu)如下所示:

          <script type="importmap">
          {
            "imports": {
              "react": "https://cdn.jsdelivr.net/npm/react/umd/react.production.min.js",
              "react-dom": "https://cdn.jsdelivr.net/npm/react-dom/umd/react-dom.production.min.js"
             "square": "./modules/square.js",
              "lodash": "/node_modules/lodash-es/lodash.js"
            }
          }
          </script>

          在上面的 import 對象中,每個屬性對應(yīng)一個映射。映射的左側(cè)是導(dǎo)入說明符的名稱(一般是包名),而右側(cè)是說明符需要映射到的相對或絕對路徑。在映射中指定相對路徑時,必須要確保它們始終以 /、../或 ./ 開頭。

          另外,importmap 中聲明的包并不一定意味著它一定會被瀏覽器加載。頁面上的腳本沒有使用到的任何模塊都不會被瀏覽器加載,即便你在 importmap 中聲明了它。

          編寫好 importmap 之后,你就可以在后面的腳本中直接使用 ES Module 語法了。

          <script type="module">
            import { cloneDeep } from 'lodash';
          
            const objects = [{ a: 1 }, { b: 2 }];
          
            const deep = cloneDeep(objects);
            console.log(deep[0] === objects[0]);
          </script>

          外部映射

          你還可以在外部文件中指定你的映射,然后使用 scriptsrc 屬性鏈接到這個文件(Content-Type Header 必須要設(shè)置為 application/importmap+json 才能正常加載)。

          <script type="importmap" src="importmap.json"></script>
          

          不過盡量不要使用這種方式,因?yàn)樗男阅鼙戎苯觾?nèi)聯(lián)編寫要差。

          映射整個包

          除了將一個說明符映射到模塊之外,你還可以將一個說明符映射到包含多個模塊的包:

          <script type="importmap">
          {
            "imports": {
              "lodash/": "/node_modules/lodash-es/"
            }
          }
          </script>
          

          這種編寫方式可以讓你直接導(dǎo)入指定路徑中的任何模塊,相應(yīng)的,瀏覽器也會把所有組件模塊下載下來。

          <script type="module">
            import toUpper from 'lodash/toUpper.js';
            import toLower from 'lodash/toLower.js';
          
            console.log(toUpper('ConardLi'));
            console.log(toLower('ConardLi'));
          </script>
          

          動態(tài)映射

          你也可以基于一些條件在 script 中添加一個動態(tài)映射,比如,在下面的示例中我們通過判斷是否存在 IntersectionObserver API 來導(dǎo)入不同文件:

          <script>
            const importMap = {
              imports: {
                lazyload: 'IntersectionObserver' in window
                  ? './lazyload.js'
                  : './lazyload-fallback.js',
              },
            };
          
            const im = document.createElement('script');
            im.type = 'importmap';
            im.textContent = JSON.stringify(importMap);
            document.currentScript.after(im);
          </script>
          

          使用同一模塊的不同版本

          使用 importmap 我們可以將不同的版本的模塊映射到不同的包名中:

              <script type="importmap">
                {
                  "imports": {
                    "lodash@3/": "https://unpkg.com/lodash-es@3.10.1/",
                    "lodash@4/": "https://unpkg.com/lodash-es@4.17.21/"
                  }
                }
              </script>
          

          另外你還可以通過 scopes 來實(shí)現(xiàn)同一個包不同模塊的更細(xì)粒度的版本控制:

          <script type="importmap">
            {
              "imports": {
                "lodash/": "https://unpkg.com/lodash-es@4.17.21/"
              },
              "scopes": {
                "/static/js": {
                  "lodash/": "https://unpkg.com/lodash-es@3.10.1/"
                }
              }
            }
          </script>
          

          /static/js 下的模塊會使用 3.10.1 版本,而其他模塊會使用 4.17.21 版本。

          兼容性



          這項(xiàng)技術(shù)目前在 ChromeEdge 瀏覽器 89 及更高版本提供了全面支持,但 Firefox、Safari 和一些移動瀏覽器還沒有支持。我們可以通過下面的代碼來判斷瀏覽器的支持情況:

          if (HTMLScriptElement.supports && HTMLScriptElement.supports('importmap')) {
            // import maps is supported
          }
          

          對于沒有提供支持的瀏覽器,我們可以使用下面

          這個 polyfill:https://github.com/guybedford/es-module-shims

          另外官方也推薦了一些其他 importmap 相關(guān)的 polyfill 和工具:


          JavaScript import maps 現(xiàn)在支持跨瀏覽器

          隨著 Safari 16.4 的發(fā)布,WebKit 引擎也支持了 Import Mpas



          ES模塊是在web應(yīng)用程序中包含和重用JavaScript代碼的一種現(xiàn)代方式。它們受到現(xiàn)代瀏覽器的支持,并提供了一些優(yōu)于舊的非模塊化JavaScript開發(fā)方法的優(yōu)勢。

          使用ES模塊的一種現(xiàn)代方式是使用<script type=“importmap”>標(biāo)記。此標(biāo)記允許您定義外部模塊名稱到其相應(yīng)URL的映射,這使得在代碼中包含和使用外部模塊變得更容易。

          要使用<script type=“importmap”>方法,首先需要將其添加到HTML文檔的<head>部分。在標(biāo)記中,您可以定義一個JSON對象,該對象將模塊名稱映射到相應(yīng)的URL。例如:

          <script type="importmap">
            {
              "imports": {
                "browser-fs-access": "https://unpkg.com/browser-fs-access@0.33.0/dist/index.modern.js"
              }
            }
          </script>

          此代碼定義了一個名為“browser fs access”的外部模塊,并將其映射到unpkg CDN上托管的瀏覽器fs訪問庫的URL。有了這個映射,現(xiàn)在可以使用import關(guān)鍵字在代碼中包含瀏覽器fs訪問庫。請注意,import關(guān)鍵字僅在具有type=“module”屬性的腳本標(biāo)記中可用。

          <button>Select a text file</button>
          <script type="module">
            import {fileOpen} from 'browser-fs-access';
          
            const button = document.querySelector('button');
            button.addEventListener('click', async () => {
              const file = await fileOpen({
                mimeTypes: ['text/plain'],
              });
              console.log(await file.text());
            });
          </script>

          與較舊的非模塊化JavaScript開發(fā)方法相比,使用<script type=“importmap”>標(biāo)記和import關(guān)鍵字提供了一些好處。它允許您清晰明確地指定代碼所依賴的外部模塊,這使得代碼更容易理解和維護(hù)。總的來說,使用帶有<script type=“importmap”>標(biāo)簽的ES模塊是在web應(yīng)用程序中包含和重用JavaScript代碼的一種現(xiàn)代而強(qiáng)大的方式。您可以按如下方式提供功能檢測支持:

          if (HTMLScriptElement.supports('importmap')) {
            // The importmap feature is supported.
          }


          最后

          一臺電腦,一個鍵盤,盡情揮灑智慧的人生;幾行數(shù)字,幾個字母,認(rèn)真編寫生活的美好;

          一 個靈感,一段程序,推動科技進(jìn)步,促進(jìn)社會發(fā)展。

          創(chuàng)作不易,喜歡的老鐵們加個關(guān)注,點(diǎn)個贊,打個賞,后面會不定期更新干貨和技術(shù)相關(guān)的資訊,速速收藏,謝謝!你們的一個小小舉動就是對小編的認(rèn)可,更是創(chuàng)作的動力。


          主站蜘蛛池模板: 国产乱人伦精品一区二区在线观看| 日韩一区二区三区视频久久| 一区二区在线视频观看| 久久久精品一区二区三区| 精品国产一区二区三区麻豆| 中文字幕精品无码一区二区三区| 日韩精品一区二区三区老鸦窝| 五月婷婷一区二区| 精品乱人伦一区二区三区| 精品乱子伦一区二区三区高清免费播放 | 中文字幕精品一区二区| 寂寞一区在线观看| 中日韩一区二区三区| 一区二区三区91| 无码精品人妻一区二区三区影院| 国产一区二区不卡老阿姨| 亚洲精品无码一区二区| 极品人妻少妇一区二区三区| 精品一区二区三区自拍图片区| 中文字幕aⅴ人妻一区二区 | 亚洲一区二区精品视频| 无码av不卡一区二区三区| 狠狠爱无码一区二区三区| 女同一区二区在线观看| 国产成人精品无人区一区| 亚洲国产一区明星换脸| 国产精品成人一区二区| 日韩精品无码视频一区二区蜜桃| 免费无码一区二区三区蜜桃| 中文字幕不卡一区| 国产裸体歌舞一区二区| 日韩爆乳一区二区无码| 亚洲熟妇无码一区二区三区| 成人一区专区在线观看| 天天爽夜夜爽人人爽一区二区| 亚洲一区二区三区在线视频 | 福利一区二区三区视频在线观看| 精品视频一区二区三区| 中文字幕精品无码一区二区三区| 亚洲AV综合色一区二区三区 | 天堂成人一区二区三区|