Feuilles de style de texte enrichi natif

Le décodeur XHTML natif applique les éléments de style internes aux champs de texte enrichi et aux imports FDF/XFDF, préservant les styles calculés réels dans le RV enregistré et les apparences de widgets embarquées

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

Les éléments de style utilisent l'espace de noms XHTML et omettent type ou spécifient text/css ; les attributs media et groupes @media imbriqués utilisent le profil print/screen natif explicite

Les règles prennent en charge les sélecteurs universels et de type, les noms de classes et d'ID sensibles à la casse, les sélecteurs composés, les combinateurs descendant, enfant, frère adjacent et frère subséquent, ainsi que les groupes de sélecteurs séparés par virgules

Sélecteurs d'espaces de noms

Les déclarations d'espaces de noms CSS et sélecteurs qualifiés prennent en charge les URI d'espaces de noms nommés et par défaut, les qualificatifs joker ou vides, les portées de préfixes XML indépendantes et la recherche bornée d'attributs hérités

Sélecteurs d'attributs et structurels

Les sélecteurs d'attributs prennent en charge la présence, l'égalité, les mots séparés par blancs, les préfixes à tiret, les préfixes ordinaires, les suffixes et les sous-chaînes : [name], [name="value"], [name~="word"], [name|="en"], [name^="pre"], [name$="end"] et [name*="part"]

Les valeurs d'attributs acceptent des chaînes citées ou des identifiants CSS et leurs échappements ; le drapeau i optionnel ne rabat que les lettres ASCII, tandis que s et un drapeau omis comparent en tenant compte de la casse

Les attributs sans préfixe et [|name] correspondent aux attributs sans URI d'espace de noms ; [*|name] correspond aussi aux attributs préfixés portant ce nom local, déclarations d'espaces de noms exclues

Les combinateurs de frères sautent les nœuds non éléments et préservent la correspondance d'ancêtres à travers des sélecteurs chaînés

Les pseudo-classes structurelles comprennent :root, :empty, :first-child, :last-child, :only-child, :first-of-type, :last-of-type et :only-of-type

:scope sélectionne l'élément racine du texte enrichi, correspondant à :root car ce décodeur n'a pas de racine de scoping distincte spécifiée par l'appelant

Le profil statique accepte :hover, :active, :focus, :focus-visible et :focus-within comme sélecteurs valides qui ne correspondent jamais pendant la génération d'apparences PDF. Leurs négations et combinaisons logiques ou relationnelles gardent la sémantique normale des sélecteurs, si bien que p:not(:hover) peut appliquer un style alors que p:hover ne le peut pas

@supports selector(:hover) et les imports conditionnels équivalents testent la prise en charge de la grammaire de sélecteurs et s'évaluent à vrai ; cela ne crée aucun état de pointeur, d'activation ni de focus clavier. Ces six pseudo-classes ne prennent aucun argument, si bien que des formes comme :focus() restent invalides

Les quatre sélecteurs positionnels :nth-child(), :nth-last-child(), :nth-of-type() et :nth-last-of-type() acceptent odd, even, des positions entières et des formules An+B avec coefficients décimaux signés au-delà des plages d'entiers machine, dans le budget de balayage configuré

Les positions de type comparent à la fois le nom local de l'élément et l'URI d'espace de noms ; la règle :empty suit Selectors3, si bien qu'un nœud texte de blancs rend un élément non vide tandis que les commentaires et instructions de traitement ne le font pas

:lang() suit la valeur xml:lang ou lang explicite la plus proche, correspond insensible à la casse ASCII par valeur exacte ou préfixe à tiret, et traite une valeur vide explicite comme arrêtant l'héritage

Listes de sélecteurs logiques et relationnelles

:is() et :where() acceptent des sélecteurs complexes séparés par virgules, combinateurs descendant et de frères compris ; les branches non prises en charge sont ignorées et une liste valide vide ne correspond à aucun élément

:is() utilise la spécificité d'argument la plus grande, arguments valides ne correspondant pas à l'élément courant compris ; :where() contribue zéro spécificité

:not() accepte une liste non vide de sélecteurs complexes et correspond quand aucun de ses arguments ne correspond ; un argument invalide invalide la liste complète de sélecteurs

:has() ancre les sélecteurs relatifs à l'élément courant et teste les enfants, descendants ou frères suivants réels ; chaque argument relatif peut commencer par >, + ou ~, suivi d'autres combinateurs pris en charge

Les :has() imbriqués et les pseudo-éléments ne sont pas pris en charge ; un argument relatif invalide invalide la liste :has() complète, tandis qu'une liste :is() ou :where() permissive englobante peut garder ses autres arguments valides

:not() et :has() utilisent la plus grande spécificité d'argument valide, comparée par nombre d'ID, nombre de classes/attributs/pseudo-classes et nombre de types

:nth-child(An+B of selector-list) et :nth-last-child(An+B of selector-list) ne comptent que les frères éléments correspondant à l'union de la liste de sélecteurs complexes non vide ; la cible doit elle-même appartenir à cette union

Les sélecteurs positionnels filtrés contribuent leur propre spécificité de pseudo-classe plus la plus grande spécificité de filtre ; le mot-clé of accepte les échappements d'identifiants CSS et les frontières de commentaires, tandis que :nth-of-type() et :nth-last-of-type() gardent leur grammaire non filtrée

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 }

Les commentaires CSS et les échappements d'identifiants sont analysés avant la correspondance, un à six chiffres hexadécimaux, blancs CSS finaux optionnels et scalaires Unicode supplémentaires compris ; les échappements hexadécimaux nuls, de substituts et hors plage se résolvent en U+FFFD

Les déclarations se mettent en cascade par importance, spécificité de sélecteur et ordre source du document, suivies des styles inline à leur importance correspondante ; les éléments héritent des valeurs parentes calculées via les règles existantes spécifiques aux propriétés

Tous les éléments de style internes participent avant que le texte ne soit consommé, si bien qu'un élément de style apparaissant après sa cible s'applique quand même ; le texte de style ne devient pas du texte de champ visible

Le profil de déclarations conserve taille, graisse, style et raccourci de police, listes de familles configurées, couleur, décoration de texte, alignement, hauteur de ligne et espacement des lettres/mots ; la conversion de longueurs, les struts de métriques parentes et l'admission de polices fournies suivent les API natives de texte enrichi existantes

Le RV enregistré contient les styles inline calculés et ne dépend pas des éléments de style d'origine ; des imports FDF/XFDF équivalents répétés gardent des octets commis exacts quand aucun changement de graphe en attente n'exige de publication

Les consommateurs Pascal natifs, les jobs de fichiers Windows et les callbacks V1 d'origine, ainsi que les callbacks JSON/V1 Linux partagent le décodeur ; aucun changement de layout de record de callbacks public n'est requis

MaxTotalCodeUnits borne le balayage des feuilles de style, le texte de style extrait et les déclarations étendues agrégées ; MaxNodes borne le nombre de règles, les noms de sélecteurs, les conditions attribut/pseudo agrégées, les listes de sélecteurs fonctionnels et le travail d'appariement/tri, traversée relative et scans de frères filtrés compris ; MaxDepth borne la collection XML, les parties de sélecteurs, les fonctions imbriquées et l'appariement récursif

Les échecs d'annulation et de limite conservent la sortie antérieure du décodeur et l'état de document commis de la transaction d'import ; la nouvelle tentative utilise les mêmes options et budgets d'origine

Les groupes de sélecteurs de premier niveau invalides ou non pris en charge sont ignorés dans leur ensemble ; les listes d'arguments is/where permissives gardent leurs branches valides ; les déclarations invalides gardent le comportement d'ignorance existant du décodeur, et les at-rules non prises en charge sont sautées

Les couches d'import, d'autres caractéristiques média, les pseudo-éléments, les pseudo-classes d'état supplémentaires et les racines de scoping spécifiées par l'appelant, les tableaux, les images et le layout CSS général restent des travaux en cours

Interchange natif de données de formulaire · Callbacks riches Linux · Échange de données de formulaire Windows · Espacement des runs riches

Les feuilles de style externes fournies par l'appelant ajoutent du CSS lié et importé récursivement avec résolution d'URI de ressource, conditions média et ensembles de feuilles de style sélectionnés

Les requêtes de support natives admettent les groupes @supports et les imports supports() selon le profil de déclarations et de sélecteurs pris en charge, avec bornes partagées et récupération après annulation