dede多张图CSS样式如何设置?

99ANYc3cd6
预计阅读时长 22 分钟
位置: 首页 DEDE建站 正文
  1. 文章列表页:显示文章的缩略图和多图字段。
  2. :在文章正文中,对body字段里的图片进行样式化。
  3. 自定义模型/表单:在专门的多图字段中展示图片。

下面我将针对这几种最常见的场景,提供详细的CSS代码示例和实现思路。

dede多张图css样
(图片来源网络,侵删)

文章列表页 - 显示多张缩略图

这是最常见的需求,在文章列表中,我们希望文章除了主缩略图外,还能展示多张图片作为预览。

修改模板文件 (list_article.htm)

你需要找到并修改你的列表模板文件,通常位于 /templets/default/ 目录下,文件名可能是 list_article.htm 或你自定义的模板。

在模板中,找到循环文章列表的代码块,通常是这样的结构:

{dede:list pagesize='10'}
    <li>
        <a href="[field:arcurl/]">
            <img src="[field:litpic/]" alt="[field:title/]">
        </a>
        <h2><a href="[field:arcurl/]">[field:title/]</a></h2>
        <p>[field:description function='cn_substr(@me, 100)'/]...</p>
    </li>
{/dede:list}

关键步骤: 在这个循环内部,我们需要调用多图字段 imgListimgList 字段存储的是用 分隔的图片路径字符串。

dede多张图css样
(图片来源网络,侵删)

修改后的代码示例:

{dede:list pagesize='10'}
    <li>
        <!-- 主缩略图 -->
        <div class="main-thumb">
            <a href="[field:arcurl/]">
                <img src="[field:litpic/]" alt="[field:title/]">
            </a>
        </div>
        <!-- 多张缩略图预览区 -->
        <div class="multi-thumb">
            <!-- 使用 [field:imglist/] 来获取多图字段 -->
            <!-- 注意:imglist 默认只取第一张,我们需要用自定义函数来处理 -->
            <!-- 这里我们假设你有一个自定义函数 GetMultiImg,下面会教你怎么做 -->
            [field:imglist function='GetMultiImg(@me, 3)'/]
        </div>
        <h2><a href="[field:arcurl/]">[field:title/]</a></h2>
        <p>[field:description function='cn_substr(@me, 100)'/]...</p>
    </li>
{/dede:list}

GetMultiImg 自定义函数 (非常重要!)

上面的代码中用到了 GetMultiImg 函数,但DedeCMS默认没有这个函数,你需要自己创建。

  1. 创建函数文件: 在 /include/extend.func.php 文件中(如果没有就创建一个)添加以下PHP代码:

    /**
     * 处理多图字段,返回指定数量的HTML图片标签
     * @param string $imglistStr 多图字段字符串,格式为 "图片1|图片2|图片3..."
     * @param int $num 要显示的图片数量
     * @return string 返回HTML字符串
     */
    function GetMultiImg($imglistStr, $num = 3) {
        if (empty($imglistStr)) {
            return '';
        }
        // 将字符串分割成数组
        $imgArray = explode('|', $imglistStr);
        // 确保只取我们需要的数量
        $imgArray = array_slice($imgArray, 0, $num);
        $html = '';
        foreach ($imgArray as $imgUrl) {
            // 确保图片路径不为空
            if (!empty($imgUrl)) {
                // 拼接HTML,这里可以根据需要添加样式类
                $html .= '<img src="' . $imgUrl . '" alt="" class="thumb-item">';
            }
        }
        return $html;
    }
  2. 保存文件:保存 /include/extend.func.php 文件。

编写CSS样式

在你的CSS文件(/templets/default/style/dedecms.css)中,为刚才添加的HTML结构添加样式。

/* 列表项容器 */
/* .list li { ... } (你的现有样式) */
/* 多图缩略图预览区容器 */
.multi-thumb {
    display: flex; /* 使用flex布局让图片水平排列 */
    gap: 8px; /* 图片之间的间距 */
    margin-top: 8px;
    overflow: hidden; /* 防止图片溢出 */
}
/* 每张小图的样式 */
.multi-thumb .thumb-item {
    width: 60px; /* 设置固定宽度 */
    height: 60px; /* 设置固定高度 */
    object-fit: cover; /* 保证图片填满容器且不变形 */
    border-radius: 4px; /* 圆角 */
    border: 1px solid #eee; /* 细边框 */
    cursor: pointer; /* 鼠标悬停时显示手型 */
    transition: transform 0.2s ease; /* 添加一个简单的放大动画 */
}
/* 鼠标悬停时的效果 */
.multi-thumb .thumb-item:hover {
    transform: scale(1.1); /* 放大1.1倍 */
    border-color: #007bff; /* 边框变色 */
    box-shadow: 0 2px 8px rgba(0,123,255,0.25); /* 添加阴影 */
}

效果:列表中的每个文章项会显示一张主图,下面水平排列3张小图,鼠标悬停小图时会有放大和边框高亮效果。


页 - 对正文图片进行样式化

页 (article_article.htm),我们通常需要对 body 字段中的图片进行统一美化,比如给所有内容图添加边框、阴影、最大宽度限制等。

修改模板文件 (article_article.htm)

页模板中,[field:body/] 标签会直接输出文章的HTML内容,我们不需要修改这里的标签,而是通过CSS来直接作用于它内部的 <img>

编写CSS样式

在CSS文件中,使用更具体的选择器来确保样式只应用于文章内容区,而不会影响到网站其他地方的图片(比如Logo、缩略图等)。

/* 假设文章内容区的 class 或 id 是 article-content */
.article-content img {
    /* 1. 响应式:图片最大宽度为100%,不会超出容器 */
    max-width: 100%;
    height: auto; /* 高度自动调整,保持比例 */
    /* 2. 美化:添加样式 */
    display: block; /* 避免图片下方出现奇怪的间隙 */
    margin: 15px auto; /* 上下间距,左右居中 */
    border-radius: 8px; /* 圆角 */
    box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1); /* 添加柔和的阴影 */
    /* 3. 过渡效果:当图片加载或交互时更平滑 */
    transition: transform 0.3s ease, box-shadow 0.3s ease;
}
/* 鼠标悬停在文章图片上时的效果 */
.article-content img:hover {
    transform: scale(1.02); /* 轻微放大 */
    box-shadow: 0 8px 25px rgba(0, 0, 0, 0.15); /* 阴影加深 */
}
/* 如果需要为第一张图或特定图片添加不同样式,可以这样做 */
.article-content img:first-child {
    margin-top: 0; /* 第一张图片去掉上边距 */
}

重要提示:为了确保 .article-content img 这样的选择器优先级够高,你可以在CSS文件中把它放在更靠后的位置,或者增加权重,body .article-content img


自定义模型/表单中的多图字段

如果你在后台创建了一个自定义模型,并添加了“多图片”类型的字段,前台调用和样式化的方法与列表页类似。

修改模板文件

找到调用该自定义模型的模板文件,article_模型ID.htm,使用DedeCMS的专门标签 {dede:field.字段名/} 来调用。

假设你的多图字段名叫 my_gallery

<div class="custom-gallery">
    {dede:field.my_gallery function='GetMultiImg(@me, 5)'/}
</div>

这里我们复用了前面创建的 GetMultiImg 函数,只需要把 imglist 改成你的字段名 my_gallery,并调整要显示的数量(这里是5张)。

编写CSS样式

CSS代码可以参考场景一的样式,只需要调整一下类名即可。

/* 自定义图集容器 */
.custom-gallery {
    display: flex;
    flex-wrap: wrap; /* 允许换行 */
    gap: 15px; /* 图片间距 */
    margin: 20px 0;
}
/* 图集中的每张图片 */
.custom-gallery .thumb-item {
    width: calc(20% - 12px); /* 5列布局,减去间距 */
    aspect-ratio: 1 / 1; /* 保持1:1的正方形比例 */
    object-fit: cover;
    border-radius: 8px;
    cursor: pointer;
}
/* 响应式调整:在小屏幕上变为2列 */
@media (max-width: 768px) {
    .custom-gallery .thumb-item {
        width: calc(50% - 8px);
    }
}
/* 在更小的屏幕上变为1列 */
@media (max-width: 480px) {
    .custom-gallery .thumb-item {
        width: 100%;
    }
}

总结与最佳实践

  1. 功能与样式分离:PHP函数(如GetMultiImg)负责处理数据和生成HTML结构,CSS负责美化,这会让代码更清晰、易于维护。
  2. 使用Flexbox/Grid:现代CSS的Flexbox和Grid布局是处理多图排列的利器,比传统的floatmargin更灵活、更强大。
  3. 响应式是必须的:始终为图片设置 max-width: 100%height: auto,并使用媒体查询(@media)来适应不同屏幕尺寸。
  4. 选择器要具体:使用 .article-content img 而不是简单的 img,可以避免样式污染,让你的CSS更可控。
  5. 添加交互效果:像 hover 效果(放大、阴影)这样的小细节,能极大地提升用户体验和网站的现代感。

希望这份详细的指南能帮助你在DedeCMS中完美实现多图CSS样式!

-- 展开阅读全文 --
头像
如何设置与调用?
« 上一篇 今天
dede登录后信息如何查看与管理?
下一篇 » 今天

相关文章

取消
微信二维码
支付宝二维码