使用說明:Navbox問與答

萌娘百科,萬物皆可萌的百科全書!轉載請標註來源頁面的網頁連結,並聲明引自萌娘百科。內容不可商用。
貢獻者:
Commons-emblem-notice.svg
這個頁面「Help:Navbox問與答」是萌娘百科的幫助文檔
  • 本文用於介紹萌娘百科中一些特定功能的操作方法;
  • 本文僅是一篇論述,不屬於方針或指引。如果本指南與相關方針或指引發生衝突或存在不一致的情況,請以方針或指引的條文為準。

本幫助通過問答的形式對Navbox的使用進行解讀。

什麼是Navbox?

Navbox是使用一系列模板與模塊生成的內容框。這些模板與模塊包括但不限於:

Navbox能夠將多個頁面連結歸納、整理、排列後呈現給讀者,具有導航的作用,因此得名Navigation Box。

註記:

  1. Module:Mininav的特點是展開長度小;{{大家族}}的特點是易於上手。本幫助不涉及這兩個模塊與模板。

為什麼不推薦使用{{Navbox}}?

跟{{Navbox}}相比,Module:Nav具有一些優勢:

  • Module:Nav生成的Navbox展開長度更小
  • {{Navbox}}的 evenodd 參數無法正常工作,而Module:Nav修復了這一問題
  • 在Module:Nav中, listn 參數的跳躍不會造成任何影響

因此,本幫助的示例代碼將全部使用Module:Nav。

導航模板一定要使用Navbox嗎?

不一定。善書不擇筆,Navbox只是搭建導航模板的一種通用的解決方案;如果存在比Navbox更合適的搭建方式,可以大膽使用。

註記:

  1. 例如{{ANIPLEX週六深夜動畫檔}}與{{萌元素週期表}}就是使用純表格搭建的。

如何保持Navbox代碼的整潔?

一、最重要的是縮進!縮進可以清晰地體現出不同子導航框的級聯關係,以及內容之間的排列關係。

合併SVG 反例:災難性的縮進
Red Cross Wrong Mark(Modified).svg
  1. 【例1 子導航框不縮進】
  2. {{#invoke:Nav|box
  3. |name = Navbox
  4. |title = 標題
  5. |list1 = {{#invoke:Nav|subgroup
  6. |list1 =
  7. |list2 = {{#invoke:Nav|subgroup
  8. |group1 = 組一
  9. |list1 =
  10. }}
  11. }}
  12. }}
  13. 【例2 內容行不換行不縮進】
  14. |list1 = [[A1]]{{w}}[[B2]]{{w}}[[C3]]{{w}}[[D4]]{{w}}[[E5]]{{w}}[[F6]]{{w}}[[G7]]{{w}}[[H8]]{{w}}[[I9]]{{w}}[[J10]]
  15. 【例3 各式各樣的二級縮進】
  16. <!-- 8個空格 -->
  17. |name = Navbox
  18. <!-- 2個製表符 -->
  19. |title = 標題
  20. <!-- 1個製表符+4個空格 -->
  21. <!-- 這並非聳人聽聞,你時不時就能在一些Navbox的代碼中遇到這種混合縮進 -->
  22. |state = mw-collapsed
合併SVG 示例:內容行換行並縮進的最佳實踐
  1. |list1 = [[A1]]{{w}}<!--
  2. -->[[B2]]{{w}}<!--
  3. -->[[C3]]{{w}}<!--
  4. -->[[D4]]{{w}}<!--
  5. -->[[E5]]{{w}}<!--
  6. -->[[F6]]{{w}}<!--
  7. -->[[G7]]{{w}}<!--
  8. -->[[H8]]{{w}}<!--
  9. -->[[I9]]{{w}}<!--
  10. -->[[J10]]

二、把重複使用且複雜的代碼納入{{Template Repeat}}或{{ptl}},或者封裝成一個獨立的模板,以便保持Navbox本體代碼清晰且簡潔。

合併SVG 示例:使用{{ptl}}簡化代碼
  1. {{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>}}
  2. {{#invoke:Nav|box
  3. |group1 = 圖標列表
  4. |list1 = {{ptl|use=icon|Commons-emblem-success.svg}}<!--
  5. -->{{ptl|use=icon|Commons-emblem-notice.svg}}<!--
  6. -->{{ptl|use=icon|Commons-emblem-hand.svg}}<!--
  7. -->{{ptl|use=icon|Commons-emblem-disambig-notice.svg}}
  8. }}

三、注意參數的順序。Navbox的參數明顯可以分為功能相近的多組,避免將不同組的參數混搭在一起,從而提升代碼的可讀性。

四、避免Navbox過於龐雜。越是大型的代碼越難維護,加以萌娘百科的共筆性質,不同用戶對代碼風格可能有不同的理解。

註記:

  1. 使用{{ptl}}會導致模板展開長度增大,增大幅度取決於納入的代碼的大小以及使用次數。

如何保持Navbox外觀的美觀?

一、運用一些基本的設計知識。例如:

  • 優化顏色搭配。
合併SVG 反例:可能需要對讀者視力水平與審美水平下降負責的Navbox
使用顏色:
對比度比率:
 1.25
 6.8
 15.24
合併SVG 示例:有助於讀者保持眼健康並提升審美趣味的Navbox
使用顏色:
對比度比率:
 5.7
 9.34
 12.35
 15.11
(此Navbox來自{{hct}}的文檔)
  • 突出不同元素的主次關係。
合併SVG 示例:使用{{ps}}突出主次關係

二、避免跌宕起伏的側欄加大閱讀難度。這可能是級聯關係過於複雜,或者側標題欄的寬度不一樣導致的。

如有必要,可以使用{{Plate}}與{{Plate2}}在行內進一步分類,並添加 |groupstyle = box-sizing: content-box; width: ×em;
|liststyle = width: auto;
參數對齊側標題欄(其中 ×em 是期望的每行字數)。

合併SVG 反例:跌宕起伏的側欄
合併SVG 示例:調整過後的側欄
  1. {{#invoke:Nav|box
  2. |name = Navbox
  3. |title = 標題
  4. |group1 = 角色
  5. |list1 = {{#invoke:Nav|box|subgroup
  6. |group1 = 勢力一
  7. |list1 = {{#invoke:Nav|box|subgroup
  8. |group1 = 很長的團體名
  9. |list1 =
  10. |group2 = 特別長的<br class="nomobile" />團體名稱
  11. |list2 =
  12. |group3 = 更多的團體
  13. |list3 =
  14. }}
  15. |group2 = 勢力二
  16. |list2 = {{#invoke:Nav|box|subgroup
  17. |groupstyle = box-sizing: content-box; width: 6em;
  18. |liststyle = width: auto;
  19. |evenodd = swap
  20. |group2 = 團體一
  21. |list2 =
  22. |group3 = 團體二
  23. |list3 =
  24. }}
  25. |group3 = 很長的<br class="nomobile" />勢力名稱
  26. |list3 = {{#invoke:Nav|box|subgroup
  27. |groupstyle = box-sizing: content-box; width: 6em;
  28. |liststyle = width: auto;
  29. |evenodd = swap
  30. |group1 = 官方機構
  31. |list1 = {{plate|<small>這個機構下面還有部門</small>}} {{plate|部門二}}
  32. |group2 = 隱秘陣線
  33. |list2 =
  34. }}
  35. |group4 = 小勢力
  36. |list4 =
  37. }}
  38. |group3 = 音樂
  39. |list3 = {{#invoke:Nav|box|subgroup
  40. |groupstyle = box-sizing: content-box; width: 4em;
  41. |liststyle = width: auto;
  42. |group1 = OP
  43. |list1 =
  44. |group2 = ED
  45. |list2 =
  46. }}
  47. }}

三、避免Navbox過於龐雜。越是龐雜的Navbox越難整理、清潔。

四、加入藝術創意。

註記:

  1. 藝術創意並非必要的,切忌捨本逐末。

child和subgroup有什麼區別?

一、從視覺效果來看:child和subgroup的唯一區別在於,child的左側的組標題更寬一些,而subgroup偏窄。

二、從原始HTML來看:child和subgroup除了 padding 樣式不同外(即上面提到的寬度不同),沒有其他任何不同之處。

甚至child的類也是 navbox-subgroup

三、從設計目的來看:child主要用在一個獨立、完整的Navbox身上,通過去掉它的邊框,使得它能夠嵌入到另一個Navbox裡面;

而subgroup是Navbox的組成部分,一般不獨立使用。

因此,在搭建Navbox的過程中,不建議不加區分地混用二者。

合併SVG 示例:child和subgroup

註記:

  1. 在實踐中,也有為了代碼簡潔,而把一些複雜的subgroup作為一個模板獨立出來,再嵌入回Navbox的情況。

如何讓Navbox既可獨立使用,又可嵌入其他Navbox?

可以通過一個參數來控制Navbox的樣態。

當用戶給模板的這個參數傳入 child 時,模板會給Module:Nav傳入 |child
|navbar = plain
,此時Navbox即可嵌入到其他Navbox裡。

合併SVG 示例:利用參數 {{{1}}} 控制Navbox的樣態

  1. {{ptl|define=Navbox|tl=<nowiki>
  2. {{#invoke:Nav|box
  3. |{{#ifeq:{{{1}}}|child|child|}}
  4. |name = Navbox
  5. |title = 標題
  6. |navbar = {{#ifeq:{{{1}}}|child|plain|}}
  7. }}</nowiki>
  8. }}
  9. {{ptl|use=Navbox}}
  10. <br/>
  11. {{ptl|use=Navbox|child}}

如何讓Navbox既可默認展開,又可默認摺疊?

可以通過一個參數來控制Navbox的展開與摺疊。

當用戶給模板的這個參數傳入 collapsed 時,模板會給Module:Nav傳入 |state = mw-collapsed ,此時Navbox默認摺疊;

否則,Navbox默認展開。

合併SVG 示例:利用參數 {{{1}}} 控制Navbox的展開與摺疊

  1. {{ptl|define=Navbox|tl=<nowiki>
  2. {{#invoke:Nav|box
  3. |name = Navbox
  4. |title = 標題
  5. |state = {{#ifeq:{{{1}}}|collapsed|mw-collapsed}}
  6. |list1 = <center>…</center>
  7. |list2 = {{#invoke:Nav|box|child
  8. |name = Navbox
  9. |title = 子導航框也可以按此方法控制
  10. |navbar = plain
  11. |state = {{#ifeq:{{{1}}}|collapsed|mw-collapsed}}
  12. |list1 = <center>…</center>
  13. }}
  14. }}</nowiki>
  15. }}
  16. {{ptl|use=Navbox}}
  17. <br/>
  18. {{ptl|use=Navbox|collapsed}}

如何默認只展開某一子導航框,其餘全部摺疊?

可以通過collapsible groups配合一個參數來僅展開某一子導航框。

合併SVG 示例:利用collapsible groups配合參數 {{{1}}} 僅展開某一子導航框
不傳入 1,子導航框全部展開


傳入 1 = 子導航框一 ,僅展開第一個子導航框


傳入 1 = 子導航框二 ,僅展開第二個子導航框


傳入其他值,子導航框全部摺疊
  1. {{ptl|define=Navbox|tl=<nowiki>
  2. {{#invoke:Nav|box|collapsible groups
  3. |name = Navbox
  4. |title = 標題
  5. |selected = {{{1|}}}
  6. |group1 = 子導航框一
  7. |abbr1 = {{#if:{{{1|}}}|子導航框一}}
  8. |list1 = <center>…</center>
  9. |group2 = 子導航框二
  10. |abbr2 = {{#if:{{{1|}}}|子導航框二}}
  11. |list2 = <center>…</center>
  12. }}</nowiki>
  13. }}
  14. <center>不傳入 <code>1</code>,子導航框全部展開</center>
  15. {{ptl|use=Navbox}}
  16. <center>傳入 <code>1 = 子導航框一</code> ,僅展開第一個子導航框</center>
  17. {{ptl|use=Navbox|子導航框一}}
  18. <center>傳入 <code>1 = 子導航框二</code> ,僅展開第二個子導航框</center>
  19. {{ptl|use=Navbox|子導航框二}}
  20. <center>傳入其他值,子導航框全部摺疊</center>
  21. {{ptl|use=Navbox|collapsed}}

如何添加「全隱 / 全顯」按鈕?

title 參數裡面使用Widget:LargeNavbox,並給Navbox添加 |class = largeNavbox 參數。

對於較大的、擁有3個以上可摺疊子導航框的Navbox,「全隱 / 全顯」按鈕可以幫助讀者大幅提高閱覽效率。

合併SVG 示例:使用Widget:LargeNavbox
  1. {{#invoke:Nav|box
  2. |name = Navbox
  3. |title = 標題{{#Widget:LargeNavbox}}
  4. |class = largeNavbox
  5. |list1 = {{#invoke:Nav|box|child
  6. |title = 能摺疊的子導航框·一
  7. |list1 = <center>大段內容</center>
  8. }}
  9. |list2 = {{#invoke:Nav|box|child
  10. |title = 能摺疊的子導航框·二
  11. |list1 = <center>大段內容</center>
  12. }}
  13. |list3 = {{#invoke:Nav|box|child
  14. |title = 能摺疊的子導航框·三
  15. |list1 = <center>大段內容</center>
  16. }}
  17. }}

如何更改「摺疊」按鈕的顏色?

titlestyle 參數添加 -webkit-text-fill-color 屬性即可。

合併SVG 示例:添加與不添加 -webkit-text-fill-color 屬性

  1. {{#invoke:Nav|box
  2. |name = Navbox
  3. |title = {{color|;-webkit-text-fill-color:white|標題}}
  4. |titlestyle = background: #000000; color: #D8FA00; -webkit-text-fill-color: #D8FA00;
  5. }}
  6. <br/>
  7. {{#invoke:Nav|box
  8. |name = Navbox
  9. |title = {{color|white|標題}}
  10. |titlestyle = background: #000000; color: #D8FA00;
  11. }}

萌娘百科的全站樣式表給 <a> 設置了自己的 color 屬性,因此 titlestyle 裡的 color 無法作用到它的身上。

-webkit-text-fill-color 具有更高的優先級,能夠覆蓋 <a> 自己的樣式。

如何更改「查論編」按鈕?

使用模板樣式表。不推薦使用{{VteStyle}},因為它對Module:Nav不起作用,並且性能開銷較大。

標題插入圖片時帶有水印,如何解決?

使用{{Image-clip}}。{{Image-clip}}在避免水印和確保鏈入方面進行了專門設計。

合併SVG 示例:使用{{Image-clip}}避免水印與直接插入圖片

  1. {{#invoke:Nav|box
  2. |name = Navbox
  3. |title = {{Image-clip|img=Minecraft.png|link=Minecraft|width=180|寬=|img-css=margin:7px 0;}}
  4. }}
  5. <br/>
  6. {{#invoke:Nav|box
  7. |name = Navbox
  8. |title = [[File:Minecraft.png|180px|link=Minecraft]]
  9. }}
註記:

  1. 使用{{Image-clip}}避免水印還有兩個好處:
    • 加載的圖片是原圖大小,顯示更加清晰
    • 可以利用 img-css 參數調整上下邊距,優化視覺效果
  2. 如果圖片有矢量圖(SVG)版本,也可以直接插入矢量圖,這時圖片不會帶有水印。

多個Navbox之間有間隙,如何解決?

檢查並去除Navbox的原始碼與 <includeonly></includeonly> 等標籤之間的空行。

合併SVG 示例:避免Navbox首尾出現空行
  1. 【例1
  2. <noinclude>{{Doc}}</noinclude><!-- 不要在這裡換行 -->{{#invoke:Nav|box
  3. 【例2
  4. <includeonly><!-- 不要在這裡換行 -->{{#invoke:Nav|box
  5. 【例3
  6. }}<!-- 不要在這裡換行 --></includeonly>
註記:

  1. 在Navbox中使用{{背景圖片}}會不可避免地在末尾添加一個空行。

Navbox的奇偶樣式錯位,如何解決?

出現奇偶樣式錯位的情況時,可以按以下流程調整:

  1. 檢查不同地方的 oddstyleevenstyle 參數是否一致,並去除所有 listnstyle 參數中涉及背景顏色的部分。
  2. 找到首個奇偶樣式錯位的點位(一般出現在兩個子導航框的交界處)。
  3. 對於該點位下方的那個子導航框,反轉其奇偶樣式。
    具體來說:如果那個子導航框沒有設置 |evenodd = swap ,則加入該參數;反之,則去除該參數。
  4. 預覽調整後的效果,並回到第2步,直到所有奇偶樣式顯示正常。
合併SVG 示例:調整一個簡單Navbox的奇偶樣式
  1. {{#invoke:Nav|box
  2. |name = Navbox
  3. |title = 標題
  4. |group1 = 組壹
  5. |list1 = {{color|#006cd0|(奇數行)}}
  6. |group2 = 組貳
  7. |list2 = {{#invoke:Nav|box|subgroup
  8. <!-- 需要在這裡加入 |evenodd = swap -->
  9. |group1 = 子組一
  10. |list1 = {{color|#dd3333|(偶數行)}}
  11. |group2 = 子組二
  12. |list2 = {{color|#006cd0|(奇數行)}}
  13. }}
  14. |group3 = 組叄
  15. |list3 = {{color|#dd3333|(偶數行)}}
  16. }}

另一種節省人力的辦法是讓奇行樣式與偶行樣式相同。然而,在Navbox比較複雜時,這種辦法會將成本轉嫁給讀者。

註記:

  1. User:Chi_ZJ2製作了一個半自動工具NavEO,可以自動執行上述調整過程。

嵌入Navbox後只有一行連結,如何解決?

一、檢查Navbox是否存在已過審版本。若不存在,等待過審後即可解決。

二、檢查模板展開長度是否超過限制,並進行下面任意一個工作:

  • 使用{{TemplateAsyncLoad}}異步加載Navbox。
  • 將Navbox拆分成多個更小的Navbox,減小模板展開長度。

還有其他問題…

毋需顧慮,歡迎在討論版本幫助的討論頁提問。


此頁面最後編輯於 2025年4月6日 (週日) 04:22。
搜尋萌娘百科 (按"/"快速搜尋)
有新的未讀公告

阅读更多:Help:Navbox問與答(http://mzh.moegirl.tw/Help%3ANavbox%E5%95%8F%E8%88%87%E7%AD%94 )
本文引自萌娘百科(http://mzh.moegirl.tw ),文字内容默认使用《知识共享 署名-非商业性使用-相同方式共享 3.0 中国大陆》协议。