Search K
Appearance
Appearance
关键词: HTML5图像元素, img标签, 图片格式, 响应式图像, 图像映射, 图形元素, 媒体优化, 可访问性, srcset, picture标签
图像和媒体元素是现代网页设计中不可或缺的组成部分,它们能够增强用户体验,传达信息,并使网页更加生动有趣。HTML5提供了丰富的图像和媒体元素,包括传统的 <img> 元素,以及新增的 <figure>、<figcaption> 等语义化元素。本节将详细介绍这些元素的使用方法、最佳实践和现代Web开发技术。
<img> 元素的基本语法 <img src="图像路径" alt="替代文本">指定图像文件的路径:
<!-- 相对路径 -->
<img src="images/logo.png" alt="公司标志">
<img src="./photos/sunset.jpg" alt="日落风景">
<img src="../assets/icon.svg" alt="图标">
<!-- 绝对路径 -->
<img src="/images/banner.jpg" alt="横幅图片">
<!-- 完整URL -->
<img src="https://example.com/image.jpg" alt="外部图片">提供图像的替代文本,对无障碍访问至关重要:
<!-- 描述性的alt文本 -->
<img src="product.jpg" alt="红色运动鞋,白色鞋底">
<!-- 装饰性图片可以使用空alt -->
<img src="decoration.png" alt="">
<!-- 复杂图像的alt文本 -->
<img src="chart.png" alt="2023年销售额趋势图,显示第一季度增长15%"><!-- 指定图像尺寸 -->
<img src="photo.jpg" alt="风景照片" width="800" height="600">
<!-- 只指定一个维度,另一个自动缩放 -->
<img src="portrait.jpg" alt="肖像照片" width="300"><img src="artwork.jpg" alt="油画作品" title="《星空》- 梵高作品"><!-- 懒加载图像 -->
<img src="large-image.jpg" alt="大图片" loading="lazy">
<!-- 立即加载图像 -->
<img src="hero-image.jpg" alt="主要图片" loading="eager">提供多个图像源,浏览器根据设备特性选择最合适的图像:
<!-- 基于像素密度的响应式图像 -->
<img src="image.jpg"
srcset="image.jpg 1x,
image@2x.jpg 2x,
image@3x.jpg 3x"
alt="响应式图像">
<!-- 基于视口宽度的响应式图像 -->
<img src="image-800.jpg"
srcset="image-400.jpg 400w,
image-800.jpg 800w,
image-1200.jpg 1200w"
sizes="(max-width: 600px) 400px,
(max-width: 1000px) 800px,
1200px"
alt="响应式图像"><picture> 元素 提供更精细的控制:
<picture>
<!-- 针对小屏幕设备 -->
<source media="(max-width: 600px)"
srcset="small-image.jpg">
<!-- 针对中等屏幕设备 -->
<source media="(max-width: 1200px)"
srcset="medium-image.jpg">
<!-- 针对大屏幕设备 -->
<source media="(min-width: 1201px)"
srcset="large-image.jpg">
<!-- 回退图像 -->
<img src="default-image.jpg" alt="响应式图像">
</picture><picture>
<!-- 现代浏览器支持的WebP格式 -->
<source srcset="image.webp" type="image/webp">
<!-- AVIF格式(最新浏览器支持) -->
<source srcset="image.avif" type="image/avif">
<!-- 传统JPEG格式作为回退 -->
<img src="image.jpg" alt="图像">
</picture><figure> 和 <figcaption> 元素 <!-- 基本用法 -->
<figure>
<img src="chart.png" alt="销售数据图表">
<figcaption>2023年第一季度销售数据</figcaption>
</figure>
<!-- 复杂的图像说明 -->
<figure>
<img src="architecture.jpg" alt="现代建筑物">
<figcaption>
<h3>现代艺术博物馆</h3>
<p>由著名建筑师设计,于2020年建成开放</p>
</figcaption>
</figure><figure>
<pre><code>
function greeting(name) {
return `Hello, ${name}!`;
}
</code></pre>
<figcaption>JavaScript问候函数示例</figcaption>
</figure><figure>
<blockquote>
<p>设计不仅仅是看起来如何,感觉如何。设计就是如何运作。</p>
</blockquote>
<figcaption>
<cite>史蒂夫·乔布斯</cite>
</figcaption>
</figure><!-- 照片使用JPEG -->
<img src="photo.jpg" alt="风景照片">
<!-- 图标和简单图形使用PNG -->
<img src="icon.png" alt="应用图标">
<!-- 矢量图形使用SVG -->
<img src="logo.svg" alt="公司标志">
<!-- 现代浏览器使用WebP -->
<picture>
<source srcset="image.webp" type="image/webp">
<img src="image.jpg" alt="图像">
</picture><!-- 为不同设备优化图像尺寸 -->
<img src="hero-image.jpg"
srcset="hero-small.jpg 480w,
hero-medium.jpg 800w,
hero-large.jpg 1200w"
sizes="(max-width: 480px) 480px,
(max-width: 800px) 800px,
1200px"
alt="主要图片"><!-- 原生懒加载 -->
<img src="image.jpg" alt="图片" loading="lazy">
<!-- 结合Intersection Observer API -->
<img src="placeholder.jpg"
data-src="actual-image.jpg"
alt="图片"
class="lazy-load">// 懒加载实现
const lazyImages = document.querySelectorAll('.lazy-load');
const imageObserver = new IntersectionObserver((entries, observer) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
const img = entry.target;
img.src = img.dataset.src;
img.classList.remove('lazy-load');
observer.unobserve(img);
}
});
});
lazyImages.forEach(img => {
imageObserver.observe(img);
});/* 响应式图像 */
.responsive-image {
max-width: 100%;
height: auto;
}
/* 图像容器 */
.image-container {
position: relative;
overflow: hidden;
}
/* 图像悬停效果 */
.hover-effect {
transition: transform 0.3s ease;
}
.hover-effect:hover {
transform: scale(1.05);
}/* CSS滤镜效果 */
.filter-grayscale {
filter: grayscale(100%);
}
.filter-sepia {
filter: sepia(50%);
}
.filter-blur {
filter: blur(3px);
}
.filter-brightness {
filter: brightness(1.2);
}
.filter-contrast {
filter: contrast(1.5);
}
/* 组合滤镜 */
.filter-vintage {
filter: sepia(30%) contrast(1.2) brightness(1.1);
}/* 圆形图像 */
.circular-image {
border-radius: 50%;
width: 200px;
height: 200px;
object-fit: cover;
}
/* 图像遮罩 */
.masked-image {
mask: url(#mask);
-webkit-mask: url(#mask);
}
/* 裁剪路径 */
.clipped-image {
clip-path: polygon(50% 0%, 0% 100%, 100% 100%);
}<svg width="100" height="100" viewBox="0 0 100 100">
<circle cx="50" cy="50" r="40" fill="blue" />
<text x="50" y="55" text-anchor="middle" fill="white">SVG</text>
</svg><!-- 作为图像引用 -->
<img src="icon.svg" alt="图标">
<!-- 作为对象嵌入 -->
<object data="illustration.svg" type="image/svg+xml">
<img src="fallback.png" alt="插图">
</object>/* 响应式SVG */
.responsive-svg {
width: 100%;
height: auto;
}
/* 固定比例的SVG容器 */
.svg-container {
position: relative;
width: 100%;
padding-bottom: 56.25%; /* 16:9 比例 */
}
.svg-container svg {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}<!-- 描述性图像 -->
<img src="sunset.jpg" alt="海边日落,天空呈现橙红色">
<!-- 功能性图像 -->
<img src="search-icon.png" alt="搜索">
<!-- 装饰性图像 -->
<img src="decoration.png" alt="" role="presentation">
<!-- 复杂图像 -->
<img src="org-chart.png" alt="组织架构图"
longdesc="org-chart-description.html"><!-- 使用aria-describedby -->
<img src="complex-chart.png"
alt="季度销售数据图表"
aria-describedby="chart-description">
<div id="chart-description">
<h3>图表详细说明</h3>
<p>该图表显示了2023年四个季度的销售数据:</p>
<ul>
<li>第一季度:150万</li>
<li>第二季度:180万</li>
<li>第三季度:200万</li>
<li>第四季度:220万</li>
</ul>
</div><figure role="img" aria-labelledby="fig-title" aria-describedby="fig-desc">
<img src="data-visualization.png" alt="">
<figcaption>
<h3 id="fig-title">用户增长趋势</h3>
<p id="fig-desc">
过去12个月的用户增长数据显示稳定上升趋势,
从1月的1000用户增长到12月的5000用户。
</p>
</figcaption>
</figure><section class="product-showcase">
<div class="product-images">
<figure class="main-image">
<picture>
<source media="(max-width: 600px)"
srcset="product-mobile.jpg">
<source media="(max-width: 1200px)"
srcset="product-tablet.jpg">
<img src="product-desktop.jpg"
alt="蓝色运动鞋产品图片">
</picture>
</figure>
<div class="thumbnail-gallery">
<img src="product-thumb1.jpg"
alt="运动鞋正面图"
class="thumbnail">
<img src="product-thumb2.jpg"
alt="运动鞋侧面图"
class="thumbnail">
<img src="product-thumb3.jpg"
alt="运动鞋底部图"
class="thumbnail">
</div>
</div>
<div class="product-info">
<h2>专业运动鞋</h2>
<p>高质量材料制作,适合日常运动和健身。</p>
</div>
</section><section class="gallery">
<h2>摄影作品集</h2>
<div class="gallery-grid">
<figure class="gallery-item">
<img src="photo1.jpg"
alt="山峰日出景色"
loading="lazy">
<figcaption>
<h3>山峰日出</h3>
<p>摄于阿尔卑斯山脉</p>
</figcaption>
</figure>
<figure class="gallery-item">
<img src="photo2.jpg"
alt="海浪拍打礁石"
loading="lazy">
<figcaption>
<h3>海浪礁石</h3>
<p>摄于太平洋海岸</p>
</figcaption>
</figure>
<figure class="gallery-item">
<img src="photo3.jpg"
alt="城市夜景灯光"
loading="lazy">
<figcaption>
<h3>城市夜景</h3>
<p>摄于东京塔顶</p>
</figcaption>
</figure>
</div>
</section><article>
<h1>深度学习在图像识别中的应用</h1>
<figure class="article-figure">
<img src="neural-network-diagram.png"
alt="神经网络结构图,显示输入层、隐藏层和输出层">
<figcaption>
图1:典型的深度神经网络结构
</figcaption>
</figure>
<p>深度学习技术在图像识别领域取得了显著成果...</p>
<figure class="article-figure">
<img src="accuracy-comparison.png"
alt="准确率对比图表,显示不同算法的性能表现">
<figcaption>
图2:不同算法在图像识别任务中的准确率对比
</figcaption>
</figure>
</article><!-- 关键图像预加载 -->
<link rel="preload" href="hero-image.jpg" as="image">
<!-- 使用JavaScript预加载 -->
<script>
function preloadImages(urls) {
urls.forEach(url => {
const img = new Image();
img.src = url;
});
}
preloadImages([
'image1.jpg',
'image2.jpg',
'image3.jpg'
]);
</script><!-- 针对不同设备优化 -->
<picture>
<!-- 高分辨率设备 -->
<source media="(min-resolution: 2dppx)"
srcset="image@2x.webp"
type="image/webp">
<!-- 标准分辨率设备 -->
<source srcset="image.webp"
type="image/webp">
<!-- 回退选项 -->
<img src="image.jpg"
alt="图像"
width="800"
height="600">
</picture><!-- 设置适当的缓存策略 -->
<meta http-equiv="Cache-Control" content="max-age=31536000">
<!-- 使用CDN加速 -->
<img src="https://cdn.example.com/optimized-image.jpg"
alt="CDN加速图像"><!-- 基本音频播放器 -->
<audio controls>
<source src="audio.mp3" type="audio/mpeg">
<source src="audio.ogg" type="audio/ogg">
您的浏览器不支持音频播放。
</audio>
<!-- 自动播放音频(谨慎使用) -->
<audio autoplay muted>
<source src="background-music.mp3" type="audio/mpeg">
</audio><!-- 基本视频播放器 -->
<video controls width="800" height="450">
<source src="video.mp4" type="video/mp4">
<source src="video.webm" type="video/webm">
<track kind="subtitles"
src="subtitles-zh.vtt"
srclang="zh"
label="中文字幕">
您的浏览器不支持视频播放。
</video>
<!-- 响应式视频 -->
<div class="video-container">
<video controls>
<source src="responsive-video.mp4" type="video/mp4">
</video>
</div>.video-container {
position: relative;
width: 100%;
padding-bottom: 56.25%; /* 16:9 比例 */
}
.video-container video {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}<!-- 错误 -->
<img src="important-image.jpg">
<!-- 正确 -->
<img src="important-image.jpg" alt="重要图片描述"><!-- 错误:照片使用PNG格式 -->
<img src="photo.png" alt="照片">
<!-- 正确:照片使用JPEG格式 -->
<img src="photo.jpg" alt="照片"><!-- 错误:固定尺寸 -->
<img src="image.jpg" alt="图像" width="800">
<!-- 正确:响应式图像 -->
<img src="image.jpg" alt="图像" class="responsive-image">选择合适的图像格式
优化图像尺寸
提供有意义的alt文本
考虑性能影响
图像和媒体元素是现代网页的重要组成部分,正确使用这些元素不仅能提升用户体验,还能改善网站的性能和可访问性。在实际开发中,要注意选择合适的图像格式、实现响应式设计、优化加载性能,并确保所有用户都能获得良好的体验。
下一节我们将学习表格元素,了解如何创建和样式化数据表格。