Support queries CSS nativas de rich text
O decodificador nativo de XHTML avalia grupos @supports e condições de import supports() contra sua gramática suportada de declarações e seletores de rich text
<body xmlns="http://www.w3.org/1999/xhtml">
<style><![CDATA[
@supports (font-size: calc(10pt + 5pt)) and selector(span.notice) {
span.notice { font-size: 15pt }
}
@supports not (display: grid) {
span.notice { font-weight: bold }
}
]]></style>
<p><span class="notice">Conditional text</span></p>
</body>
No perfil nativo ambos os grupos se aplicam, produzindo texto bold de 15 pontos com as fontes fornecidas pelo caller
Admissão de declarações e seletores
Queries de declaração usam os helpers de admissão existentes para font-size, font-weight, font-style, text-decoration, color, text-align, font-family, line-height, shorthand de fonte, letter-spacing e word-spacing
Queries numéricas compartilham o perfil math CSS finito, métricas de fonte default e dimensões de media explícitas; propriedades não suportadas ou valores não admitidos avaliam para false
Queries de font-family exigem a coleção FontFamilyNames configurada, e uma família válida mas indisponível pode usar o fallback existente de família fornecida
Uma anotação !important válida é aceita em uma query de declaração sem mudar a prioridade de cascata do grupo condicional; uma declaração extra, ponto e vírgula final ou prioridade inválida é recusada
selector() checa a gramática nativa de seletores existente e as declarações de namespace da folha atual sem matchear um elemento do documento
Cada branch de seletor precisa ser suportada, incluindo branches dentro de listas is() e where() normalmente tolerantes; prefixos de namespace indefinidos e pseudo classes desconhecidas avaliam para false
:scope raiz e a gramática estática :hover, :active, :focus, :focus-visible e :focus-within são suportadas. Uma query de feature bem-sucedida descreve suporte do parser; seletores de ações de usuário ainda nunca matcheiam uma appearance de PDF, e formas funcionais como :hover() são inválidas
Probes de seletores restauram o armazenamento temporário do matcher e deixam o matcheamento subsequente de folhas intacto; o trabalho deles mesmo assim consome os budgets compartilhados de nós e cancelamento
Sintaxe Boolean e condições forward-compatible
Condições aceitam not, cadeias homogêneas de and ou or e parênteses aninhados; misturar and com or exige agrupamento explícito
Comentários e escapes de identificadores CSS seguem o tokenizer existente do decodificador, e not precisa ser um keyword separado do termo seguinte em vez de um token de função not()
Funções desconhecidas balanceadas e condições general-enclosed entre parênteses avaliam para false, então um not envolvente pode fornecer fallback
Strings malformadas, tokens de URL não quotados malformados e delimitadores sem par invalidam a condição envolvente antes da negação; dimensões numéricas e tokens de funções quotados retêm suas fronteiras de token distintas
Grupos, imports e saída
Grupos condicionais retêm sua posição real na origem, specificity do seletor e prioridades important, e podem aninhar com grupos de media suportados
@import "metrics.css" supports(line-height: 18pt) print;
@import "fallback.css" supports(not selector(span:future));
A condição supports() opcional de um import segue o URI do recurso e precede sua condição de media opcional; ambos precisam admitir o recurso antes de ele contribuir declarações
Resolução de URI relativo, tratamento de ciclos, isolamento de namespace e os requisitos existentes de ordem de imports permanecem os de folhas de estilo fornecidas pelo caller
Declarações admitidas alcançam runs decodificados reais, valores rich canônicos computados, appearances de campos salvas e imports rich FDF/XFDF de perfil default pelo mesmo decodificador
Limites e aceitação
Parsing de condições e probes de seletores consomem os limites existentes MaxNodes e MaxTotalCodeUnits; condições, blocos e grupos aninhados compartilham MaxDepth
Cancelamento propaga EHPDFOperationCancelled sem retornar runs parciais, e queries ou budgets com falha retêm a recuperação de decode novo e reutilizado
Tests/Linux/RichTextSupports/Run.py verifica comportamento de declarações, seletores, Boolean e tokens de URL, cascata aninhada e imports, cancelamento medido e saída de PDF real salva simples e criptografada com AES
Este perfil nativo não adiciona layout de browser, import layers, custom properties, sintaxe adicional de seletores nem features condicionais de CSS além das queries de declarações e seletores suportadas acima
A sintaxe de condições segue partes suportadas de CSS Conditional Rules Level 3 e Level 4; o perfil nativo de admissão define quais queries têm sucesso