<img>ï¼å¾ååµå ¥å ç´
åºçº¿
广æ³å¯ç¨
*
èª 2015å¹´7æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
* æ¤ç¹æ§çæäºé¨åçæ¯æç¨åº¦å¯è½ææä¸åã
<img> HTML å
ç´ å°ä¸å¼ å¾ååµå
¥ææ¡£ã
å°è¯ä¸ä¸
<img
class="fit-picture"
src="/shared-assets/images/examples/grapefruit-slice.jpg"
alt="è¡èæåçç½®äºå
¶ä»åçå ä¸" />
.fit-picture {
width: 250px;
}
ä¸é¢çä¾åå±ç¤ºäº <img> å
ç´ çç¨æ³ï¼
src屿§ç¨äºæå®è¦åµå ¥çå¾åè·¯å¾ãè¥åå¨ srcset 屿§ï¼åè¯¥å±æ§éå¿ éãä½å¿ é¡»è³å°æä¾srcæsrcsetå ¶ä¸ä¸ä¸ªå±æ§ãalt屿§ç¨äºåå¨å¾ççæ¿ä»£ææ¬ï¼è¯¥å±æ§æ¯å¼ºå¶è¦æ±çï¼ä¸å¯¹æ éç¢è®¿é®å ·ææå ¶éè¦çä½ç¨ââå±å¹é 读å¨ä¼åç¨æ·æè¯»è¯¥å±æ§å¼ï¼ä½¿å ¶çè§£å¾çæä¼ è¾¾çä¿¡æ¯ãå½å¾çå ç½ç»é误ãå 容å±è½æé¾æ¥å¤±æçåå æ æ³å è½½æ¶ï¼æ¿ä»£ææ¬ä¹ä¼å¨é¡µé¢ä¸æ¾ç¤ºã
è¿æå¾å¤å ¶ä»å±æ§ï¼å¯ä»¥å®ç°åç§ä¸åçç®çï¼
- Referrer/CORS æ§å¶ï¼ä¿è¯å®å
¨ä¸éç§ï¼è¯¦è§
crossoriginåreferrerpolicy屿§ã - åæ¶ä½¿ç¨
widthåheight设置å¾åçåºæå°ºå¯¸ï¼ä½¿å ¶å¨å è½½åå°±å æ®ç©ºé´ï¼ä»èåè½»å 容å¸å±åç§»çå½±åã - 使ç¨
sizesåsrcset设置ååºå¼å¾åï¼åè§<picture>å ç´ åæä»¬çååºå¼å¾åæç¨ï¼ã
æ¯æçå¾åæ ¼å¼
HTML æ å并没æç»åºéè¦æ¯æçå¾åæ ¼å¼çå表ï¼å æ¤æ¯ä¸ªç¨æ·ä»£çæ¯æä¸ç»ä¸åçæ ¼å¼ã
夿³¨ï¼å¾åæä»¶ç±»å䏿 ¼å¼æåæä¾äºæå ³å¾åæ ¼å¼å web æµè§å¨æ¯æç综åä¿¡æ¯ãæ¬èåªæ¯ä¸ä¸ªæ»ç»ï¼
Web æå¸¸ç¨çå¾åæ ¼å¼æ¯ï¼
- APNGï¼å¨æå¯ç§»æ¤ç½ç»å¾å½¢ï¼ââæ æå¨ç»åºåçä¸ééæ©ï¼GIF æ§è½è¾å·®ï¼ã
- AVIFï¼AV1 å¾åæä»¶æ ¼å¼ï¼ââéæå¾åæå¨æå¾åçä¸ééæ©ï¼å ¶æ§è½è¾å¥½ã
- GIFï¼å¾åäºæ¢æ ¼å¼ï¼ââç®åå¾ååå¨ç»çä¸ééæ©ã
- JPEGï¼èåå¾åä¸å®¶å°ç»å¾åï¼ââææå缩éæå¾åçä¸ééæ©ï¼ç®åææµè¡çæ ¼å¼ï¼ã
- PNGï¼ä¾¿æºå¼ç½ç»å¾å½¢ï¼ââå¯¹äºæ æå缩éæå¾åèè¨æ¯ä¸éçéæ©ï¼è´¨éç¥å¥½äº JPEGï¼ã
- SVGï¼å¯ç¼©æ¾ç¢éå¾å½¢ï¼ââç¢éå¾åæ ¼å¼ãç¨äºå¿ 须以ä¸å尺寸åç¡®æç»çå¾åã
- WebPï¼ç½ç»å¾çæ ¼å¼ï¼ââéæå¾åå卿å¾åçç»ä½³éæ©ã
æ¨è使ç¨è¯¸å¦ WebP å AVIF çå¾åæ ¼å¼ï¼å 为å®ä»¬å¨éæå¾åå卿å¾åçæ§è½åæ¯ PNGãJPEGãGIF 好å¾å¤ã
对äºå¿ 须以ä¸å尺寸åç¡®ç»å¶çå¾åï¼åä»ç¶æ¨èä½¿ç¨ SVG æ ¼å¼ã
å¾åå è½½é误
妿å¨å è½½ææ¸²æå¾åæ¶åçé误ï¼ä¸è®¾ç½®äºè³å°ä¸ä¸ª onerror äºä»¶å¤ç卿¥å¤ç error äºä»¶ï¼é£ä¹è®¾ç½®çäºä»¶å¤çå¨å°±ä¼è¢«è°ç¨ãè¿æ ·çé误å¯è½åçå¨åç§ä¸åçæ
åµä¸ï¼å
æ¬ï¼
src屿§ç屿§å¼ä¸ºç©ºï¼""ï¼æènullãsrc屿§ç URL åç¨æ·æ£å¨æµè§ç页é¢ç URL å®å ¨ç¸åã- å¾ååºäºæäºåå æåäºï¼ä»èæ æ³å è½½ã
- å¾åçå
æ°æ®è¢«ç ´åäºï¼æ æ³æ£ç´¢å®çå辨ç/宽é«ï¼èä¸å¨
<img>å ç´ ç屿§ä¸æ²¡ææå®å®½åº¦/é«åº¦ã - ç¨æ·ä»£çå°æªæ¯æè¯¥å¾çæç¨çæ ¼å¼ã
屿§
æ¤å ç´ æ¯æå ¨å±å±æ§ã
alt-
å®ä¹äºå¾åçå¤ç¨ææ¬æè¿°ã
夿³¨ï¼æµè§å¨å¹¶éæ»æ¯ä¼æ¾ç¤ºå¾åãæ¯å¦ï¼
- éå¯è§åæµè§å¨ï¼Non-visual browsersï¼ï¼æ¯å¦æè§åéç¢ç人使ç¨çé³é¢æµè§å¨ï¼
- ç¨æ·éæ©ä¸æ¾ç¤ºå¾åï¼æ¯å¦ä¸ºäºèçå¸¦å®½ï¼æåºäºéç§èèï¼
- å¾åæä»¶æ æï¼ææ¯ä½¿ç¨äºä¸æ¯æçæ ¼å¼
å¨è¿äºæ åµä¸ï¼æµè§å¨å¾å¯è½ä¼å°å¾åæ¿æ¢ä¸ºå¾åæå±
<img>å ç´ çalt屿§ææä¾çææ¬ãåºäºä¸é¢ç½åçåå ï¼å»ºè®®å°½å¯è½å°éè¿alt屿§æä¾ä¸äºæç¨çä¿¡æ¯ã妿æè¿ä¸ªå±æ§è®¾ç½®ä¸ºç©ºå符串ï¼
alt=""ï¼ï¼å表æè¯¥å¾å䏿¯å 容çå ³é®é¨åï¼è¿æ¯ä¸ç§è£ 饰æè ä¸ä¸ªè¿½è¸ªåç´ ç¹ï¼ï¼éå¯è§åæµè§å¨å¨æ¸²æçæ¶åå¯è½ä¼å¿½ç¥å®ãèä¸ï¼å¦æå¾çå 载失败ï¼å¯è§åæµè§å¨ä¼éè表示å¾çæåç徿 ãå°å¾åå¤å¶å¹¶ç²è´´ä¸ºææ¬ï¼ææ¯å°å¾åç龿¥ä¿å为æµè§å¨ä¹¦ç¾æ¶ï¼ä¹ä¼ç¨å°æ¤å±æ§ã
attributionsrc-
æå®æµè§å¨å¨åéå¾çè¯·æ±æ¶ééå
Attribution-Reporting-Eligibleæ 头ã卿å¡å¨ç«¯ï¼æ¤åè½ç¨äºè§¦åååºä¸åé
Attribution-Reporting-Register-SourceæAttribution-Reporting-Register-Triggeræ 头ï¼ä»¥æ³¨ååºäºå¾åçå½å æ¥æºæå½å 触åå¨ãåºè¿ååªä¸ªååºå¤´åå³äºè§¦å注åçAttribution-Reporting-Eligibleæ 头çå¼ã彿µè§å¨æ¥æ¶å°å å«å¾åæä»¶çååºåï¼ç¸åºçæºäºä»¶æè§¦åäºä»¶å³è¢«è§¦åã
夿³¨ï¼æå ³è¯¦ç»ä¿¡æ¯ï¼è¯·åè§å½å æ¥å APIã
æ¤å±æ§æä¸¤ç§çæ¬å¯ä¾è®¾ç½®ï¼
- å¸å°å¼ï¼å³ä»
æå®
attributionsrcåç§°ãè¿è¡¨ç¤ºå¸æå°Attribution-Reporting-Eligibleæ 头åéè³ä¸src屿§æåçç¸åæå¡å¨ãå½å¨å䏿å¡å¨ä¸å¤çå½å æ¥æºæè§¦å卿³¨åæ¶ï¼æ¤è®¾ç½®å³å¯æ»¡è¶³éæ±ã注åå½å 触å卿¶è¯¥å±æ§ä¸ºå¯é项ï¼è¥æªæå®åé»è®¤ä½¿ç¨å¸å°å¼ã - å å«ä¸ä¸ªæå¤ä¸ª URL çå¼ï¼ä¾å¦ï¼
html<img src="image-file.png" alt="æçå¾åæä»¶æè¿°" attributionsrc="https://a.example/register-source https://b.example/register-source" />å½è¯·æ±çèµæºä¸å¨ä½ æ§å¶çæå¡å¨ä¸ï¼æè 叿å¨å ¶ä»æå¡å¨ä¸å¤çå½å æ¥æºçæ³¨åæ¶ï¼æ¤ç¹æ§é常æç¨ãæ¤æ¶ï¼å¯å¨
attributionsrcåæ®µä¸æå®ä¸ä¸ªæå¤ä¸ª URL å°åãå½èµæºè¯·æ±åçæ¶ï¼ç³»ç»å°åattributionSrc䏿å®ç URLï¼é¤èµæºæºå°åå¤ï¼åéAttribution-Reporting-Eligibleè¯·æ±æ 头ãè¿äº URL å¯éè¿è¿åAttribution-Reporting-Register-SourceæAttribution-Reporting-Register-Triggerååºæ å¤´å®ææ³¨åæµç¨ã夿³¨ï¼æå®å¤ä¸ª URL æå³çå¯ä»¥å¨åä¸åè½ä¸æ³¨åå¤ä¸ªå½å æ¥æºãä¾å¦ï¼å¯è½éè¦è¯ä¼°ä¸åè¥éæ´»å¨çææï¼è¿æ¶ååºäºä¸åæ°æ®çæä¸åçæ¥åã
- å¸å°å¼ï¼å³ä»
æå®
crossorigin-
è¿ä¸ªæä¸¾å±æ§è¡¨ææ¯å¦å¿ é¡»ä½¿ç¨ CORS 请æ±å®æç¸å ³å¾åçæåãå¯ç¨ CORS çå¾åå¯ä»¥å¨
<canvas>å ç´ ä¸éå¤ä½¿ç¨ï¼èä¸ä¼è¢«æ è®°ä¸ºâæ±¡æâãå¦ææªæå®
crossorigin屿§ï¼åä¼åéä¸å¯ç¨ CORS ç请æ±ï¼ä¸ä¼æºå¸¦Originè¯·æ±æ 头ï¼ï¼ä¸æµè§å¨ä¼å°å¾åæ 记为â被污æâå¹¶æç»å¯¹å¾åæ°æ®ç访é®ï¼é»æ¢å ¶å¨<canvas>å ç´ ä¸ç使ç¨ã妿æå®äº
crossorigin屿§ï¼åä¼åéå¯ç¨ CORS ç请æ±ï¼ä¼æºå¸¦Originè¯·æ±æ 头ï¼ï¼ä½æ¯å¦ææå¡å¨ä¸éæ©å 许æºç«ç¹å¯¹å¾åæ°æ®è¿è¡è·¨æºè®¿é®ï¼ä¸åéä»»ä½Access-Control-Allow-Originååºæ å¤´ï¼æåéçAccess-Control-Allow-Originæ 头ä¸ä¸å 嫿ºç«ç¹ï¼ï¼æµè§å¨åä¼é»æ¢å¾åçå è½½ï¼å¹¶å¨å¼åè å·¥å ·çæ§å¶å°ä¸è®°å½ CORS é误ãå 许çå¼ä¸ºï¼
anonymous-
åé忽ç¥åæ®çè·¨æºè¯·æ±ï¼å³ï¼ä¸æºå¸¦ cookieãX.509 è¯ä¹¦æ
Authorizationè¯·æ±æ 头ï¼ã use-credentials-
åéæºå¸¦åæ®çè·¨æºè¯·æ±ï¼æ¯å¦ cookieãX.509 è¯ä¹¦å
Authorizationè¯·æ±æ 头ï¼ã妿æå¡å¨ä¸éæ©ä¸æºç«å ±äº«åæ®ï¼éè¿è¿åAccess-Control-Allow-Credentials: trueååºæ 头ï¼ï¼åæµè§å¨ä¼å°å¾åæ 记为被污æä¸éå¶å¯¹å ¶å¾åæ°æ®ç访é®ã
妿屿§æ¯æ æå¼ï¼æµè§å¨é»è®¤å°å ¶å½å
anonymouså ³é®åãæ´å¤ä¿¡æ¯ï¼è¯·æ¥ç CORS 屿§è®¾ç½®ã decoding-
æ¤å±æ§åæµè§å¨æä¾æç¤ºï¼æç¤ºå ¶åºå¨åæ¬¡æ¸²ææ¥éª¤ä¸åæ¶æ§è¡å¾åè§£ç 䏿¸²æå ¶ä» DOM å 容ï¼
syncï¼ï¼ä½¿åç°æææ´âæ£ç¡®âï¼è¿æ¯å 渲æå¹¶åç°å ¶ä» DOM å 容ï¼éååè§£ç å¾åå¹¶å»¶è¿åç°ï¼asyncï¼ãå®é åºç¨ä¸ï¼asyncæå³çåç»ç»å¶æä½ä¸ä¼çå¾ å¾åè§£ç 宿ãå¨å¯¹éæ
<img>å ç´ ä½¿ç¨decodingæ¶ï¼é常é¾ä»¥å¯è§ææ¾ææãè¿äºå ç´ å¨å è½½å¾åæä»¶ï¼æ 论æ¯ä»ç½ç»è¿æ¯ç¼åè·åï¼æé´ï¼æåå¾å¾ä¼æ¸²æä¸ºç©ºç½å¾åï¼éåä»ä¼ç¬ç«å¤çï¼å æ¤å å®¹æ´æ°çâ忥æ§â并䏿¾èãç¶èï¼è§£ç æé´æ¸²æè¿ç¨çé»å¡ç°è±¡è½é常微ä¹å ¶å¾®ï¼ä½ç¡®å®åå¨å¯æµéçå»¶è¿ââå³ä¾¿èç¼é¾ä»¥å¯è§ã详è§å¾åè§£ç 屿§å®é ä½ç¨è§£æï¼tunetheweb.com, 2023ï¼ã使ç¨ä¸åç
decodingç±»åï¼å¨éè¿ JavaScript 卿å DOM æå ¥<img>å ç´ æ¶å¯è½å¯¼è´æ´ææ¾çå·®å¼ââæ´å¤ç»è请åéHTMLImageElement.decodingãå 许çå¼ä¸ºï¼
elementtiming-
æ è®°å¾å以便éè¿
PerformanceElementTimingAPI è¿è¡è§å¯ãæç»å¼å°æä¸ºè¢«è§å¯å¾åå ç´ çæ è¯ç¬¦ãåè§elementtiming屿§é¡µé¢ã fetchpriority-
æä¾è·åå¾åæ¶è¦ä½¿ç¨çç¸å¯¹çä¼å 级æç¤ºãå 许çå¼ï¼
high-
è¡¨ç¤ºå ¶è·åä¼å 级ç¸å¯¹å ¶ä»å¾åè¦é«ã
low-
è¡¨ç¤ºå ¶è·åä¼å 级ç¸å¯¹å ¶ä»å¾åè¦ä½ã
auto-
è·åä¼å 级æ åå¥½è®¾ç½®ãæ¤ä¸ºé»è®¤è®¾ç½®ã彿ªè®¾ç½®å¼æè®¾ç½®äºæ æå¼æ¶å°ä½¿ç¨æ¤è®¾ç½®ã
åè§
HTMLImageElement.fetchPriority以äºè§£æ´å¤ä¿¡æ¯ã height-
å¾åçåºæé«åº¦ï¼ä»¥åç´ ä¸ºåä½ãå¿ é¡»æ¯æ²¡æåä½çæ´æ°å¼ã
ismap-
è¿ä¸ªå¸å°å±æ§è¡¨ç¤ºå¾åæ¯å¦æ¯æå¡å¨ç«¯å¾åæ å°çä¸é¨åã妿æ¯ï¼é£ä¹ç¹å»å¾ççç²¾ååæ å°ä¼è¢«åéå°æå¡å¨ã
loading-
æç¤ºæµè§å¨åºå½å¦ä½å 载该å¾åãå 许çå¼ï¼
eager-
ç«å³å è½½å¾åï¼ä¸ç®¡å®æ¯å¦å¨å¯è§è§å£ä¹å¤ï¼æ¤ä¸ºé»è®¤å¼ï¼ã
lazy-
å»¶è¿å è½½å¾åï¼ç´å°å®åè§å£æ¥è¿å°ä¸ä¸ªè®¡ç®å¾å°çè·ç¦»ï¼ç±æµè§å¨å®ä¹ï¼ãç®çæ¯å¨éè¦å¾åä¹åï¼é¿å å è½½å¾åæéè¦çç½ç»ååå¨å¸¦å®½ãè¿é叏伿é«å¤§å¤æ°å ¸åç¨åºæ¯ä¸å å®¹çæ§è½ã
夿³¨ï¼ä» å¨å¯ç¨ JavaScript æ¶æä¼å»¶è¿å è½½ãè¿æ¯ä¸ç§åè·è¸ªçæªæ½ï¼å 为ï¼å¦æç¨æ·ä»£çå¨ç¦ç¨èæ¬çæ åµä¸æ¯æå»¶è¿å è½½ï¼ç½ç«å¯ä»¥å¨ä¼è¯ä¸çç¥æ§å°æ¾ç½®å¾åï¼éè¿æå¡å¨è·è¸ªè¯·æ±äºå¤å°å¾å以å请æ±å¨ä½æ¶åèµ·ï¼æ¥è·è¸ªç¨æ·å¨æ´ä¸ªä¼è¯æé´çå¤§è´æ»å¨ä½ç½®ã
夿³¨ï¼å½å¾åç
loading屿§è®¾ç½®ä¸ºlazyæ¶ï¼è¥å ¶æªä¸å ç´ çå¯è§åºååç交éï¼åæ°¸è¿ä¸ä¼è¢«å è½½ââå³ä½¿å è½½å伿¹åè¯¥ç¶æï¼å 为æªå è½½çå¾åå ¶widthåheight屿§å¼å为0ã为延è¿å è½½çå¾ç设置widthåheightå¯è§£å³æ¤é®é¢ï¼è¿ä¹æ¯è§èæ¨èçæä½³å®è·µï¼åè§è§è说æãæ¤æä½åæ¶æå©äºé²æ¢å¸å±åç§»ã referrerpolicy-
ä¸ä¸ªåç¬¦ä¸²ï¼æç¤ºå¨è·åèµæºæ¶ä½¿ç¨çæ¥æºå°åï¼referrerï¼ï¼
no-referrerï¼ä¸ä¼åéRefereræ 头ãno-referrer-when-downgradeï¼è¥æªä½¿ç¨ TLSï¼HTTPSï¼å¯¼èªå°æºç«ï¼åä¸åéRefereræ 头ãoriginï¼åéå°æºç«çæºå°åå°è¢«éå¶ä¸ºï¼åè®®ã主æºå端å£ãorigin-when-cross-originï¼åéå°å ¶ä»æºçæºå°åä¼è¢«éå¶ä¸ºåè®®ã主æºå端å£ãåæºå¯¼èªä»å°å å«è·¯å¾ãsame-originï¼ä» åæºè¯·æ±åéæºå°åï¼èè·¨æºè¯·æ±åä¸å 嫿ºå°åä¿¡æ¯ãstrict-originï¼ä» å¨åè®®å®å ¨çº§å«ä¿æä¸åï¼HTTPSâHTTPSï¼çæ åµä¸å°ææ¡£çæ¥æºä½ä¸ºæºå°ååéãèå¨ç®æ çå®å ¨æ§éä½ï¼HTTPSâHTTPï¼æ¶åä¸åéæºå°åãstrict-origin-when-cross-originï¼é»è®¤å¼ï¼ï¼æ§è¡åæºè¯·æ±æ¶åé宿´ç URLï¼ä¸ä» å¨åè®®å®å ¨çº§å«ä¿æä¸åï¼HTTPSâHTTPSï¼æ¶åéæºï¼å¨ç®æ å®å ¨æ§éä½ï¼HTTPSâHTTPï¼æ¶åä¸åéæ å¤´ãunsafe-urlï¼æ¥æºå°åå æ¬æ¥æºï¼originï¼åè·¯å¾ï¼pathï¼ï¼ä½ä¸å æ¬ç段ãå¯ç åç¨æ·åï¼ãè¿ä¸ªå¼æ¯ä¸å®å ¨çï¼å 为å®å°æºåè·¯å¾ä»å TLS ä¿æ¤çèµæºæ³é²å°ä¸å®å ¨çæºã
sizes-
ä¸ä¸ªæå¤ä¸ªç¨éå·åéçå¼ï¼å¯ä»¥æ¯èµæºå°ºå¯¸æ
autoå ³é®åãæ¯ä¸ä¸ªèµæºå°ºå¯¸å æ¬ï¼
- ä¸ä¸ªåªä½æ¡ä»¶ãå表ä¸çæåä¸é¡¹çç¥è¯¥æ¡ä»¶ã
- ä¸ä¸ªèµæºå°ºå¯¸çå¼ã
åªä½æ¡ä»¶æè¿°çæ¯è§å£ç屿§ï¼èéå¾åæ¬èº«ãä¾å¦ï¼
(height <= 500px) 1000px表示å½è§å£é«åº¦å°äºçäº 500 åç´ æ¶ï¼åºä½¿ç¨å®½åº¦ä¸º 1000 åç´ çå¾åæºãç±äºæºå°ºå¯¸æè¿°ç¬¦æå®äºå¸å±è¿ç¨ä¸å¾ååºéç¨ç宽度ï¼åªä½æ¡ä»¶é常ï¼ä½éå¿ ç¶ï¼åºäºå®½åº¦å±æ§ãèµæºå°ºå¯¸çå¼è¢«ç¨æ¥æå®å¾åçé¢æå°ºå¯¸ãå½
srcsetä¸çèµæºä½¿ç¨äºå®½åº¦æè¿°ç¬¦wæ¶ï¼ç¨æ·ä»£çä¼ä½¿ç¨å½åå¾å大尿¥éæ©srcsetä¸åéçä¸ä¸ªå¾å URLã被éä¸ç尺寸影åå¾åçåºæå°ºå¯¸ï¼å¦ææ²¡æå½±å大å°ç CSS æ ·å¼è¢«åºç¨ï¼ãå¦ææ²¡æè®¾ç½®srcset屿§ï¼æè 没æå±æ§å¼ï¼é£ä¹sizes屿§ä¹å°ä¸èµ·ä½ç¨ãèµæºå°ºå¯¸å¼å¯ä»¥æ¯ä»»ä½éè´çé¿åº¦ãå®ä¸å¾ä½¿ç¨é¤æ°å¦å½æ°ä¹å¤ç CSS 彿°ãåä½çè§£éæ¹å¼ä¸åªä½æ¥è¯¢ç¸åï¼å³ææç¸å¯¹é¿åº¦åä½åç¸å¯¹äºææ¡£æ ¹å ç´ èé
<img>å ç´ ãä¾å¦ï¼emå¼ç¸å¯¹äºæ ¹åä½å¤§å°èéå¾åçåä½å¤§å°ãç¾åæ¯å¼ä¸è¢«å 许ãautoå ³é®å坿¿ä»£æ´ä¸ªå°ºå¯¸å表æå表ä¸çé¦ä¸ªæ¡ç®ãè¯¥å ³é®åä» å¨ä¸loading="lazy"ç»åä½¿ç¨æ¶ææï¼å¹¶å°è§£æä¸ºå¾åçå ·ä½å°ºå¯¸ãç±äºå¾åçåºæå°ºå¯¸å°æªç¡®å®ï¼åºåæ¶æå®widthåheight屿§ï¼æ CSS çæå±æ§ï¼ï¼ä»¥é²æ¢æµè§å¨é»è®¤éç¨ 300px 宽度ã为æåä¸ä¸æ¯æ
autoçæµè§å¨çååå ¼å®¹æ§ï¼å¯å¨sizes屿§ä¸autoä¹åæ·»å åå¤å°ºå¯¸ï¼html<img loading="lazy" width="200" height="200" sizes="auto, (max-width: 30em) 100vw, (max-width: 50em) 50vw, calc(33vw - 100px)" srcset=" swing-200.jpg 200w, swing-400.jpg 400w, swing-800.jpg 800w, swing-1600.jpg 1600w " src="swing-400.jpg" alt="壶éæå¨" /> src-
å¾åç URLï¼è¿ä¸ªå±æ§å¯¹
<img>å ç´ æ¥è¯´æ¯å¿ éçã卿¯æsrcsetçæµè§å¨ä¸ï¼src被å½åæ¥æä¸ä¸ªåç´ å¯åº¦çæè¿°ç¬¦1xçåéå¾åå¤çï¼é¤ésrcsetä¸å·²å®ä¹å ·ææ¤åç´ å¯åº¦æè¿°ç¬¦çå¾åï¼æsrcsetå å«wæè¿°ç¬¦ã srcset-
以éå·åéçä¸ä¸ªæå¤ä¸ªå符串å表表æä¸ç³»åç¨æ·ä»£ç使ç¨çå¯è½çå¾åãæ¯ä¸ä¸ªå符串ç±ä»¥ä¸ç»æï¼
- æåå¾åç URLã
- å¯éå°ï¼åå ä¸ä¸ªç©ºæ ¼ä¹åï¼éå 以ä¸çå
¶ä¸ï¼
- ä¸ä¸ªå®½åº¦æè¿°ç¬¦ï¼ä¸ä¸ªæ£æ´æ°ï¼åé¢ç´§è·
w符å·ï¼ãè¯¥æ´æ°å®½åº¦é¤ä»¥sizes屿§ç»åºçæºå°ºå¯¸æ¥è®¡ç®å¾å°ææçåç´ å¯åº¦ï¼å³æ¢ç®æå x æè¿°ç¬¦çä»·çå¼ã - ä¸ä¸ªåç´ å¯åº¦æè¿°ç¬¦ï¼ä¸ä¸ªæ£æµ®ç¹æ°ï¼åé¢ç´§è·
x符å·ï¼ã
- ä¸ä¸ªå®½åº¦æè¿°ç¬¦ï¼ä¸ä¸ªæ£æ´æ°ï¼åé¢ç´§è·
å¦ææ²¡ææå®æè¿°ç¬¦ï¼é£æºä¼è¢«æå®ä¸ºé»è®¤ç
1xæè¿°ç¬¦ãå¨ç¸åç
srcset屿§ä¸æ··å使ç¨å®½åº¦æè¿°ç¬¦ååç´ å¯åº¦æè¿°ç¬¦æ¶ï¼ä¼å¯¼è´è¯¥å¼æ æãéå¤çæè¿°ç¬¦ï¼æ¯å¦ï¼ä¸¤ä¸ªæºå¨ç¸åçsrcset两个æºé½æ¯2xï¼ä¹æ¯æ æçã妿
srcset屿§ä½¿ç¨å®½åº¦æè¿°ç¬¦ï¼åå¿ é¡»åæ¶å å«sizes屿§ï¼å¦åsrcsetæ¬èº«å°è¢«å¿½ç¥ãç¨æ·ä»£çå¯èªè¡éæ©ä»»ä½å¯ç¨èµæºãè¿ä¸ºå ¶æä¾äºç¸å½å¤§ççµæ´»æ§ï¼ä½¿å ¶è½å¤æ ¹æ®ç¨æ·å好æå¸¦å®½çæ¡ä»¶è°æ´éæ©ãå ·ä½ç¤ºä¾è¯·åé æä»¬çååºå¼å¾åæç¨ã
width-
å¾åçåºæå®½åº¦ï¼ä»¥åç´ ä¸ºåä½ãå¿ é¡»æ¯æ²¡æåä½çæ´æ°ã
usemap-
ä¸å ç´ ç¸å ³èçå¾åæ å°çé¨å URLï¼ä»¥
#å¼å§çé¨åï¼ã
å·²åºå¼ç屿§
align-
å¾åç¸å¯¹äºå®å¨å´ä¸ä¸æç对é½ã使ç¨
floatå/ævertical-alignè¿ä¸¤ä¸ª CSS 屿§ä½ä¸ºä»£æ¿ãå 许çå¼ï¼ border-
å¾åå¨å´çè¾¹æ¡å®½åº¦ãä½¿ç¨ CSS 屿§
borderä»£æ¿æ¤åºå¼å±æ§ã hspace-
æå ¥å°å¾åç左侧åå³ä¾§ç空ç½åç´ çå¼ãä½¿ç¨ CSS 屿§
marginä»£æ¿æ¤åºå¼å±æ§ã longdesc-
ä¸ä¸ªæåæ´è¯¦ç»çå¾åæè¿°ç龿¥ãå¯è½ç弿¯ä¸ä¸ª URL æä¸ä¸ªé¡µé¢ä¸å ¶ä»å ç´ ç
idã夿³¨ï¼æ¤å±æ§å¨å½åææ°ç W3C çæ¬ââHTML 5.2 ä¸è¢«æå°ï¼ä½å¨ WHATWG ç»ç»ç HTML 卿æ åä¸ä¾ç¶å¤äºè¢«ç§»é¤çç¶æãå®çæªæ¥å°æ 宿°ï¼å¼åè åºä½¿ç¨ WAI-ARIA è¿ä¸ä»£æ¿æ¹æ³ï¼ä¾å¦ï¼
aria-describedbyæaria-detailsã name-
å ç´ çååã使ç¨
id屿§ä»£æ¿æ¤åºå¼å±æ§ã vspace-
æå ¥å°å¾åç䏿¹å䏿¹ç空ç½åç´ çæ°ç»ãä½¿ç¨ CSS 屿§
marginä»£æ¿æ¤åºå¼å±æ§ã
ä½¿ç¨ CSS æ·»å æ ·å¼
<img> æ¯ä¸ä¸ªå¯æ¿æ¢å
ç´ ãå®ç display 屿§çé»è®¤å¼æ¯ inlineï¼ä½æ¯å®çé»è®¤åè¾¨çæ¯ç±è¢«åµå
¥çå¾ççåå§å®½é«æ¥ç¡®å®çï¼ä½¿å¾å®å°±å inline-block 䏿 ·ãä½ å¯ä»¥ä¸º <img> 设置 border/border-radiusãpadding/marginãwidthãheight ç CSS 屿§ã
<img> 没æåºçº¿ï¼è¿æå³çï¼å½å¨ä¸ä¸ªè¡å
æ ¼å¼åä¸ä¸æä¸ä½¿ç¨ vertical-align: baseline æ¶ï¼å¾åçåºé¨å°ä¼ä¸å®¹å¨çæååºçº¿å¯¹é½ã
ä½ å¯ä»¥ä½¿ç¨ object-position 屿§å°å¾å½¢å®ä½å¨å
ç´ ççåå
ï¼å¹¶ä½¿ç¨ object-fit 屿§è°æ´çå
å¾åç大å°ï¼ä¾å¦ï¼å¦æå¾åéè¦è£åªï¼åå
¶æ¯å¦éè¦è°æ´ä»¥ç¬¦åçåç大å°ï¼æå¡«æ»¡æ´ä¸ªçåï¼ã
æ ¹æ®å¾åçç±»åï¼å
¶å¯è½ä¼æä¸ä¸ªåå§ç宽åé«ï¼åå§å辨çï¼ã对äºä¸äºç±»åçå¾åï¼åå§å辨ç并䏿¯å¿
è¦çãæ¯å¦è¯´ï¼SVG å¾åï¼å¦æå®ä»¬çæ ¹ <svg> å
ç´ æ²¡æ width æ height 屿§ï¼SVG å¾åå°±å¯ä»¥æ²¡æåå§å辨çã
æ éç¢
>ç¼åææä¹çæ¿ä»£æè¿°
alt 屿§çå¼åºä¸ºå¾åå
容æä¾æ¸
æ°ç®æ´çææ¬æ¿ä»£æ¹æ¡ãå®ä¸åºæè¿°å¾åæ¬èº«çå卿å¾åçæä»¶åãè¥å å¾åæ æåçæå
容è廿çç¥ alt 屿§ï¼è¯·èèéç¨å
¶ä»æ¹å¼åç°å¾åè¯å¾ä¼ è¾¾çä¿¡æ¯ã
ä¸è¦è¿æ ·å
<img alt="image" src="penguin.jpg" />
è¦è¿æ ·å
<img alt="æ²æ»©ä¸çä¸åªä¼é¹
" src="penguin.jpg" />
ä¸é¡¹éè¦çæ éç¢æµè¯æ¯å° alt 屿§å
容ä¸åç½®ææ¬å
容ç»åé
读ï¼ä»¥ç¡®è®¤å
¶æ¯å¦ä¼ è¾¾ä¸å¾çç¸åçä¿¡æ¯ãä¾å¦ï¼è¥å¾çåç½®çå¥å为âæ
è¡éä¸ï¼æçå°ä¸åªå¯ç±çå°å¨ç©ï¼âï¼é£ä¹é误示ä¾ä¼è¢«å±å¹é
读å¨è¯»ä½âæ
è¡éä¸ï¼æçå°ä¸åªå¯ç±çå°å¨ç©ï¼å¾çâï¼è¿æ¾ç¶æ¯«æ æä¹ãèæ£ç¡®ç¤ºä¾ä¼è¢«å±å¹é
读å¨è¯»ä½âæ
è¡éä¸ï¼æçå°ä¸åªå¯ç±çå°å¨ç©ï¼æ²æ»©ä¸çä¸åªä¼é¹
âï¼è¯ä¹æ¸
æ°ã
对äºç¨äºè§¦åæä½çå¾åï¼ä¾å¦åµå¥å¨ <a> æ <button> å
ç´ å
çå¾åï¼ï¼å»ºè®®å¨ alt 屿§å¼ä¸æè¿°è§¦åæä½ãä¾å¦ï¼å¯å° alt="åå³çç®å¤´" æ¹å为 alt="ä¸ä¸é¡µ"ãè¿å¯èèå¨ title 屿§ä¸æ·»å å¯éçè¡¥å
说æï¼å½ç¨æ·è¯·æ±æ¶ï¼å±å¹é
读å¨å¯è½è¯»å该å
容ã
å½å¾åæªè®¾ç½® alt 屿§æ¶ï¼é¨åå±å¹é
读å¨ä¼æè¯»å¾åæä»¶åãè¥æä»¶åæ æ³åç¡®åæ å¾åå
容ï¼å°å¯¼è´ç¨æ·äº§çå°æã
å° SVG è¯å«ä¸ºå¾å
ç±äº VoiceOver 缺é·ï¼VoiceOver æ æ³æ£ç¡®å° SVG å¾åè¯å«ä¸ºå¾åã请为ææä½¿ç¨ SVG æºæä»¶ç <img> å
ç´ æ·»å role="img"ï¼ç¡®ä¿è¾
婿æ¯è½æ£ç¡®è¯å« SVG 为å¾åå
容ã
<img src="mdn.svg" alt="MDN" role="img" />
title 屿§
title 屿§ä¸è½æ¿ä»£ alt 屿§ãæ¤å¤ï¼è¯·é¿å
å¨åä¸å¼ å¾çä¸å£°æç title 屿§ä¸éå¤ alt 屿§çå¼ãæ¤ä¸¾å¯è½å¯¼è´æäºå±å¹é
读å¨éå¤æè¯»ç¸åææ¬ï¼é ææ··æ·ä½éªã
title 屿§ä¹ä¸åºç¨ä½å¾å alt æè¿°çè¡¥å
说æãè¥å¾åéè¦è¯´ææåï¼è¯·ä½¿ç¨ figure å figcaption å
ç´ ã
title 屿§çå¼é常以工å
·æç¤ºå½¢å¼åç°ï¼å½å
æ åçå¨å¾å䏿¶ä¼çææ¾ç¤ºãè½ç¶è¿å¯è½ä¸ºç¨æ·æä¾é¢å¤ä¿¡æ¯ï¼ä½åå¿åè®¾ç¨æ·å¿
å®è½çå°å®ââç¨æ·å¯è½ä»
使ç¨é®çæè§¦æ¸å±æä½ãè¥åå¨å¯¹ç¨æ·ç¹å«éè¦ææä»·å¼çä¿¡æ¯ï¼è¯·éç¨ä¸è¿°æ¹æ³è¡å
åç°ï¼èéä½¿ç¨ titleã
示ä¾
>æ¿ä»£æå
ä¸é¢ç示ä¾å°å¾ååµå ¥å°é¡µé¢ä¸ï¼ä¸å å«ç¨äºæ¹åæ éç¢æ§çæ¿ä»£ææ¬ã
<img src="/shared-assets/images/examples/favicon144.png" alt="MDN" />
å¾å龿¥
æ¤ç¤ºä¾å»ºç«å¨åä¸ä¸ªç¤ºä¾çåºç¡ä¸ï¼å±ç¤ºäºå¦ä½å°å¾å转æ¢ä¸ºé¾æ¥ã为åå°è¿ä¸ç¹ï¼å° <img> æ ç¾åµå¥å¨ <a> ä¹å
ãè¿æ¶ï¼å¤ç¨ææ¬åºå½æè¿°é¾æ¥ææåçèµæºï¼å°±åæ¯ææ¬é¾æ¥ä¸æ ·ã
<a href="https://developer.mozilla.org/zh-CN">
<img
src="/shared-assets/images/examples/favicon144.png"
alt="è®¿é® MDN ç½ç«" />
</a>
ä½¿ç¨ srcset 屿§
å¨è¿ä¸ªä¾åä¸ï¼æä»¬å
å«äºä¸ä¸ª srcset 屿§ï¼å®å¼ç¨äº MDN å¾½æ ç髿¸
çæ¬ï¼å¨é«å辨ç设å¤ä¸ï¼å®å°è¢«ä¼å
å è½½ï¼å代 src 屿§ä¸çå¾åã卿¯æ srcset çç¨æ·ä»£çä¸ï¼src 屿§ä¸çå¾ç被ä½ä¸º 1x åé项ã
<img
src="/shared-assets/images/examples/favicon72.png"
alt="MDN"
srcset="/shared-assets/images/examples/favicon144.png 2x" />
ä½¿ç¨ srcset å sizes 屿§
卿¯æ srcset çç¨æ·ä»£çä¸ï¼å½ä½¿ç¨ w æè¿°ç¬¦æ¶ï¼src 屿§ä¼è¢«å¿½ç¥ãå½å¹é
äºåªä½æ¡ä»¶ (max-width: 600px) æ¶ï¼å°å è½½ 200 åç´ å®½çå¾åï¼æå¹é
çå¾åï¼ï¼å¦åå°å è½½å¦ä¸å¹
å¾åã
<img
src="clock-demo-200px.png"
alt="ç°å¨æ¯ 12:45ã"
srcset="clock-demo-200px.png 200w, clock-demo-400px.png 400w"
sizes="(width <= 600px) 200px, 50vw" />
夿³¨ï¼è¥è¦çå°å¤§å°è°æ´çææï¼è¯·æå¼åç¬ç页颿¥ç示ä¾ï¼ä»¥ä¾¿æå¨çªå£ï¼è°æ´å 容åºåç大å°ã
å®å ¨ä¸éç§æ¹é¢çèè
è½ç¶ <img> å
ç´ çç¨éæ¯å¾å纯çï¼ä½æ¯å®ä»¬å¯å¯¹ç¨æ·å®å
¨åéç§é æä¸è¯çåæãåè§ Referer æ 头ï¼éç§ä¸å®å
¨æ§èé以è·åæ´å¤ä¿¡æ¯åç¼è§£æªæ½ã
ææ¯æ»ç»
| å å®¹ç±»å« |
æµå¼å
容ãçè¯å
容ãåµå
¥å
容ã坿ç¥å
容ã妿å
ç´ æ usemap 屿§ï¼åå
¶ä¹æ¯äº¤äºå¼å
容çä¸ç§ã
|
|---|---|
| å 许çå 容 | æ ï¼å ¶ä¸ºç©ºå ç´ ã |
| æ ç¾çç¥ | å¿ é¡»æå¼å§æ ç¾ï¼ä¸ä¸è½æç»ææ ç¾ã |
| å 许çç¶å ç´ | æ¥ååµå ¥å 容çä»»ä½å ç´ ã |
| éå¼ ARIA è§è² |
|
| å 许ç ARIA è§è² |
|
| DOM æ¥å£ | HTMLImageElement |
è§è
| è§è |
|---|
| HTML > # the-img-element > |
æµè§å¨å ¼å®¹æ§
åè§
<picture>ã<object>å<embed>å ç´- å
¶ä»ä¸å¾åç¸å
³ç CSS 屿§ï¼
object-fitãobject-positionãimage-orientationãimage-renderingåimage-resolution - æ¤å
ç´ æç¨ç
HTMLImageElementæ¥å£ - HTML ä¸çå¾ç
- å¾åæä»¶ç±»å䏿 ¼å¼æå
- ååºå¼å¾å