Support queries CSS nativas de rich text
O descodificador nativo de XHTML avalia grupos @supports e condições de importações supports() contra a 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 os tipos de letra fornecidos pelo caller
Admissão de declarações e seletores
Queries de declarações 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 tipo de letra, letter-spacing e word-spacing
Queries numéricas partilham o perfil math CSS finito, métricas de tipos de letra 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 numa query de declaração sem mudar a prioridade de cascata do grupo condicional; uma declaração extra, um ponto e vírgula final ou uma prioridade inválida são recusados
selector() verifica a gramática nativa de seletores existente e as declarações de namespaces da folha atual sem fazer match a um elemento do documento
Cada ramo de seletor tem de ser suportado, incluindo ramos dentro de listas is() e where() normalmente tolerantes; prefixos de namespaces 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 o suporte do parser; seletores de ações de utilizador continuam a nunca fazer match a uma aparência 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 partilhados 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 descodificador, e not tem de 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, por isso 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 as suas fronteiras de token distintas
Grupos, importações e saída
Grupos condicionais retêm a sua posição real na origem, specificity do seletor e prioridades important, e podem aninhar-se 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 uma importação segue o URI do recurso e precede a sua condição de media opcional; ambos têm de admitir o recurso antes de este contribuir declarações
Resolução de URI relativo, tratamento de ciclos, isolamento de namespaces e os requisitos existentes de ordem de importações permanecem os de folhas de estilo fornecidas pelo caller
Declarações admitidas alcançam runs descodificados reais, valores rich canónicos computados, aparências de campos guardadas e importações rich FDF/XFDF de perfil default pelo mesmo descodificador
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 partilham MaxDepth
O cancelamento propaga EHPDFOperationCancelled sem devolver runs parciais, e queries ou budgets falhados retêm a recuperação de decode novo e reutilizado
Tests/Linux/RichTextSupports/Run.py verifica o comportamento de declarações, seletores, Boolean e tokens de URL, cascata aninhada e importações, cancelamento medido e a saída real guardada de PDF simples e cifrado 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 que queries têm sucesso