Media queries nativas de rich text

O descodificador nativo XHTML avalia o atributo media de um elemento style e grupos @media aninhados antes de pôr em cascata as declarações suportadas em runs reais de rich text

A avaliação de media usa um perfil nativo explícito de hosts e não inspeciona um desktop, browser nem dispositivo de apresentação

Options := THPDFHeadlessRichTextDecodeOptions.Default;
Options.MediaType := hrmtScreen;
SetLength(Options.MediaFeatures, 2);
Options.MediaFeatures[0].Name := 'width';
Options.MediaFeatures[0].Value := '800px';
Options.MediaFeatures[1].Name := 'resolution';
Options.MediaFeatures[1].Value := '2dppx';
Runs := HPDFDecodeHeadlessRichText(XHTML, Options);
<style media="screen and (width >= 600px)">
  @media (resolution >= 2dppx) {
    span.notice { font-size: 14pt }
  }
</style>

Condições e cascatas

As consultas suportam tipos de media all, print e screen, modificadores only e not, alternativas separadas por vírgulas e condições not, and e or entre parênteses

Features numéricas aceitam igualdade com dois pontos, formas min-/max- e comparações de intervalos diretas, invertidas ou encadeadas usando =, <, <=, > e >=

Grupos aninhados mantêm a ordem da fonte, a importância de declarações, a especificidade de seletores e as declarações herdadas de namespaces; um atributo media de estilos e todos os grupos de media envolventes têm de corresponder

Escapes de identificadores CSS, comentários, notação de expoentes e tokens equilibrados de funções são analisados dentro do mesmo parser delimitado

Features desconhecidas, valores não suportados e condições general-enclosed mantêm um valor de verdade desconhecido através de negação e avaliação Booleana; apenas uma consulta final true ativa as declarações dela

Fornecer uma entrada de host para uma feature futura não torna essa feature parte do vocabulário suportado de consultas

Perfil de host

As features numéricas suportadas são width, height, device-width, device-height, resolution, aspect-ratio, device-aspect-ratio, color, color-index, monochrome e grid

As features discretas são orientation, scan, update, overflow-block, overflow-inline, color-gamut, pointer, any-pointer, hover e any-hover

As unidades de comprimento são pt, px, in, pc, cm, mm, q, em e rem; as unidades de resolução são dpi, dpcm, dppx e x, e rácios usam notação com barra

Media em e rem usam MediaInitialFontSize em vez de um tamanho de tipo de letra de elementos em cascata; o default dele é 12 pontos, e zero mantém o mesmo valor inicial de 12 pontos para registos legados inicializados a zero

Um orientation ou aspect-ratio omitido pode ser derivado de width e height fornecidos; altura zero deixa o rácio desconhecido, enquanto largura e altura iguais usam orientação portrait

any-pointer pode conter coarse e fine em simultâneo; none não pode combinar-se com outro valor de pointer, e color-gamut inclui os ranks inferiores de gamuts suportados

O medium por defeito é print, com 8 bits de cor, sem cor indexada nem monocromática, grid 0 e gamut sRGB; as capacidades dele de update, overflow-inline, pointer, hover e scan estão ausentes, e overflow-block é paged

Dimensões e resolução não têm defaults de dispositivos inventados; capacidades screen além dos defaults partilhados de cor exigem um valor explícito de host quando relevantes

MediaFeatures permite no máximo 32 nomes distintos insensíveis a maiúsculas ASCII, cada um com 1 a 64 letras, dígitos ou hífenes ASCII e um valor de 1 a 256 unidades de código UTF-16; entradas reconhecidas têm de usar um valor numérico válido não negativo ou um valor discreto suportado

MediaInitialFontSize tem de ser finito e zero ou entre 0,000001 e 1000000 pontos; perfis de host inválidos levantam EHPDFHeadlessRichTextCodecError antes de devolver runs

Preferências explícitas e acessibilidade

Forneça preferências como entradas MediaFeatures; elas descrevem o ambiente de renderização do caller e não inspecionam um sistema operativo, browser ou desktop ativo

FeatureValores aceitesValor Boolean falso
prefers-color-schemelight, darkNenhum dos valores
prefers-reduced-motionno-preference, reduceno-preference
prefers-reduced-transparencyno-preference, reduceno-preference
prefers-contrastno-preference, less, more, customno-preference
prefers-reduced-datano-preference, reduceno-preference
forced-colorsnone, activenone
inverted-colorsnone, invertednone
scriptingnone, initial-only, enablednone
Options := THPDFHeadlessRichTextDecodeOptions.Default;
Options.MediaType := hrmtScreen;
SetLength(Options.MediaFeatures, 2);
Options.MediaFeatures[0].Name := 'prefers-color-scheme';
Options.MediaFeatures[0].Value := 'dark';
Options.MediaFeatures[1].Name := 'prefers-contrast';
Options.MediaFeatures[1].Value := 'more';
Runs := HPDFDecodeHeadlessRichText(XHTML, Options);
@media (prefers-color-scheme: dark) and (prefers-contrast: more) {
  span.notice { font-size: 20pt; font-weight: bold }
}

Todas as oito features são discretas: use igualdade ou uma condição Boolean e não use comparações min-/max- nem de intervalos ordenados

Light é um valor ativo de color-scheme numa query Boolean, e less ou custom é uma preferência de contraste ativa; custom não implica more

Uma preferência omitida permanece desconhecida tanto para print como para screen, incluindo sob not; o descodificador não inventa no-preference, light, none nem outro valor de fallback

Valores inválidos para features de host reconhecidas rejeitam o perfil antes de os runs serem devolvidos; escapes de identificadores CSS e comentários usam o tokenizer delimitado existente, incluindo comentários consumidos até ao fim da entrada

A feature scripting descreve apenas a disponibilidade fornecida pelo caller; avaliar a query não executa JavaScript

Atributos media de estilos, grupos aninhados e folhas externas fornecidas pelo caller partilham estas semânticas de features e as regras de cascata existentes

Documentos guardados e limites

Quem chama nativamente pode configurar um perfil personalizado de host através de THPDFHeadlessRichTextDecodeOptions e passá-lo diretamente a HPDFDecodeHeadlessRichText

Runs calculados mantêm os estilos escolhidos em RV guardado e aparências incorporadas; importações ordinárias de FDF/XFDF usam o perfil por defeito de print

Tokens de media, grupos aninhados, parsing de valores de hosts e correspondência partilham a contabilidade de MaxNodes, MaxTotalCodeUnits, MaxDepth e cancelamento com o parser existente de folhas de estilos

Descodificação falhada não publica runs parciais, e importações falhadas retêm o estado anterior do documento da transação envolvente

Folhas de estilo externas, calc e unidades viewport, mais features de media e layout CSS geral continuam a ser trabalho separado

Folhas de estilo internas · Opções nativas

Condições externas de links e importações usam o mesmo avaliador de media