Help:TemplateStyles/cs

 je nástroj umožňující komplexní stylování šablon bez oprávnění správce rozhraní.



Jak to funguje?
Editoři mohou na stránku přidat (nějaká stránka) a obsah   bude analyzován jako CSS, vyčištěn a načten na stránky kde je použita značka  (přímo nebo použitím v šabloně, která se používá na stránce).

musí mít   content model, což je výchozí hodnota pro podstránky v oboru názvů Template, které končí s. Doporučený způsob použití je ukládat styly pro  pod podstránkou jako.

Pokud  postrádá předponu jmenného prostoru, použije se jako výchozí jmenný prostor šablony. Například  načte.

Tag by měl být umístěn před obsahem, který je stylizován, např. v horní části šablony, abyste se vyhnuli potenciálnímu flash nestylovaného obsahu, pokud je stránka částečně vykreslena při načítání.



Jaké problémy řeší?
Tradičně existují dva způsoby stylování šablon (nebo jakéhokoli jiného obsahu): pomocí vložených stylů (tj. pomocí kódu HTML a přidáním atributů jako ) nebo pomocí pomocí určitých speciálních systémových zpráv, jako je MediaWiki:Common.css. Ani jeden z těchto přístupů nefunguje příliš dobře.

Pro inline styling:


 * Neexistuje žádné oddělení obsahu a prezentace. V případech, kdy obsah nepochází ze šablony (např. tabulky v článcích), povede to k wikitextu článku, který je pro většinu editorů nesrozumitelný.
 * Vzhledem k tomu, že styly jsou smíchány s wikitextem, zvýraznění syntaxe a další formy podpory úprav CSS jsou obtížné nebo nemožné.
 * Styly se musí opakovat pro každý prvek HTML, na který se vztahují, což má za následek spoustu kopírování a vkládání a kódu, který je obtížné číst a udržovat.
 * Atributy stylu jsou omezeny na podmnožinu CSS. A co je nejdůležitější, pravidla  potřebná pro citlivý vývoj nefungují, takže není možné vytvořit šablony, které by dobře fungovaly na široké škále velikostí obrazovky. Kromě toho mají inline styly přednost před šablonami stylů CSS, takže přizpůsobení pro uživatele, vzhled nebo zařízení je obtížnější.

Pro systémové stránky :


 * Úpravy jsou omezeny na administrátory rozhraní, což je hlavní překážkou účasti.
 * Omezení úprav nelze zrušit, protože neexistuje způsob, jak omezit, jaká pravidla CSS lze použít, a některá z nich by mohla být zneužita ke sledování IP adres čtenářů nebo dokonce ke spouštění skriptů v některých starších prohlížečích.
 * Změny nelze testovat bez předchozího uložení.
 * Všechny šablony stylů musí být načteny na všech stránkách (ať už stránku skutečně používají nebo ne), což plýtvá šířkou pásma a ztěžuje pravidla stylu ladění.

TemplateStyles umožňuje editorům přidružit pravidla stylů ke konkrétním stránkám, poskytuje plnou sílu šablon stylů CSS při filtrování nebezpečných konstrukcí a podle očekávání pracuje s nástroji pro náhled a ladění (např. ).

Lowering the access and maintainability barrier will hopefully result in more innovation in the way templates are visually designed, less maintenance overhead, and better adaptability to screen options (especially mobile devices which by now constitute half of Wikipedia pageviews).

Is it safe?
Yes! TemplateStyles includes a full-fledged CSS parser that reads, re-serializes and escapes all code and removes CSS rules which it does not recognize. The parser is sufficiently fine-grained to reject remote resources (such as background images) but allow local ones. CSS selectors are rewritten so that they cannot refer to elements outside article content. (Visually modifying areas outside article content by displacing parts of the article, e.g. via absolute positioning, is not prevented at this time. This is no change from the status quo, as such a thing was already possible with wikitext and inline styles.)

What CSS rules are recognized?
Currently, TemplateStyles accepts most CSS3 properties supported by one or more major browser (as of early 2017). Beyond simple rules,,  ,  ,   and  /  at-rules are also supported (with font-face restricted to fonts whose name starts with  , for security reasons). For a comprehensive list of allowed properties, see the "$props" parts of the StylePropertySanitizer code from.

Non-standard properties (including vendor prefixes) are not currently supported. See for plans.

How can I target mobile/desktop resolutions?
Media queries allow you to target elements at mobile resolution and desktop resolution. Some advise making your styles mobile friendly by default and wrapping desktop styles within the media query. Note, MediaWiki has standardised on 720px and 1000px breakpoints to represent tablet and desktop.

How can I target specific skins?
MediaWiki provides various classes on the  and   elements, including one that indicates which skin is in use. These can be targeted by including a simple selector for the  or   element including the needed classes, followed by a space (or in CSS terms, the descendant combinator).

Generally, this technique should be used for design consistency, rather than targeting mobile and desktop as all skins can be used in both mobile and desktop resolutions. See also #How can I target mobile/desktop resolutions?.

How do I use styles in MediaWiki messages?
To prevent a malicious user from messing with the parts of the document outside the main content area, all CSS rules automatically get prefixed by the  CSS class. If you use a TemplateStyles-based template outside of the content area (e.g. in the sitenotice), you need to provide that class yourself, by wrapping the template in something like.

In which order do CSS styles override?
Which CSS rule takes effect is controlled by specificity (roughly, the complexity of the selector - e.g.  is more specific than  ). In case of equal specificity, CSS styles that come later in the document override earlier styles.

MediaWiki:Commons.css, other site scripts, user scripts and gadgets are loaded in the section of the page. TemplateStyles stylesheets are loaded in the, so they override site/user script and gadget rules with equal specificity, and in the case of two TemplateStyles rules, the second overrides the first. (Note though that TemplateStyles rules are deduplicated: if the same stylesheet is referenced multiple times on the page, it is only inserted the first time. Note also that "later" has to do with document position, not load order.  Gadgets add their CSS after the page has fully loaded, by manipulating the page with JavaScript; some add it on-demand when the user does some action such as clicking a button.  Nevertheless, they add it to the head, so equally-specific CSS rules in the body get precedence over it.)

How can Lua modules interact with styles?
TemplateStyles can be called from a Lua module using.

Example code is the following:

What anti-abuse features are provided?
The design choice to store CSS in separate pages was made in part to make integration with the standard anti-abuse toolset easy. TemplateStyles CSS pages have their own content model so changes to them can be tracked or controlled with, using the   variable.

CSS inclusion is tracked the same way as template transclusion, so you can see where a stylesheet is used via the "" option, see what stylesheets are used on a page under "" (and possibly on the edit screen, depending on what editor you use), and see what recent changes might be affecting a page using "".

TemplateStyles also leaves identifying information in the HTML code; to find out where a specific rule comes from, look at the page source, and the enclosing tag will have an attribute like , where 123456 is the revision ID of the stylesheet (viewable with Special:Diff, for example).

How were the decisions around TemplateStyles made?
The idea of including CSS with templates was proposed and accepted in a request for comments. Technical details were pinned down in a second RfC and workflow details in a user consultation.

Who is working on TemplateStyles?
TemplateStyles was originally a project of the (preceded by exploratory work Coren did as a volunteer), consisting of Brad Jorsch (developer), Bryan Davis (manager) and Gergő Tisza (developer) at the time. People and responsibilities have since moved around; see the maintainers page for current ownership.

Where do I report errors / ask for features?
Please file tasks under the TemplateStyles component in Phabricator.

Where can I see it in action?
You can look at some curated examples.

The feature is enabled on all Wikimedia sites.