本帮助通过问答的形式对Navbox的使用进行解读。
Navbox是使用一系列模板与模块生成的内容框。这些模板与模块包括但不限于:
Navbox能够将多个页面链接归纳、整理、排列后呈现给读者,具有导航的作用,因此得名Navigation Box。
跟{{Navbox}}相比,Module:Nav具有一些优势:
evenodd
参数无法正常工作,而Module:Nav修复了这一问题listn
参数的跳跃不会造成任何影响因此,本帮助的示例代码将全部使用Module:Nav。
不一定。善书不择笔,Navbox只是搭建导航模板的一种通用的解决方案;如果存在比Navbox更合适的搭建方式,可以大胆使用。
一、最重要的是缩进!缩进可以清晰地体现出不同子导航框的级联关系,以及内容之间的排列关系。
【例1 子导航框不缩进】 {{#invoke:Nav|box |name = Navbox |title = 标题 |list1 = {{#invoke:Nav|subgroup |list1 = … |list2 = {{#invoke:Nav|subgroup |group1 = 组一 |list1 = … }} }} }} 【例2 内容行不换行不缩进】 |list1 = [[A1]]{{w}}[[B2]]{{w}}[[C3]]{{w}}[[D4]]{{w}}[[E5]]{{w}}[[F6]]{{w}}[[G7]]{{w}}[[H8]]{{w}}[[I9]]{{w}}[[J10]] 【例3 各式各样的二级缩进】 <!-- 8个空格 --> |name = Navbox <!-- 2个制表符 --> |title = 标题 <!-- 1个制表符+4个空格 --> <!-- 这并非耸人听闻,你时不时就能在一些Navbox的代码中遇到这种混合缩进 --> |state = mw-collapsed |
|list1 = [[A1]]{{w}}<!-- -->[[B2]]{{w}}<!-- -->[[C3]]{{w}}<!-- -->[[D4]]{{w}}<!-- -->[[E5]]{{w}}<!-- -->[[F6]]{{w}}<!-- -->[[G7]]{{w}}<!-- -->[[H8]]{{w}}<!-- -->[[I9]]{{w}}<!-- -->[[J10]] |
二、把重复使用且复杂的代码纳入{{Template Repeat}}或{{ptl}},或者封装成一个独立的模板,以便保持Navbox本体代码清晰且简洁。
| |||
{{ptl|define=icon|tl=<nowiki><div style="display:inline-flex;flex-direction:column;align-items:center;margin:7px 5px 5px">[[File:{{{1}}}|50px]]<small style="width:75px;text-align:center">{{{1}}}</small></div></nowiki>}} {{#invoke:Nav|box |group1 = 图标列表 |list1 = {{ptl|use=icon|Commons-emblem-success.svg}}<!-- -->{{ptl|use=icon|Commons-emblem-notice.svg}}<!-- -->{{ptl|use=icon|Commons-emblem-hand.svg}}<!-- -->{{ptl|use=icon|Commons-emblem-disambig-notice.svg}} }} |
三、注意参数的顺序。Navbox的参数明显可以分为功能相近的多组,避免将不同组的参数混搭在一起,从而提升代码的可读性。
四、避免Navbox过于庞杂。越是大型的代码越难维护,加以萌娘百科的共笔性质,不同用户对代码风格可能有不同的理解。
一、运用一些基本的设计知识。例如:
使用颜色:
对比度比率:
字 1.25、
字 6.8、
字 15.24
|
使用颜色:
对比度比率:
字 5.7、
字 9.34、
字 12.35、
字 15.11
|
|
二、避免跌宕起伏的侧栏加大阅读难度。这可能是级联关系过于复杂,或者侧标题栏的宽度不一样导致的。
如有必要,可以使用{{Plate}}与{{Plate2}}在行内进一步分类,并添加 |groupstyle = box-sizing: content-box; width: ×em;
参数对齐侧标题栏(其中
|liststyle = width: auto;×em
是期望的每行字数)。
|
| |||||||||||||||||||||||||||||||||||||||||||
{{#invoke:Nav|box |name = Navbox |title = 标题 |group1 = 角色 |list1 = {{#invoke:Nav|box|subgroup |group1 = 势力一 |list1 = {{#invoke:Nav|box|subgroup |group1 = 很长的团体名 |list1 = … |group2 = 特别长的<br class="nomobile" />团体名称 |list2 = … |group3 = 更多的团体 |list3 = … }} |group2 = 势力二 |list2 = {{#invoke:Nav|box|subgroup |groupstyle = box-sizing: content-box; width: 6em; |liststyle = width: auto; |evenodd = swap |group2 = 团体一 |list2 = … |group3 = 团体二 |list3 = … }} |group3 = 很长的<br class="nomobile" />势力名称 |list3 = {{#invoke:Nav|box|subgroup |groupstyle = box-sizing: content-box; width: 6em; |liststyle = width: auto; |evenodd = swap |group1 = 官方机构 |list1 = … {{plate|<small>这个机构下面还有部门</small>}} … {{plate|部门二}} … |group2 = 隐秘阵线 |list2 = … }} |group4 = 小势力 |list4 = … }} |group3 = 音乐 |list3 = {{#invoke:Nav|box|subgroup |groupstyle = box-sizing: content-box; width: 4em; |liststyle = width: auto; |group1 = OP |list1 = … |group2 = ED |list2 = … }} }} |
三、避免Navbox过于庞杂。越是庞杂的Navbox越难整理、清洁。
四、加入艺术创意。
一、从视觉效果来看:child和subgroup的唯一区别在于,child的左侧的组标题更宽一些,而subgroup偏窄。
二、从原始HTML来看:child和subgroup除了 padding
样式不同外(即上面提到的宽度不同),没有其他任何不同之处。
甚至child的类也是 navbox-subgroup
。
三、从设计目的来看:child主要用在一个独立、完整的Navbox身上,通过去掉它的边框,使得它能够嵌入到另一个Navbox里面;
而subgroup是Navbox的组成部分,一般不独立使用。
因此,在搭建Navbox的过程中,不建议不加区分地混用二者。
|
可以通过一个参数来控制Navbox的样态。
当用户给模板的这个参数传入 child
时,模板会给Module:Nav传入 |child
,此时Navbox即可嵌入到其他Navbox里。
|navbar = plain
{{{1}}} 控制Navbox的样态¶
| |||||
---|---|---|---|---|---|
| |||||
{{ptl|define=Navbox|tl=<nowiki> {{#invoke:Nav|box |{{#ifeq:{{{1}}}|child|child|}} |name = Navbox |title = 标题 |navbar = {{#ifeq:{{{1}}}|child|plain|}} }}</nowiki> }} {{ptl|use=Navbox}} <br/> {{ptl|use=Navbox|child}} |
可以通过一个参数来控制Navbox的展开与折叠。
当用户给模板的这个参数传入 collapsed
时,模板会给Module:Nav传入 |state = mw-collapsed
,此时Navbox默认折叠;
否则,Navbox默认展开。
{{{1}}} 控制Navbox的展开与折叠¶
| ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||
{{ptl|define=Navbox|tl=<nowiki> {{#invoke:Nav|box |name = Navbox |title = 标题 |state = {{#ifeq:{{{1}}}|collapsed|mw-collapsed}} |list1 = <center>…</center> |list2 = {{#invoke:Nav|box|child |name = Navbox |title = 子导航框也可以按此方法控制 |navbar = plain |state = {{#ifeq:{{{1}}}|collapsed|mw-collapsed}} |list1 = <center>…</center> }} }}</nowiki> }} {{ptl|use=Navbox}} <br/> {{ptl|use=Navbox|collapsed}} |
可以通过collapsible groups配合一个参数来仅展开某一子导航框。
{{{1}}} 仅展开某一子导航框¶
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 ,子导航框全部展开
1 = 子导航框一 ,仅展开第一个子导航框
1 = 子导航框二 ,仅展开第二个子导航框
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
{{ptl|define=Navbox|tl=<nowiki> {{#invoke:Nav|box|collapsible groups |name = Navbox |title = 标题 |selected = {{{1|}}} |group1 = 子导航框一 |abbr1 = {{#if:{{{1|}}}|子导航框一}} |list1 = <center>…</center> |group2 = 子导航框二 |abbr2 = {{#if:{{{1|}}}|子导航框二}} |list2 = <center>…</center> }}</nowiki> }} <center>不传入 <code>1</code>,子导航框全部展开</center> {{ptl|use=Navbox}} <center>传入 <code>1 = 子导航框一</code> ,仅展开第一个子导航框</center> {{ptl|use=Navbox|子导航框一}} <center>传入 <code>1 = 子导航框二</code> ,仅展开第二个子导航框</center> {{ptl|use=Navbox|子导航框二}} <center>传入其他值,子导航框全部折叠</center> {{ptl|use=Navbox|collapsed}} |
在 title
参数里面使用Widget:LargeNavbox,并给Navbox添加 |class = largeNavbox
参数。
对于较大的、拥有3个以上可折叠子导航框的Navbox,“全隐 / 全显”按钮可以帮助读者大幅提高阅览效率。
{{#invoke:Nav|box |name = Navbox |title = 标题{{#Widget:LargeNavbox}} |class = largeNavbox |list1 = {{#invoke:Nav|box|child |title = 能折叠的子导航框·一 |list1 = <center>大段内容</center> }} |list2 = {{#invoke:Nav|box|child |title = 能折叠的子导航框·二 |list1 = <center>大段内容</center> }} |list3 = {{#invoke:Nav|box|child |title = 能折叠的子导航框·三 |list1 = <center>大段内容</center> }} }} |
给 titlestyle
参数添加 -webkit-text-fill-color
属性即可。
-webkit-text-fill-color 属性¶
| ||||||
---|---|---|---|---|---|---|
| ||||||
{{#invoke:Nav|box |name = Navbox |title = {{color|;-webkit-text-fill-color:white|标题}} |titlestyle = background: #000000; color: #D8FA00; -webkit-text-fill-color: #D8FA00; }} <br/> {{#invoke:Nav|box |name = Navbox |title = {{color|white|标题}} |titlestyle = background: #000000; color: #D8FA00; }} |
萌娘百科的全站样式表给 <a>
设置了自己的 color
属性,因此 titlestyle
里的 color
无法作用到它的身上。
而 -webkit-text-fill-color
具有更高的优先级,能够覆盖 <a>
自己的样式。
使用模板样式表。不推荐使用{{VteStyle}},因为它对Module:Nav不起作用,并且性能开销较大。
使用{{Image-clip}}。{{Image-clip}}在避免水印和确保链入方面进行了专门设计。
| ||||||
{{#invoke:Nav|box |name = Navbox |title = {{Image-clip|img=Minecraft.png|link=Minecraft|width=180|宽=|img-css=margin:7px 0;}} }} <br/> {{#invoke:Nav|box |name = Navbox |title = [[File:Minecraft.png|180px|link=Minecraft]] }} |
img-css
参数调整上下边距,优化视觉效果
检查并去除Navbox的源代码与 <includeonly>
、 </includeonly>
等标签之间的空行。
【例1】 <noinclude>{{Doc}}</noinclude><!-- 不要在这里换行 -->{{#invoke:Nav|box 【例2】 <includeonly><!-- 不要在这里换行 -->{{#invoke:Nav|box 【例3】 }}<!-- 不要在这里换行 --></includeonly> |
出现奇偶样式错位的情况时,可以按以下流程调整:
oddstyle
和 evenstyle
参数是否一致,并去除所有 listnstyle
参数中涉及背景颜色的部分。|evenodd = swap
,则加入该参数;反之,则去除该参数。
| |||||||||||||||||
{{#invoke:Nav|box |name = Navbox |title = 标题 |group1 = 组壹 |list1 = {{color|#006cd0|(奇数行)}} |group2 = 组贰 |list2 = {{#invoke:Nav|box|subgroup <!-- 需要在这里加入 |evenodd = swap --> |group1 = 子组一 |list1 = {{color|#dd3333|(偶数行)}} |group2 = 子组二 |list2 = {{color|#006cd0|(奇数行)}} }} |group3 = 组叁 |list3 = {{color|#dd3333|(偶数行)}} }} |
另一种节省人力的办法是让奇行样式与偶行样式相同。然而,在Navbox比较复杂时,这种办法会将成本转嫁给读者。
一、检查Navbox是否存在已过审版本。若不存在,等待过审后即可解决。
二、检查模板展开长度是否超过限制,并进行下面任意一个工作:
|