Native rich-text style sheets

Nativní XHTML dekodér aplikuje interní style elementy na rich-text pole i importy FDF/XFDF, se zachováním skutečně spočtených stylů v uloženém RV i vložených widget appearance

<body xmlns="http://www.w3.org/1999/xhtml">
  <style>
    .notice { color: #204080; font-size: 14pt }
    p > span.urgent { font-weight: bold !important }
  </style>
  <p class="notice">Review <span class="urgent">today</span></p>
</body>

Style elementy použijí namespace XHTML a buď vynechají type, nebo specifikují text/css; atributy media i vnořené skupiny @media použijí explicitní nativní profil print/screen

Pravidla podporují univerzální i typové selektory, názvy tříd a ID citlivé na velikost písmen, složené selektory, kombinátory potomka, dítěte, sousedního sourozence i následného sourozence a čárkou oddělené skupiny selektorů

Namespace selektory

Deklarace CSS namespace i kvalifikované selektory podporují pojmenované i default namespace URI, wildcard či prázdné kvalifikátory, nezávislé scopy XML prefixů i ohraničené vyhledávání zděděných atributů

Atributové a strukturální selektory

Selektory atributů podporují přítomnost, rovnost, slova oddělená bílými znaky, pomlčkové prefixy, běžné prefixy, přípony a podřetězce: [name], [name="value"], [name~="word"], [name|="en"], [name^="pre"], [name$="end"] a [name*="part"]

Hodnoty atributů přijímají citované řetězce či CSS identifikátory a jejich escapování; volitelný příznak i sklápí jen ASCII písmena, zatímco s a vynechaný příznak porovnávají citlivě na velikost písmen

Neprefixované atributy i [|name] se trefí do atributů bez namespace URI; [*|name] se trefí navíc do prefixovaných atributů s tím lokálním názvem, vyjma deklarací namespace

Sourozenečtí kombinátoři přeskočí neelementové uzly a zachovají párování předků skrz zřetězené selektory

Strukturální pseudo třídy zahrnují :root, :empty, :first-child, :last-child, :only-child, :first-of-type, :last-of-type a :only-of-type

:scope vybírá kořenový element rich textu a páruje se jako :root, protože tento dekodér nemá oddělený scoping kořen určený volajícím

Statický profil připouští :hover, :active, :focus, :focus-visible a :focus-within jako platné selektory, které se při generování PDF appearance nikdy nespárují. Jejich negace a logické či relační kombinace zachovávají běžnou sémantiku selektorů, takže p:not(:hover) může styl aplikovat, zatímco p:hover ne

@supports selector(:hover) a ekvivalentní podmíněné importy testují podporu gramatiky selektorů a vyhodnotí se jako true; nevytváří to stav pointeru, aktivace ani klávesového fokusu. Těchto šest pseudo tříd nebere žádné argumenty, takže tvary jako :focus() zůstávají neplatné

Čtyři poziční selektory :nth-child(), :nth-last-child(), :nth-of-type() a :nth-last-of-type() přijmou odd, even, celočíselné pozice i vzorce An+B se znaménkovými desetinnými koeficienty za mezemi strojových celých čísel, v rámci nakonfigurovaného skenovacího rozpočtu

Typové pozice porovnávají lokální název i URI namespace elementu; pravidlo :empty řídí Selectors3, takže textový uzel s bílými znaky udělá element neprázdným, zatímco komentáře a processing instructions ne

:lang() řídí nejbližší explicitní hodnotu xml:lang či lang, trefí se ASCII necitlivě podle přesné hodnoty či pomlčkové předpony a explicitně prázdnou hodnotu bere jako zastavení dědění

Logické a relační selektorové seznamy

:is() a :where() přijmou čárkou oddělené složité selektory, tedy i kombinátory potomků a sourozenců; nepodporované větve se ignorují a prázdný platný seznam se netrefí do žádného elementu

:is() použije největší specificitu argumentů, tedy i platných argumentů, které se do aktuálního elementu netrefí; :where() přispívá nulovou specificitou

:not() přijme neprázdný seznam složitých selektorů a trefí se, když se netrefí žádný z jeho argumentů; neplatný argument zneplatní kompletní seznam selektorů

:has() ukotví relativní selektory k aktuálnímu elementu a testuje skutečné potomky, předky či následné sourozence; každý relativní argument může začínat >, + či ~ a následovat další podporované kombinátory

Vnořené :has() i pseudo elementy nejsou podporované; neplatný relativní argument zneplatní kompletní seznam :has(), zatímco obklopující shovívavý seznam :is() či :where() může ponechat své ostatní platné argumenty

:not() a :has() použijí největší platnou specificitu argumentů, porovnávanou podle počtu ID, počtu tříd/atributů/pseudo tříd a počtu typů

:nth-child(An+B of selector-list) a :nth-last-child(An+B of selector-list) počítají jen elementové sourozence odpovídající sjednocení neprázdného seznamu složitých selektorů; cíl sám musí do toho sjednocení patřit

Filtrované poziční selektory přispějí vlastní specificitou pseudo třídy plus největší specificitou filtru; klíčové slovo of přijme CSS identifikátorové escapování i hranice komentářů, zatímco :nth-of-type() a :nth-last-of-type() si uchovávají nefiltrovanou gramatiku

p:has(> span.urgent) { color: red }
span:is(.notice, p > .urgent) { font-weight: bold }
span:nth-child(2 of .included, [data-status="ready"]) { color: blue }

CSS komentáře i identifikátorové escapování se parsují, dřív než párování, tedy i jedna až šest hexadecimálních číslic, volitelný závěrečný CSS whitespace i supplementární Unicode skaláry; nulové, surrogate i mimo rozsah ležící hexadecimální escapování se rozřeší na U+FFFD

Deklarace kaskádují podle importance, specificity selektorů i dokumentového pořadí zdroje, následované inline styly v jejich odpovídající importance; elementy dědí spočtené hodnoty rodičů přes stávající pravidla specifická pro vlastnosti

Všechny interní style elementy se účastní, dřív než se konzumuje text, takže style element za svým cílem pořád platí; text stylů se nestává viditelným textem pole

Profil deklarací si uchovává velikost, weight, styl i shorthand písma, nakonfigurované rodinné seznamy, barvu, textovou dekoraci, zarovnání, výšku řádku i letter/word spacing; konverze délek, strut rodičovských metrik i přijímání dodaných písem řídí stávající nativní rich-text API

Uložené RV obsahuje spočtené inline styly a nezávisí na původních style elementech; opakované ekvivalentní importy FDF/XFDF si uchovají přesně potvrzené bajty, když žádné čekající grafové změny nevyžadují publikaci

Nativní Pascal konzumenté, Windows file joby a původní V1 callbacky i Linux JSON/V1 callbacky sdílejí dekodér; žádné změny rozložení veřejných callback záznamů se nevyžadují

MaxTotalCodeUnits ohraničuje sken stylů, extrahovaný style text i agregátní rozbalené deklarace; MaxNodes ohraničuje počet pravidel, názvy selektorů, agregátní atributové/pseudo podmínky, funkční selektorové seznamy i práci párování a třídění, tedy i relativní traversal i skeny filtrovaných sourozenců; MaxDepth ohraničuje sběr XML, části selektorů, vnořené funkce i rekurzivní párování

Selhání zrušení i limitů si uchovají předchozí dekodérový výstup i potvrzený dokumentový stav importní transakce; retry použije tytéž původní volby i rozpočty

Neplatné či nepodporované top-level selektorové skupiny se ignorují jako celek; shovívavé seznamy argumentů is/where si ponechají své platné větve; neplatné deklarace si uchovávají stávající chování ignorování dekodéru a nepodporované at-pravidla se přeskakují

Vrstvy import a podmínky supports, další media vlastnosti, pseudo elementy, dodatečné pseudo třídy state a scope, tabulky, obrázky i obecný CSS layout zůstávají aktivní prací

Nativní form-data interchange · Linux rich callbacky · Windows form-data exchange · Rich run spacing

Externí styly dodané volajícím přidávají napojený i rekurzivně importovaný CSS s rozřešením URI resource, media podmínkami i vybranými sadami stylů

Nativní support dotazy připouštějí skupiny @supports a importy supports() s podporovaným profilem deklarací a selektorů, se sdílenými mezemi i zotavením po zrušení