Jump to content

Nápověda:TemplateStyles

From mediawiki.org
This page is a translated version of the page Help:TemplateStyles and the translation is 100% complete.

TemplateStyles umožňuje komplexní behaviorální a estetické stylování šablon pomocí odkazovaných externích souborů CSS, které jsou samy o sobě wiki stránkami. Je třeba poznamenat, že možnost vytvářet/upravovat soubory CSS je zahrnuta ve výchozích oprávněních pro automaticky potvrzené uživatele, a proto nevyžaduje zapojení někoho s oprávněními správce rozhraní.

Jak to funguje?

Editoři mohou na stránku přidat <templatestyles src="[některou stránku]" /> a obsah odkazované stránky bude analyzován jako CSS, vyčištěn a načten na stránky, kde je použit tag ‎<templatestyles> (buď přímo, nebo začleněno šablonou používanou na stránce).

[nějaká stránka] musí mít model sanitized-css (Vyčištěné CSS) content model, což je výchozí nastavení pro podstránky v oboru názvů šablon, které končí na .css. Doporučený způsob použití je ukládat styly pro Template:Foo na podstránku šablony, na kterou mají největší vliv, například Template:Foo/styles.css. Pokud [some page] postrádá předponu jmenného prostoru, použije se jako výchozí jmenný prostor šablony. Například <templatestyles src="Foo/styles.css" /> načte Template:Foo/styles.css.

Značka ‎<templatestyles> by měla být umístěna před stylizovaným obsahem, ideálně v horní části šablony nebo co nejblíže k ní, aby se zabránilo potenciálnímu záblesku nestylovaného obsahu, pokud se stránka stane zpočátku viditelnou, i když je stále jen částečně vykreslena.

Jaké problémy řeší?

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ř. TemplateSandbox ).

Snížení bariér přístupu a údržby snad povede k větším inovacím ve způsobu vizuálního návrhu šablon, menším nákladům na údržbu a lepší přizpůsobivosti různým možnostem zobrazení (zejména u mobilních zařízení, která tvoří více než polovinu zobrazení stránek Wikipedie již od ).

Tradičně existovaly dva způsoby stylování šablon (nebo jakéhokoli jiného obsahu) na stránkách MediaWiki, přičemž ani jeden z následujících přístupů nefungoval zvlášť dobře:

  • Používání inline stylů (tj. surového HTML kódu s přidanými atributy, jako je style="margin: 10px;")
  • Používání určitých speciálních systémových zpráv, jako například MediaWiki:Common.css

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 @media potřebná pro zodpovědný vývoj nefungují, takže je nemožné vytvořit šablony, které by fungovaly dobře na široké škále velikostí obrazovek. Navíc mají inline styly přednost před CSS styly, takže úpravy specifické pro uživatele, vzhled nebo zařízení jsou obtížnější.

Pro systémové stránky (MediaWiki:*.css)

  • Ú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í. T112474
  • 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í.

Je to bezpečné?

Ano! TemplateStyles obsahuje plnohodnotný analyzátor CSS , který čte, znovu serializuje a escapuje veškerý kód a odstraňuje pravidla CSS, která nerozpoznává. Analyzátor je dostatečně jemný, aby odmítal vzdálené zdroje (jako jsou obrázky na pozadí), ale umožňoval místní. Selektory CSS jsou přepsány tak, aby nemohly odkazovat na prvky mimo obsah článku. (Vizuální úprava oblastí mimo obsah článku posunutím jeho částí, např. absolutním umístěním, v současné době není zakázána. To není změna oproti současnému stavu, protože něco takového bylo již možné s wikitextem a inline styly.)

Povolené vlastnosti a pravidla CSS

Od 5. 3. 2025 TemplateStyles akceptuje nejméně 331 CSS vlastností a aliasů, včetně drtivé většiny těch, které se nejčastěji používají na moderním internetu s oficiální podporou jednoho nebo více hlavních webových prohlížečů. Kromě jednoduchých pravidel jsou podporována i pravidla s koncovkou @media, @page, @supports, @keyframe, @font-face/@font-feature-values (z bezpečnostních důvodů je font-face omezen na fonty, jejichž název začíná na TemplateStyles).

Funkce CSS var() je povolena pouze ve vlastnostech, které přijímají jednu hodnotu barvy, a uvnitř funkcí calc(). Nastavení vlastních vlastností není povoleno.

Jak mohu cílit na rozlišení pro mobilní zařízení/počítače?

Dotazy na média vám umožňují cílit na prvky v rozlišení pro mobilní zařízení a v rozlišení pro počítače. Někteří doporučují, aby byly vaše styly ve výchozím nastavení vhodné pro mobily a styly pro stolní počítače byly zabaleny do mediálního dotazu. Gerrit se standardizoval na 640px a 1120px breakpointy, aby reprezentoval tablet a desktop.

Jak mohu cílit na konkrétní vzhledy?

MediaWiki poskytuje různé třídy prvků html a body, včetně jednoho, označujícího, který vzhled se používá. Na ty lze cílit vložením jednoduchého selektoru pro element html nebo body včetně potřebných tříd, za nimiž následuje mezera (nebo v CSS termínech, následný kombinátor).

Obecně by tato technika měla být použita pro konzistenci návrhu, spíše než zacílení na mobilní zařízení a počítače, protože všechny vzhledy lze použít v rozlišení pro mobilní zařízení i počítače. Viz také #Jak mohu cílit na rozlišení pro mobily/počítače?.

/* Prvky s třídou foo budou mít ve všech vzhledech červený text. */
.foo { color: red; }

/* Přepište barvu daného prvku na zelenou pouze pro vzhled Vektor. */
body.skin-vector .foo { color: green; }

/* Pokud prohlížeč nemá povolený JavaScript, přidejte červený okraj. */
html.client-nojs .foo { border: 1px solid red; }

/* Pro vzhled Vektor deklarujte stejný okraj jako zelený. */
html.client-nojs body.skin-vector .foo { border-color: green; }
/* Tohle nefunguje. Musí být vybrán element 'body'! */
.skin-vector .foo { background: orange; }

/* Ani tyto nefungují. Je nutné použít potomkový kombinátor. */
body.skin-vector > .foo { background: orange; }
body.skin-vector ~ .foo { background: orange; }
html.client-nojs > body.skin-vector .foo { background: orange; }

Jak mohu používat styly ve zprávách MediaWiki?

Aby se uživateli se zlými úmysly zabránilo v tom, aby si pohrál s částmi dokumentu mimo oblast hlavního obsahu, všechna pravidla CSS automaticky dostanou předponu třídy CSS mw-parser-output. Pokud používáte šablonu založenou na TemplateStyles mimo oblast obsahu (např. v upozornění na webu ), musíte tuto třídu poskytnout sami tím, že šablonu zabalíte do něčeho jako <div class="mw-parser-output"></div>.

V jakém pořadí mají CSS styly přednost?

Které pravidlo CSS vstoupí v platnost, je řízeno specifičnost (přibližně složitost selektoru – např. div.foo { margin: 10px } je konkrétnější než .foo { margin: 5px }). V případě stejné specifičnosti mají styly CSS, které jsou v dokumentu uvedeny později, přednost před dřívějšími styly.

MediaWiki:Common.css, další skripty webu, uživatelské skripty a miniaplikace jsou načteny v sekci ‎<head> stránky. Šablony stylů TemplateStyles se načítají do ‎<body>, takže přepisují pravidla skriptů a gadgetů webu/uživatele se stejnou specifitou, a v případě dvou pravidel TemplateStyles druhé přepíše první.

(Všimněte si však, že pravidla TemplateStyles jsou deduplikována: pokud se na stejnou šablonu stylů odkazuje vícekrát na stránce, vloží se pouze poprvé.

Všimněte si také, že "later" (později) souvisí s polohou dokumentu, nikoli s pořadím načtení. Gadgety přidávají své CSS po úplném načtení stránky manipulací se stránkou pomocí JavaScriptu; někteří jej přidávají na vyžádání, když uživatel provede nějakou akci, jako je kliknutí na tlačítko. Přesto jej přidávají do hlavičky, takže před ním mají přednost stejně specifická pravidla CSS v těle.)

Jak mohou moduly Lua komunikovat se styly?

TemplateStyles lze volat z modulu Lua pomocí frame:extensionTag.

Příklad kódu je následující:

local p = {};

function p.templateStyle( frame, src )
    return frame:extensionTag( 'templatestyles', '', { src = src } );
end

return p;

Jaké funkce proti zneužití jsou k dispozici?

Volba designu pro ukládání CSS na samostatné stránky byla provedena částečně proto, aby byla integrace se standardní sadou nástrojů proti zneužití snadná. Stránky TemplateStyles CSS mají svůj vlastní model obsahu (sanitized-css), takže jejich změny lze sledovat nebo ovládat pomocí Extension:AbuseFilter pomocí proměnné new_content_model.

Zahrnutí CSS se sleduje stejným způsobem jako transkluze šablony, takže můžete vidět, kde se šablona stylů používá, pomocí možnosti "Odkazuje sem", podívejte se, jaké šablony stylů se používají na stránce pod „Informace o stránce“ (a případně na obrazovce úprav, v závislosti na v jakém editoru používáte) a pomocí "Související změny" se podívejte, jaké nedávné změny mohou ovlivnit stránku.

TemplateStyles také ponechává identifikační informace v kódu HTML. Chcete-li zjistit, odkud konkrétní pravidlo pochází, podívejte se na zdroj stránky a ohraničující značka ‎<style> bude mít atribut jako data-mw-deduplicate="TemplateStyles:r123456", kde 123456 je revize ID šablony stylů (lze zobrazit například pomocí Special:Diff).

Jak byla učiněna rozhodnutí ohledně TemplateStyles?

Myšlenka zahrnout CSS se šablonami byla navržena a přijata v žádosti o komentáře. Technické podrobnosti byly uvedeny v druhém RfC a podrobnosti o pracovním postupu byly rozšířeny prostřednictvím uživatelské konzultace.

Kdo pracuje na TemplateStyles?

TemplateStyles byl původně projekt Wikimedia Reading Infrastructure team (předcházela mu průzkumná práce Corena jako dobrovolníka), skládající se z Brad Jorsch (vývojář), Bryan Davis (manažer) a Gergő Tisza (vývojář) v té době. Lidé a odpovědnosti se od té doby přestěhovaly; aktuální vlastnictví naleznete na stránce správců.

Kde nahlásím chyby/požádám o funkce?

Prosím, souborové úlohy pod komponentou TemplateStyles ve Phabricatoru.

Kde to můžu vidět v akci?

Můžete se podívat na některé kurátorské příklady.

Tato funkce je povolena na všech stránkách Wikimedie.

Pomoc s chybami

background-image

Pokud se při pokusu o publikování změn v souboru CSS zobrazí následující chyba:

Chybná nebo nepodporovaná hodnota vlastnosti background-image na řádku $1, znak $2.

Je možné, že atribut url('...'); přiřazený proměnné background-image neodkazuje na lokální zdroj. Analyzátor povoluje pouze lokální zdroje (a odmítá ty vzdálené). Povoleny jsou pouze adresy URL, které odkazují na zdroje v adresáři //upload.wikimedia.org/, například //upload.wikimedia.org/wikipedia/commons/8/83/MediaWiki-2023-button-proposal.svg pro soubor v adresáři File:MediaWiki-2023-button-proposal.svg. Tyto URL adresy lze získat pomocí URL adresy, na kterou odkazy ukazují na stránkách souboru Wikimedia Commons . Mezi tyto odkazy patří odkazy na "Original file" (původní soubor) nebo odkazy na "Other resolutions:" (další rozlišení) souboru, například 1,024 × 1,024 pixels.

Související odkazy