Jump to content

Help:User style

From Wikipedia, the free encyclopedia

The user can customize fonts, colors, positions of links in the margins, and many other things! This is done through custom Cascading Style Sheets stored in subpages of the user's "User" page.

E.g. To create your own CSS modifications for the skin you are presently using, create a page at Special:MyPage/skin.css containing the CSS you want to use (to apply your changes regardless which skin you are using, put them in Special:MyPage/common.css instead). For how to hide particular messages, see WP:CSSHIDE.

General

[edit]

Cascading Style Sheets

[edit]

For each user-definable style, a skin is first selected, along with a corresponding Cascading Style Sheet (CSS). For each skin, the user can make various choices regarding fonts, colors, positions of links in the margin, etc. CSS is specified with reference to selectors [1]: HTML elements, classes, and ID's specified in the HTML code. Accordingly, what the possibilities are for each skin can be seen by looking at the HTML source code of a page, in particular looking at these classes and ID's: the more there are, the more versatility there is.

There is CSS in the MediaWiki software itself, and Wikipedia overrides this using the following pages:

Site-wide CSS is in MediaWiki:Common.css

You can override these for yourself using user styles. To make changes that apply regardless of your current skin, change your common.css. To make changes that affect your current skin, change your skin.css. To make changes that affect all Wikimedia projects, you can log in to Meta and change your global.css.

Enter some CSS into that page. Preview of CSS works in a special way: it allows viewing of the margins of the page (not the contents) on the basis of the style info in the page, provided that the skin used is the skin for which the page applies. This has limitations. E.g., one can preview how links in the margin will look, but these may not be of all the types one would want to check. After saving, while still on the page or while on any other page, do a forced reload (shift-reload/ctrl-f5) to get the new files.


For the user CSS to be automatically loaded, make sure the $wgAllowUserCss variable is set to true on config. Otherwise, it is possible to load it by JavaScript.

To import CSS from a user subpage by JavaScript, use the mw.loader.load command in your common.js:

 mw.loader.load( '/w/index.php?title=User:Example/stylesheet.css&action=raw&ctype=text/css', 'text/css' );

JavaScript & user scripts

[edit]

On Wikipedia, JavaScript can be used to add new features such as add find/replace textboxes or give advanced rollback options. There are scripts to customise everything, from default font style to custom buttons.

Many script pages can be imported and used. Different scripts can also be used in conjunction with each other to accomplish several tasks at once. Some scripts are available as "Gadgets", which means they can be installed by simply ticking a box in the "Gadgets" tab of Special:Preferences.

In order to add pre-existing scripts to your JavaScript page, add {{subst:js|name of script}} to the file. More detailed instructions can be found at the Wikipedia:User scripts/Guide.

Rendering

[edit]

The HTML source of a page contains lines like

 <script src="/w/wiki.phtml?title=User:your-username-here/standard.js&amp;action=raw&amp;ctype=text/javascript">
 </script>
 @import "/style/wikistandard.css";
 @import "/w/wiki.phtml?title=User:your-username-here/standard.css&action=raw&ctype=text/css";

for the project-wide CSS for the particular skin (in this case here on Wikipedia referring to //en.wiki.x.io/style/wikistandard.css ) and the personal JS and CSS for a particular skin.

Thus the server provides HTML referring to the CSS and JS files, but it does not do any interpretation of their content. The interpretation is done by the browser, depending on its capabilities and settings.

CSS

[edit]

CSS in user subpages versus CSS in a local file

[edit]

In addition to the above, or alternatively, a local CSS can be set on the browser. If one uses multiple browsers, each can be set to a different CSS. Each applies to the whole World Wide Web, not just a MediaWiki project (and does not depend on being logged in). However, a setting only affects other webpages if they use the same CSS selector; e.g. a setting for the selector a.extiw affects fewer pages on the web than one for h2 (but it affects at least all MediaWiki projects, not just one).

For lines of CSS which should be different on different MediaWiki projects, e.g. for a different background color for easy distinction, clearly the local CSS cannot be used; at least these lines should be put in the user subpages.

Some computers, e.g. in internet cafes, mobile devices/tablets, do not allow users to set preferences for the browser. In that case the user subpages allow the setting of a user style anyway.

When the browser has been set to the option to ignore the font size specified in the webpage or external CSS, CSS lines regarding font size have to be put in the local CSS.

CSS selectors

[edit]

The CSS selectors, expressed in terms of elements, classes and id's, relevant for the style of the page body include the following. As far as possible, examples are given, which show the result for the current style settings:

  • :link — links — example: Help:Index ; default: help:index (See a vs :link)
  • :link:link
  • :link:visited
  • :link#contentTop
  • :link.external — http://example ; default: http://example
  • :link.extiw – interwiki link in page body – ; default: en:example
  • :link.image – link from full image to image description page
  • :link.internal – link to file itself (Media:), and links from thumbnail and magnifying glass icon to image description page (note that color and font size specified for a.internal are only applicable in the first case)
  • :link.new example ; default: example
  • .allpagesredirectabc – redirects in Special:Allpages and Special:Prefixindex
  • body.ns-0, ..., body.ns-15 (namespaces)
  • div#bodyContent
  • div#column-content
  • div#editsection
  • div#globalWrapper
  • div#tocindent
  • div.tocline
  • h1.firstHeading
  • h2
  • h3
  • img.tex TeX image
  • smallexample
  • table.toc

Normal internal links are not in class internal (they used to be, and still are on sites that use an older version of the software, e.g. [2]); they can be styled referring to :link and :link:visited, in general, after which styling of :link.extiw etc. can provide for exceptions to this general style for links.

For interlanguage links:

  • #p-lang a

One may also have the style depend on the value of an attribute, e.g. with the selectors:

  • :link[title ="User:''username''"]
  • :link[title ="''pagename''"]
  • :link[href ="''full url ''"]

to color-code or highlight particular users (including oneself) and/or links to particular pages (like the bolding of watched pages on Recent Changes). This works in Opera, but not in IE. See also Help:Watching pages#CSS.

The watchlist and Recent Changes use two classes:

  • autocomment
    example
  • new (see below)

The page history has classes autocomment and:

  • user
  • minor

Thus the font specified for user applies in the page history, but not in the watchlist or Recent Changes.

Edit page

[edit]
  • Edit box: textarea#wpTextbox1
example1
  • Edit summary box: input#wpSummary
example2

Major style blocks

[edit]

See meta:Customization:Explaining_skins

Non-display

[edit]

One extreme "style" for a text is not displaying it, with

.classname {display: none}
#id {display: none}

etc.

Non-displayed links do not work (as opposed to links in a very small font).

It cannot be used to remove text in expressions for template names, parameter names, parameter values, page names in links, etc.

Style depending on a parameter or variable

[edit]

Variable class or id

[edit]

A class or id can depend on the result produced by a template or on a template parameter, e.g. class="abcdef". For one or more of the possible class names the style of that class can be defined. If the class is undefined it is ignored, so the standard style is used.

In the simplest case we have e.g. class="abc{{{1}}}" and define class abcdef. If the parameter value is "def" it applies.

If a page for general use only makes sense when styles are defined for certain classes, then these have to be specified in the page MediaWiki:Common.css, which applies for all users and all skins, as far as not overridden.

Variable HTML attribute name

[edit]

An HTML attribute name can be made variable. HTML Tidy – an outdated HTML4 library that is slated for removal – has historically removed attributes with invalid names at the server side, so the result does not depend on a browser capability to ignore invalid attribute names, and the amount of data sent is reduced. For a variable with possible value "class", see Wikipedia:HiddenStructure and en:Template:Infobox (backlinks edit).

Variable style parameter value

[edit]

Wikitext like

<span style="display:{{{3|none}}}">Wed</span>

displays "Wed" if parameter 3 is defined, but not "none", and displays nothing if parameter 3 is undefined or "none". If the value of parameter 3 is a display style other than "none", that style is applied.

Samples

[edit]

Custom styles can be placed in each user's personal CSS files, such as Special:MyPage/common.css, which each user can edit to set personal styles.

/* make the background behind the content area and the tabs a light grey */
#content, #content table
#p-cactions ul li a { background: #f5f5f5; }

/* stop background image from scrolling with content area */
body { background-attachment: fixed; }

/* replace the book in the background with something else */
body { background: Purple; }

/* changes the background of pre areas  */
pre { background: White }

/* change the logo */
#p-logo a { background: url(http://up.wiki.x.io/wikipedia/commons/9/93/Color-chars-logo.png) 35% 50% no-repeat; }

/* 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 */
html, 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; }

/* change border background of selected tabs */
#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 */
.searchButton {
    background-color: #efefef;
    border: 1px outset;
}
#searchInput { border: 1px inset; }

/* standard link colors */
a:link { color: #0645ad; }
a:visited { color: #0b0080; }
a.new:link { color: #cc2200; }
a.new:visited { color: #a55858; }
a.extiw:link { color: #3366bb; } /* links to other Wikipedias */
a.extiw:visited { color: #3366bb; }
a.external:link { color: #3366bb; } /* external links */
a.external:visited { color: #3366bb; }

/* 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; }

/* center/centre the title of each page */
.firstHeading { text-align: center; }

/* Double-redirect warning */
div.redirectMsg a.mw-redirect:after {
  content: ' &lt;double redirect&gt;';
  color: Red;
  font-style: italic;
}

/* Prevent the new CSS in "Typography Refresh" (since early 2014) from showing page titles and headings in serif font */
h1, h2 { font-family: inherit !important; }

/* Display persondata boxes in articles */
table.persondata { display:table; }

/* Get rid of tedious warnings */
#editpage-copywarn, #editpage-copywarn2, #editpage-copywarn3,
#editpage-head-copywarn, .editpage-head-copywarn,
#editnotice_BLP_editintro, .ve-ui-mwSaveDialog-license
{ display: none !important; }

/* Get rid of tedious noob boilerplate */
#category-namespace-editnotice, #footer-info-copyright, #sitesub, .edithelp,
.posteditwindowhelplinks, #footer-icons, .ve-ui-mwSaveDialog-summaryLabel
{ display: none !important; }

/* Save space in list of templates displayed at end of page when editing */
:templatesUsed ul, :templatesUsed li {display: inline; padding-right: 5px;}

/* Change all text to the font "Avenir" (except headers) (you can change the font to anything else) */
.mw-body h1, .mw-body h2 {
    font-family: "Avenir"
}

Rounded corners

[edit]
Rounded corner rules in Firefox
/* make a few corners round */
#p-cactions ul li, #p-cactions ul li a {
  border-top-left-radius: 1em;
  border-top-right-radius: 1em;
}
#content {
  border-top-left-radius: 1em;
  border-bottom-left-radius: 1em;
}
.pBody {
  border-top-right-radius: 1em;
  border-bottom-right-radius: 1em;
}
[edit]
[edit]
/*
** 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) " ) ";
  }
}

Make the user toolbar a sidebox

[edit]

Tested to work in Camino, Safari and Internet Explorer 7.

/* Transform the user toolbar into a sidebox */
#p-personal {
    position:relative;
    z-index:3;
    width: 11.6em;
}

#p-personal .pBody {
    width: 10.7em;
    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 0.8em 0.3em .5em;
}

#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 */
/* needed if not already in place */
li#pt-userpage { background: none }

See the monobook main.css for the full styles in use by default.

Fix the top bar's position while you scroll

[edit]

This style allows Vector Legacy users to keep the top bar (with the search bar and the talkpage, edit, userpage, etc. links) visible as you scroll, similar to Vector 2022:

@media screen {
    #mw-head {
        position: fixed;
        background: linear-gradient(to bottom,#fff 50%,#f6f6f6 100%);
    }
}

Fix the sidebar's position while you scroll

[edit]

In the Vector Legacy skin, the sidebar's position can be fixed easily:

/* Fix sidebar */
div#mw-panel { position: fixed;
  overflow: auto;
  top: 0px;
  bottom: 0px;
  height: 100%;
  /* Prevent content overlay when sidewards scrolling */
  background-color: #F6F6F6;
  border-right: 1px solid #A7D7F9;
}
/* Prevent sidewards scrolling in pre elements */
pre {
  overflow: auto;
  max-height: 25em;
}
This script and CSS makes the sidebar stay in the same position on the screen as you scroll

This may have undesirable side effects in Chrome; e.g., when viewing a page like the very common.css page you just edited to put this code in, the viewable content will become much shorter, and require vertical scrolling in a frame.

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. This provides the same functionality for the Monobook skin (in Mozilla). See meta:Help:User style/floating quickbar.

Monobook menus with serif fonts in the content area

[edit]

A quick-and-dirty combinaton of Monobook menus with serif fonts in the text area is found at User:Tillwe/monobook.css (in the first part). Also displays table-formatted things more or less correctly. There are some quirks and bugs (some because the CSS scheme of Wikipedia doesn't seem to be too thoughtful). Works on Netscape7/Win98 for the author.

[edit]
/******************************************************************/
/* moving catlinks to the right                                   */
/******************************************************************/

/* move the catlinks box */
#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;
}

/* format the catlinks itself */
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

[edit]
/* 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; }

Removing the "(thank)" buttons in History log

[edit]
/*Suppress "(thank)" buttons*/
.mw-thanks-thank-link { display:none; }

Hiding long instruction messages

[edit]
/* hide View-Source blurb when editing a protected page */
#mw-protectedpagetext { display: none; }

As with other CSS styles above, edit Special:MyPage/skin.css or Special:MyPage/common.css to insert the customized CSS, and then refresh the browser's cache.

Add style formatting to discussion threads

[edit]

There is an experimental style sheet to add vertical lines to the left of discussion threads and to alternate between two different background colours. See User:Isaacl/style/discussion-threads for more details and a mockup of the appearance.

Infoboxes and user style

Users can have user CSS that hides any infoboxes in their own browsers.

To hide all infoboxes, add the following to Special:MyPage/common.css (for all skins, or Special:MyPage/skin.css for just the current skin), on a line by itself:

div.mw-parser-output .infobox { display: none; }

Alternatively, you can add the following code to your common.js or into a browser user script that is executed by an extension like Greasemonkey:

$('.infobox').hide();

Be aware that although, per WP:Manual of Style/Infoboxes, all information in an infobox ideally should also be found in the main body of an article, there isn't perfect compliance with this guideline. For example, the full taxonomic hierarchy in {{Taxobox}}, and the OMIM and other medical database codes of {{Infobox disease}} are often not found in the main article content. The infobox is also often the location of the most significant, even only, image in an article. There is a userscript which removes infoboxes but moves the images contained to separate thumbnails: User:Maddy from Celeste/disinfobox.js.

User CSS for a monospaced coding font

[edit]

To consistently use a monospaced font with well-designed characters for coding so as to clearly distinguish between l, 1, and I, and between O and 0, and between -, , , and , the system-default monospaced font can be changed:

If like it as-is, you can simply @import (transclude) it: see meta:User:SMcCandlish/codefont.css for quick instructions.

Otherwise, copy one of the code snippets below to your Special:MyPage/common.css or meta:Special:MyPage/global.css page, replacing "Roboto Mono" in the code with your preferred coding font. (Roboto Mono was used in this example as it is good, free coding font, for user-editable material on the wiki).

This code will:

  • Apply a consistent monospace font of choice to all the normally monospaced HTML elements like <code>, <pre>, etc.
  • Fallback to system-default monospace font, should the chosen font be unavailable or lack the necessary characters.
  • Do the same for the output of all Example-formatting templates, such as {{mxt}} and {{xt}}.
  • Apply to additional site-wide classes identified so far (e.g., .monospaced) that output as monospace.
  • Make the three most frequently encountered editing fields also use this font stack: the main editing window, the edit summary line, and the search entry box.
  • If any additional classes are known that should be added, please update this page or mention it on the talk page.

Horizontal style

/* Use my font, when available, for code */
code, pre, samp, kbd, tt, .example-mono, .userlinks-username, .monospaced, .keyboard-key, .button, .plaincode { font-family: "Roboto Mono", monospace !important; }
/*  Make some of the editable stuff monospaced */
#wpTextbox1, #wpSummary, #searchInput, #searchText { font-family: "Roboto Mono", monospace !important; }

Vertical style

/* Use my font, when available, for code */
code,
pre,
samp,
kbd,
tt,
.example-mono,
.userlinks-username,
.monospaced,
.keyboard-key,
.button
.plaincode {
  font-family: "Roboto Mono", monospace !important;
}
/*  Make some of the editable stuff monospaced */
#wpTextbox1,
#wpSummary,
#searchInput,
#searchText {
  font-family: "Roboto Mono", monospace !important;
}

Cleanup efforts

If you'd like to help clean up instances of the <tt>...</tt> element – which has been discouraged since the 1990s, and should usually be replaced with <code>...</code> (this may vary by context) – you can add something like the following to your common.css to make <tt> stick out like a sore thumb:

/* Flag bad code for cleanup */
tt { color: DarkRed; background: Pink; }

You can also do this with <font>, <center>, <strike>, and other deprecated elements. For CSS you can just import for this, see meta:User:SMcCandlish/lint.css.

[edit]

JavaScript

[edit]

JavaScript has many possibilities, 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.

As an example, to add a page link at the left of your preferences, add the following to Special:Mypage/common.js, replacing PageTitle with the title of the wiki page :

mw.util.addPortletLink(	'p-personal', '/wiki/PageTitle', 'PageTitle', null, null, null, '#pt-preferences');

Moving categories to top

[edit]

The following code moves the category box to the top of the article. Of course, you might want to apply some CSS to make it look prettier:

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;
}

Unfortunately, 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

[edit]

CSS can be controlled through JS by wikitext. For example, an 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, 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.)

[edit]

See also

[edit]