一个优秀的自适应图片模板,应该具备以下特点:

- 响应式布局:在不同屏幕尺寸(手机、平板、桌面)下,图片都能完美显示,不会溢出或留白过大。
- 性能优化:优先加载适合当前设备的小图,避免在手机上加载过大的桌面版图片,节省流量和加载时间。
- SEO友好:
<img>标签中的alt属性对搜索引擎优化至关重要,必须包含。 - 兼容性:在各种主流浏览器上都能正常工作。
下面,我将分步为您讲解如何实现。
第一步:准备工作 - 图片的裁剪与命名
在织梦后台,我们需要提前准备好不同尺寸的图片,这是实现性能优化的关键。
-
上传原图:在织梦后台的【核心】->【批量维护】->【远程文件管理器】或【多媒体编辑器】中,上传您的高清原图。
-
生成缩略图:织梦强大的缩略图功能是核心,您可以在上传图片时,系统会自动生成您预设好的尺寸,您可以设置以下几种尺寸:
(图片来源网络,侵删)- 大图:1200px x 800px (用于桌面端)
- 中图:768px x 512px (用于平板端)
- 小图:400px x 300px (用于手机端)
-
命名规则:为了让模板能方便地调用不同尺寸的图片,建议您在织梦后台的【系统】->【系统基本参数】->【附件设置】中,修改缩略图的命名规则,设置为
{filename}_{width}_{height},这样一张名为abc.jpg的图片,生成300x200的缩略图后,就会自动命名为abc_300_200.jpg。
第二步:修改织梦默认CSS文件
织梦默认的CSS文件 dedecms.css 中有一些样式会影响图片的自适应,我们需要对其进行修改或覆盖。
打开您的模板目录下的 style/dedecms.css 文件(或您的主样式文件),在文件末尾添加以下CSS代码:
/* 全局图片和媒体元素自适应样式 */
img {
max-width: 100%; /* 图片最大宽度不超过其父容器的宽度 */
height: auto; /* 高度自动调整,保持图片原始比例 */
vertical-align: middle; /* 防止图片下方出现空白间隙 */
}
/* 让视频等媒体元素也能自适应 */
embed, object, video {
max-width: 100%;
height: auto;
}
/* 图片容器样式,可选 */
.img-container {
width: 100%;
overflow: hidden; /* 隐藏超出容器尺寸的图片部分 */
/* 可以添加一些内边距或背景色 */
padding: 5px;
background-color: #f0f0f0;
}
说明:

max-width: 100%是实现自适应的核心,它确保图片永远不会比它的容器宽。height: auto确保图片在宽度变化时,高度按比例缩放,不会变形。
第三步:编写自适应的HTML模板文件
这是最关键的一步,我们将使用织梦的 {dede:field} 标签来调用文章内容,并利用HTML5的 <picture> 标签或 <img> 的 srcset 属性来实现高级的响应式图片加载。
简单高效(推荐大多数情况)
这个方案利用CSS的 max-width 和织梦的默认缩略图,简单有效。
示例:文章内容页 article_article.htm
页中,找到 {dede:field.body/} 标签,这个标签会输出文章里的所有<img>标签,我们只需要确保第二步的CSS已经生效,这些图片就会自动自适应。
为了性能优化,我们最好能手动控制文章首图。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">{dede:field.title/}_{dede:global.cfg_webname/}</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="{dede:global.cfg_templets_skin/}/style/dedecms.css">
</head>
<body>
<div class="article-content">
<!-- 文章标题 -->
<h1>{dede:field.title/}</h1>
<!-- 文章摘要和缩略图 -->
{dede:field name='imglink' alt='{dede:field.title/}'}
<a href="[field:arcurl/]">
<!-- 调用文章第一张图作为缩略图,并加上img-container类 -->
<img src="{dede:field.litpic/}" alt="{dede:field.title/}" class="img-responsive">
</a>
{/dede:field}
<!-- 文章正文 -->
<div class="article-body">
{dede:field.body/}
</div>
</div>
</body>
</html>
对应的CSS (dedecms.css) 更新:
/* 为文章中的图片添加一个响应式类,方便控制 */
.img-responsive {
display: block; /* 避免图片下方有空隙 */
max-width: 100%;
height: auto;
margin: 10px auto; /* 居中显示并添加一些间距 */
}
高级性能优化(使用 <picture>
这个方案可以根据不同屏幕尺寸加载不同大小的图片,性能最佳,但代码稍复杂。
示例:在首页或列表页调用文章带缩略图
假设您想在首页的文章列表中实现这个效果。
{dede:arclist row="5" titlelen="30"}
<article class="post-item">
<div class="post-thumb">
<!-- 使用 picture 标签 -->
<picture>
<!-- 默认加载小尺寸图片,适合手机端 -->
<source data-src="{dede:field name='litpic' function='str_replace("@litpic", "_300_200", "@me')'/}" media="(max-width: 600px)">
<!-- 中等屏幕加载中图 -->
<source data-src="{dede:field name='litpic' function='str_replace("@litpic", "_768_512", "@me')'/}" media="(max-width: 1024px)">
<!-- 大屏幕加载原图 -->
<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-src="{dede:field.litpic/}" alt="[field:title/]" class="lazyload">
</picture>
</div>
<h2><a href="[field:arcurl/]">[field:title/]</a></h2>
<p class="post-excerpt">[field:description function='cn_substr(@me, 100)'/]...</p>
</article>
{/dede:arclist}
代码解释:
<picture> 标签定义了多个 <source> 元素。
- 每个
<source> 的 media 属性指定了媒体查询条件(屏幕宽度)。
data-src 属性存储了图片的真实地址,这里我们用了一个织梦的function来动态替换litpic,生成不同尺寸的图片名(请根据您实际的缩略图命名规则修改此函数)。
<img> 标签是最后的后备方案,当浏览器不支持<picture>时,它会显示这张图,我们将其src设置为一个极小的透明GIF图(data:image/gif;base64,...),真正的图片地址在data-src里,这为下一步的懒加载做准备。
第四步:实现图片懒加载(可选但强烈推荐)
懒加载可以显著提升页面首屏加载速度,用户滚动到图片位置时,图片才被加载。
- 引入懒加载库:在您的模板
<head> 标签内,引入一个轻量级的懒加载库,如 lozad.js。
<!-- 在 </head> 之前 -->
<script src="https://cdn.jsdelivr.net/npm/lozad@1.16.0/dist/lozad.min.js"></script>
- 初始化懒加载:在您的模板
<body> 标签结束前,添加以下JavaScript代码。
<!-- 在 </body> 之前 -->
<script>
// 使用 lozad 初始化懒加载
const observer = lozad('.lazyload', {
load: function(el) {
// 当图片进入可视区域时,将 data-src 的值赋给 src 属性
el.src = el.dataset.src;
el.onload = function() {
el.classList.add('loaded'); // 可以添加一个加载完成的样式类
}
}
});
observer.observe();
</script>
- 修改HTML:将所有需要懒加载的图片的
src 属性改为 data-src,并添加 lazyload 类。
结合方案二的修改:
<!-- 在 picture 标签内,最后的 <img> 标签 -->
<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-src="{dede:field.litpic/}" alt="[field:title/]" class="lazyload">
总结与最佳实践
-
基础必备:
- 在CSS中设置
img { max-width: 100%; height: auto; }。
- 确保织梦后台的缩略图功能已开启并配置好。
-
性能优化(进阶):
- 为不同设备准备不同尺寸的图片。
- 使用
<picture>或<img>的srcset属性来提供最优图片。
- 实现图片懒加载,提升首屏加载速度。
-
SEO与可访问性:
- 永远不要省略
<img>的 alt 属性,它对SEO和视障用户至关重要,织梦的 {dede:field.title/} 是很好的alt。
-
代码组织:
- 将所有自定义的CSS放在一个单独的文件中(如
responsive.css),并在模板中引入,方便管理和维护。
- 将JavaScript代码放在页面底部,避免阻塞页面渲染。
通过以上步骤,您就可以为您的织梦DedeCMS网站打造一个既美观又高效的自适应图片模板了。
这个方案可以根据不同屏幕尺寸加载不同大小的图片,性能最佳,但代码稍复杂。
示例:在首页或列表页调用文章带缩略图
假设您想在首页的文章列表中实现这个效果。
{dede:arclist row="5" titlelen="30"}
<article class="post-item">
<div class="post-thumb">
<!-- 使用 picture 标签 -->
<picture>
<!-- 默认加载小尺寸图片,适合手机端 -->
<source data-src="{dede:field name='litpic' function='str_replace("@litpic", "_300_200", "@me')'/}" media="(max-width: 600px)">
<!-- 中等屏幕加载中图 -->
<source data-src="{dede:field name='litpic' function='str_replace("@litpic", "_768_512", "@me')'/}" media="(max-width: 1024px)">
<!-- 大屏幕加载原图 -->
<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-src="{dede:field.litpic/}" alt="[field:title/]" class="lazyload">
</picture>
</div>
<h2><a href="[field:arcurl/]">[field:title/]</a></h2>
<p class="post-excerpt">[field:description function='cn_substr(@me, 100)'/]...</p>
</article>
{/dede:arclist}
代码解释:
<picture>标签定义了多个<source>元素。- 每个
<source>的media属性指定了媒体查询条件(屏幕宽度)。 data-src属性存储了图片的真实地址,这里我们用了一个织梦的function来动态替换litpic,生成不同尺寸的图片名(请根据您实际的缩略图命名规则修改此函数)。<img>标签是最后的后备方案,当浏览器不支持<picture>时,它会显示这张图,我们将其src设置为一个极小的透明GIF图(data:image/gif;base64,...),真正的图片地址在data-src里,这为下一步的懒加载做准备。
第四步:实现图片懒加载(可选但强烈推荐)
懒加载可以显著提升页面首屏加载速度,用户滚动到图片位置时,图片才被加载。
- 引入懒加载库:在您的模板
<head>标签内,引入一个轻量级的懒加载库,如lozad.js。
<!-- 在 </head> 之前 --> <script src="https://cdn.jsdelivr.net/npm/lozad@1.16.0/dist/lozad.min.js"></script>
- 初始化懒加载:在您的模板
<body>标签结束前,添加以下JavaScript代码。
<!-- 在 </body> 之前 -->
<script>
// 使用 lozad 初始化懒加载
const observer = lozad('.lazyload', {
load: function(el) {
// 当图片进入可视区域时,将 data-src 的值赋给 src 属性
el.src = el.dataset.src;
el.onload = function() {
el.classList.add('loaded'); // 可以添加一个加载完成的样式类
}
}
});
observer.observe();
</script>
- 修改HTML:将所有需要懒加载的图片的
src属性改为data-src,并添加lazyload类。
结合方案二的修改:
<!-- 在 picture 标签内,最后的 <img> 标签 -->
<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-src="{dede:field.litpic/}" alt="[field:title/]" class="lazyload">
总结与最佳实践
-
基础必备:
- 在CSS中设置
img { max-width: 100%; height: auto; }。 - 确保织梦后台的缩略图功能已开启并配置好。
- 在CSS中设置
-
性能优化(进阶):
- 为不同设备准备不同尺寸的图片。
- 使用
<picture>或<img>的srcset属性来提供最优图片。 - 实现图片懒加载,提升首屏加载速度。
-
SEO与可访问性:
- 永远不要省略
<img>的alt属性,它对SEO和视障用户至关重要,织梦的{dede:field.title/}是很好的alt。
- 永远不要省略
-
代码组织:
- 将所有自定义的CSS放在一个单独的文件中(如
responsive.css),并在模板中引入,方便管理和维护。 - 将JavaScript代码放在页面底部,避免阻塞页面渲染。
- 将所有自定义的CSS放在一个单独的文件中(如
通过以上步骤,您就可以为您的织梦DedeCMS网站打造一个既美观又高效的自适应图片模板了。
