下面我将从核心方法详细步骤最佳实践以及常见问题四个方面,详细讲解如何在 Discuz! 模板中引入 CSS。

discuz 模板引入css
(图片来源网络,侵删)

核心方法:使用 template() 函数

在 Discuz! 模板文件(.htm 文件)中,引入 CSS 文件最核心、最标准的方法是使用 template() 函数,这个函数专门用于加载模板资源文件,包括 CSS 和 JavaScript。

基本语法:

{template 'common/header': 'css'}

语法解析:

  • {template ...}: Discuz! 的模板标签。
  • 'common/header': 这是资源的标识符,Discuz! 会根据这个标识符在 ./static/js/ 目录下寻找对应的文件。
    • common: 文件夹名。
    • header: 文件名(不带扩展名)。
    • 上面的代码会尝试加载 ./static/js/common/header.css 文件。
  • 'css': 这是资源类型,明确告诉 Discuz! 这是一个 CSS 文件,如果不写,Discuz! 默认会寻找 JavaScript 文件。

详细步骤:创建并引入一个自定义 CSS

假设我们想在默认的 default 模板中添加一个自定义的样式文件 my_custom_styles.css

discuz 模板引入css
(图片来源网络,侵删)

步骤 1:创建 CSS 文件

  1. 在你的网站根目录下,找到 static 文件夹。
  2. 进入 static 文件夹,再进入 js 文件夹。
  3. 创建一个新文件夹,比如叫 my_template,用于存放我们模板相关的资源。
  4. my_template 文件夹中,创建一个名为 my_custom_styles.css 的文件。

你的文件路径应该是:./static/js/my_template/my_custom_styles.css

  1. my_custom_styles.css 文件中写入一些样式代码,
/* my_custom_styles.css */
.my-new-style {
    color: red;
    font-weight: bold;
}
.highlight-box {
    border: 2px solid blue;
    padding: 10px;
    background-color: #f0f8ff;
}

步骤 2:在模板文件中引入 CSS

我们需要在模板文件中使用 template() 函数来加载这个 CSS 文件。

  1. 打开你想要修改的模板文件,修改论坛首页的样式,可以打开 template/default/forum/discuz.htm
  2. 找到 <head> 标签内部,Discuz! 会在这里集中引入 CSS 和 JS 文件。
  3. 在合适的位置(通常在 Discuz! 默认 CSS 的后面)添加你的模板标签:
<!-- 在 discuz.htm 的 <head> 标签内添加 -->
<head>
    <!-- ... 其他 head 内容 ... -->
    <!-- Discuz! 默认的 CSS -->
    {template common/style}
    <!-- 在这里引入你的自定义 CSS -->
    {template 'my_template/my_custom_styles': 'css'}
    <!-- ... 其他 head 内容 ... -->
</head>

说明:

  • {template common/style}: 这是 Discuz! 引入其核心 CSS 文件的方式,我们最好把它放在自定义 CSS 之前,这样可以确保我们的自定义样式能够覆盖默认样式(CSS 的层叠规则)。
  • {template 'my_template/my_custom_styles': 'css'}: 这行代码就是告诉 Discuz! 去加载 ./static/js/my_template/my_custom_styles.css 文件。

步骤 3:验证效果

  1. 保存 discuz.htm 文件。
  2. 清除浏览器缓存和 Discuz! 的模板缓存(在后台 -> 工具 -> 更新缓存)。
  3. 刷新你的论坛首页。
  4. 使用浏览器的“开发者工具”(按 F12),检查 <head> 标签,你应该能看到类似 <link rel="stylesheet" type="text/css" href="你的域名/static/js/my_template/my_custom_styles.css?..." /> 的标签。
  5. 在页面的某个 HTML 元素上使用你在 CSS 中定义的类名,<div class="my-new-style">这段文字应该是红色的</div>,看看样式是否生效。

最佳实践与注意事项

  1. 路径规范:CSS 文件统一存放在 ./static/js/ 目录下,这是 Discuz! 模板系统的约定,使用 template() 函数可以自动处理版本号(通过文件名后的 ?version 参数),避免浏览器缓存问题。不要在模板目录(如 template/default/)下创建 CSS 文件并直接通过 <link> 标签引入。

    discuz 模板引入css
    (图片来源网络,侵删)
  2. 加载顺序:CSS 文件的加载顺序很重要,先加载的样式会被后加载的样式覆盖。核心/框架 CSS 应该先加载,你的自定义/覆盖样式应该后加载

  3. 使用 template() 而非 <link>:虽然你可以直接在模板里写 <link rel="stylesheet" href="...">,但强烈不推荐这样做,因为 template() 函数能更好地与 Discuz! 的系统集成,例如自动处理缓存、压缩(如果开启了相关功能)以及在移动端模板中自动切换等。

  4. 模块化与复用:如果你的样式只用于特定页面(我的帖子”页面),最好在该页面对应的模板文件(如 my_posts.htm)中引入,而不是在全局的 header.htm 中引入,这样可以减少不必要的 HTTP 请求。

  5. 移动端适配:Discuz! 有独立的移动端模板,如果你需要为移动端添加样式,应该:

    • 将 CSS 文件放在移动端模板的资源目录下,./static/js/mobile/
    • 在移动端模板文件(如 forum/mobile/discuz.htm)中使用 template() 函数引入。

常见问题与解决方案

问题 1:引入后样式不生效,检查不到 CSS 文件。

  • 原因 1:路径错误。 确保你的 CSS 文件确实在 ./static/js/ 目录下,template() 函数中的标识符与文件路径完全匹配。
  • 原因 2:模板未更新。 Discuz! 会缓存编译后的模板,请务必在后台 “工具” -> “更新缓存” 中更新模板缓存。
  • 原因 3:浏览器缓存。Ctrl + F5 (Windows) 或 Cmd + Shift + R (Mac) 强制刷新浏览器,清除本地缓存。

问题 2:样式被 Discuz! 默认样式覆盖了。

  • 原因:CSS 选择器优先级不够高。
  • 解决方案
    1. 提高选择器优先级:给元素添加一个更具体的类名或 ID,Discuz! 的帖子标题类名可能是 xst,你想修改它,可以写成 #threadlisttableid .xst { color: blue; }
    2. 使用 !important(慎用):在开发调试阶段,可以临时使用 color: red !important; 来强制应用你的样式,但 !important 会破坏 CSS 的层叠规则,应尽量避免在生产环境中过度使用。

问题 3:如何在特定模块的模板中引入 CSS?

  • 方法:直接在该模块的模板文件(如 forum/viewthread.htm)的 <head> 部分添加 {template ...} 标签即可,这样,只有访问该主题页面时才会加载这个 CSS 文件,更加高效。

通过以上方法和步骤,你就可以灵活、规范地在 Discuz! 模板中引入和管理你的 CSS 样式了。