如何在MediaWiki中为不同页面配置自定义样式表?
嘿,我来帮你搞定MediaWiki的样式定制问题~
先解决你当前的.rootpage方法适配子页面的问题
你现在用.rootpage-Page1的写法其实已经能覆盖Page1的所有子页面了!MediaWiki会给子页面的<body>标签自动加上父页面的.rootpage-xxx类(比如Page1/Subpage的body会有.rootpage-Page1),所以你现有的样式代码已经能作用到子页面上。如果不确定,可以打开子页面的源代码,查看body标签的class属性确认。
要是遇到特殊情况(比如旧版MediaWiki不支持这个类),可以用CSS属性选择器来兜底,匹配所有包含Page1相关类的页面:
body[class*="rootpage-Page1"], body[class*="page-Page1"] { background-image: url("..."); background-color: black; color: white; } body[class*="rootpage-Page1"] .gallerytextwrapper { background-color: rgba(40,40,40,0.8) !important; } body[class*="rootpage-Page1"] a { color: lightblue; }
解决CSS扩展{{#css}}标签显示的问题
你看到标签直接显示,说明CSS扩展要么没装对,要么没启用成功,按下面步骤排查:
- 确认扩展安装正确:下载和你的MediaWiki版本匹配的CSS扩展,解压到
extensions/CSS目录里 - 启用扩展:在
LocalSettings.php里添加两行代码:wfLoadExtension( 'CSS' ); $wgEnableParserFunctions = true; // CSS扩展依赖解析器函数,必须开 - 清缓存:去
Special:Version页面,点击底部的「Purge the server cache」按钮,刷新页面再看
如果还是不行,建议换用更稳定的TemplateStyles扩展(官方推荐替代旧CSS扩展的工具),步骤如下:
- 安装TemplateStyles:下载对应版本的扩展,放到
extensions/TemplateStyles目录,然后在LocalSettings.php加:wfLoadExtension( 'TemplateStyles' ); - 创建样式文件:在MediaWiki命名空间下建
MediaWiki:Page1Styles.css,把你的样式写进去(不用加.rootpage前缀了,因为是针对调用页面生效):body { background-image: url("..."); background-color: black; color: white; } .gallerytextwrapper { background-color: rgba(40,40,40,0.8) !important; } a { color: lightblue; } - 创建调用模板:建
Template:Page1Styles,内容只有一行:<templatestyles src="Page1Styles.css" /> - 在目标页面调用:在Page1或它的子页面里加
{{Page1Styles}},样式就会自动生效,不会显示标签。
自动给特定页面加载样式表的进阶方法
如果你不想手动在每个页面加模板调用,可以用MediaWiki的钩子自动加载。在LocalSettings.php里加这段代码:
$wgHooks['BeforePageDisplay'][] = function( $out, $skin ) { $currentTitle = $out->getTitle(); $targetTitle = Title::newFromText( 'Page1' ); // 匹配Page1本身和它的所有子页面 if ( $currentTitle->equals( $targetTitle ) || $currentTitle->isSubpageOf( $targetTitle ) ) { $out->addStyle( 'MediaWiki:Page1Styles.css' ); } return true; };
这样只要访问Page1或它的子页面,系统就会自动加载对应的样式表,完全不用手动操作。
内容的提问来源于stack exchange,提问作者Jeremy Dicaire
相关产品推荐
相关产品推荐

