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
級鏈接標(biāo)簽
目的頁面的地區(qū)用 name屬性定義(name的值可自己定義,一般為英文),鏈接頁面的鏈接應(yīng)寫為<a href=”url#name”></a>
未被訪問的鏈接帶有下劃線而且是藍(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)
最后這些關(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í)目的、對象、基本概念)——零基礎(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ì)介紹:
當(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>
外部映射
你還可以在外部文件中指定你的映射,然后使用 script 的 src 屬性鏈接到這個文件(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ù)目前在 Chrome 和 Edge 瀏覽器 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 和工具:
隨著 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)作的動力。
*請認(rèn)真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。