High Contrast — um modo de acessibilidade dos sistemas operacionais que aumenta o contraste de cores dos elementos da interface para melhorar a distinguibilidade. No iOS, o recurso Increase Contrast está localizado em Settings > Accessibility > Display & Text Size e permite aumentar individualmente o contraste do texto, botões e bordas. No Android, o modo similar High Contrast Text está disponível em Configurações > Acessibilidade > Texto de alto contraste. De acordo com a Organização Mundial da Saúde, pelo menos 2.2 bilhões de pessoas têm deficiências visuais para as quais o High Contrast é fundamental.
Principais Pontos
High Contrast é um modo de exibição no qual o sistema operacional ou aplicativo aumenta a diferença entre a cor do primeiro plano (texto, ícones) e o fundo. A taxa de contraste mínima para texto normal de acordo com o padrão WCAG AA é 4.5:1, e para texto grande (a partir de 18pt ou 14pt negrito) — 3:1. O modo High Contrast pode aumentar a proporção para 7:1 ou mais, garantindo a máxima legibilidade.
Ao contrário de simplesmente escurecer o fundo ou clarear o texto, o High Contrast funciona de forma abrangente: substitui a paleta de cores da interface por um conjunto limitado de cores de alto contraste, adiciona contornos ao redor dos elementos e remove a transparência. Este modo é projetado para pessoas com acuidade visual reduzida, fotofobia e certas formas de daltonismo.
Existem três tipos de High Contrast: nível de sistema (ativado no SO e afeta todos os aplicativos), no aplicativo (modo integrado dentro de um aplicativo específico) e modo web (função de mídia CSS prefers-contrast). O High Contrast em nível de sistema é o mais poderoso, pois substitui as cores mesmo em aplicativos que não possuem suporte próprio de acessibilidade.
Os principais usuários de High Contrast são pessoas com catarata (opacidade do cristalino que reduz a sensibilidade ao contraste), degeneração macular (perda da visão central), glaucoma e retinopatia diabética. Este modo também é necessário ao trabalhar sob luz solar intensa — o alto contraste compensa o brilho da tela. De acordo com a WebAIM (2025), 86% das páginas web têm texto com contraste abaixo do WCAG AA — o High Contrast do lado do usuário corrige parcialmente esse defeito.
No iOS, o recurso Increase Contrast está localizado em Settings > Accessibility > Display & Text Size e inclui três interruptores independentes: Increase Contrast (melhoria geral), Darken Colors (escurecer cores brilhantes) e Reduce Transparency (reduzir transparência). Increase Contrast é o interruptor principal, afetando o texto, botões e bordas dos elementos do sistema.
Tecnicamente, o iOS implementa o Increase Contrast através de tintColor e da camada UIVisualEffectView. Quando ativado, o sistema aumenta o valor alfa para tons escuros e diminui para tons claros, elevando a taxa de contraste de todos os elementos da UI em 2–3 pontos. O Reduce Transparency substitui fundos semitransparentes (efeito de vidro fosco) por opacos, o que melhora ainda mais a legibilidade do texto em fundos desfocados.
Um desenvolvedor pode verificar o estado do Increase Contrast através de UIAccessibility e adaptar as cores de acordo. Por exemplo, se o contraste estiver aumentado, cores de acento mais saturadas podem ser usadas; caso contrário, uma taxa de contraste base de 4.5:1 deve ser garantida através da paleta padrão. UIAccessibility.isReduceTransparencyEnabled também é útil para desativar efeitos de desfoque quando o modo está ativo.
import UIKit
class ContrastManager {
// Verificar o estado do Increase Contrast
static var isIncreaseContrastEnabled: Bool {
return UIAccessibility.isDarkerSystemColorsEnabled
}
// Verificar Reduce Transparency
static var isReduceTransparencyEnabled: Bool {
return UIAccessibility.isReduceTransparencyEnabled
}
// Adaptar a cor ao modo de contraste
static func adjustedAccentColor() -> UIColor {
guard isIncreaseContrastEnabled else {
return .systemBlue
}
// Azul mais saturado quando o High Contrast está ativo
return UIColor(red: 0.0, green: 0.35, blue: 0.9, alpha: 1.0)
}
// Cor de fundo considerando Reduce Transparency
static func backgroundColor() -> UIColor {
if isReduceTransparencyEnabled {
return .systemBackground // Fundo opaco
}
return UIColor.systemBackground.withAlphaComponent(0.85)
}
// Inscrever-se nas alterações
static func observeChanges(observer: Any, selector: Selector) {
NotificationCenter.default.addObserver(
observer,
selector: selector,
name: UIAccessibility.darkerSystemColorsStatusDidChangeNotification,
object: nil
)
NotificationCenter.default.addObserver(
observer,
selector: selector,
name: UIAccessibility.reduceTransparencyStatusDidChangeNotification,
object: nil
)
}
}
// Exemplo de uso: UINavigationBar
func applyContrastToNavigationBar(_ navBar: UINavigationBar) {
if ContrastManager.isIncreaseContrastEnabled {
navBar.isTranslucent = false
navBar.barTintColor = ContrastManager.backgroundColor()
navBar.titleTextAttributes = [
.foregroundColor: UIColor.label,
.font: UIFont.boldSystemFont(ofSize: 18)
]
}
}A classe ContrastManager fornece acesso ao estado do Increase Contrast através de isDarkerSystemColorsEnabled, adapta a cor de acento quando o modo está ativo, desativa a transparência da barra de navegação e se inscreve nas notificações do sistema sobre alterações de contraste. O UIKit redesenha automaticamente os elementos quando o status do UIAccessibility muda.
O iOS fornece cores UIColor dinâmicas (systemBackground, label, secondaryLabel) que se adaptam automaticamente ao modo Increase Contrast. Quando o Increase Contrast é ativado, as cores do sistema alteram seus valores: o label fica mais escuro (ou mais claro no modo escuro), o fundo perde transparência. Os desenvolvedores são incentivados a usar cores dinâmicas para todos os elementos de UI para evitar conflitos com o contraste do sistema.
No Android, o recurso High Contrast Text funciona de forma diferente do iOS. Em vez de aumentar suavemente a taxa de contraste, o Android aplica um esquema de cores invertido: fundo escuro e texto branco com maior negrito. Este modo é especialmente eficaz em telas AMOLED, onde o preto oferece contraste máximo. A configuração está localizada em Configurações > Acessibilidade > Melhorias de visibilidade.
Android High Contrast Text usa dois mecanismos: substituir a paleta de cores através de uma sobreposição de tema e aplicar uma ColorMatrix para aumentar o contraste de imagens bitmap. O sistema analisa o tema atual do aplicativo (Claro/Escuro) e aplica uma sobreposição com contraste máximo: primeiro plano branco (#FFFFFF) em fundo preto (#000000). Elementos semitransparentes recebem um fundo opaco.
Para verificar o estado do High Contrast Text no Android, use AccessibilityManager e ContentResolver. A API permite determinar se o modo está ativo e adaptar a interface do usuário. O Jetpack Compose suporta adaptação através de CompositionLocalProvider e LocalContrast.
import android.accessibilityservice.AccessibilityService
import android.content.Context
import android.provider.Settings
import android.view.accessibility.AccessibilityManager
import androidx.compose.runtime.Composable
import androidx.compose.ui.graphics.Color
class HighContrastHelper {
// Verificar via AccessibilityManager
fun isHighContrastTextEnabled(context: Context): Boolean {
val am = context.getSystemService(
Context.ACCESSIBILITY_SERVICE
) as AccessibilityManager
return am.isEnabled && am.getEnabledAccessibilityServiceList(
AccessibilityService.FEEDBACK_ALL_MASK
).any { it.resolveInfo.serviceInfo.packageName ==
"com.android.server.accessibility" }
}
// Verificar via configurações globais
fun isHighContrastFromSettings(context: Context): Boolean {
return try {
Settings.System.getInt(
context.contentResolver,
"high_text_contrast_enabled"
) == 1
} catch (e: Settings.SettingNotFoundException) {
false
}
}
// Jetpack Compose — cores considerando contraste
@Composable
fun contrastAwareColors(): Pair<Color, Color> {
val context = androidx.compose.ui.platform.LocalContext.current
return if (isHighContrastTextEnabled(context)) {
Color.White to Color.Black
} else {
Color.Black to Color.White
}
}
}
// Sistema View: seletor de cor dinâmico
class ContrastTextView @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null
) : AppCompatTextView(context, attrs) {
private val helper = HighContrastHelper()
override fun onAttachedToWindow() {
super.onAttachedToWindow()
if (helper.isHighContrastTextEnabled(context)) {
setTextColor(Color.WHITE)
setBackgroundColor(Color.BLACK)
setTypeface(getTypeface(), Typeface.BOLD)
}
}
}A classe HighContrastHelper verifica se o High Contrast está ativo através de AccessibilityManager e configurações do sistema, adapta as cores no Jetpack Compose e fornece um ContrastTextView personalizado para o sistema View. No Android, ao contrário do iOS, não há uma Notificação direta para alterações de High Contrast — ContentObserver em Settings.System é obrigatório para atualizações dinâmicas.
Material Design 3 (Material You) inclui suporte integrado a High Contrast através de Dynamic Color. Quando o modo do sistema está ativo, o Material 3 seleciona automaticamente a paleta tonal máxima: background = Neutral0, onBackground = Neutral100, primary = Primary100. Os desenvolvedores só precisam usar componentes MD3 — o sistema cuida da adaptação de contraste automaticamente.
A taxa de contraste WCAG é uma proporção matemática de luminância entre duas cores, usada para avaliar a acessibilidade do texto. O padrão define dois limites: 4.5:1 para texto normal (nível AA) e 3:1 para texto grande (a partir de 18px/14px negrito). Para o nível AAA, é necessário 7:1 para texto normal e 4.5:1 para texto grande. O modo High Contrast deve idealmente fornecer 7:1 ou mais.
O cálculo da taxa de contraste é realizado usando a fórmula: (L1 + 0.05) / (L2 + 0.05), onde L1 é a luminância relativa da cor mais clara e L2 é a luminância relativa da cor mais escura. A luminância relativa é calculada a partir dos canais sRGB com pesos: 0.2126R + 0.7152G + 0.0722B. Para desenvolvedores de acessibilidade, é suficiente usar ferramentas como WebAIM Contrast Checker, Color Contrast Analyser ou Accessibility Inspector no Xcode.
| Nível | Texto Normal | Texto Grande (18px/14px negrito) | Componentes UI |
|---|---|---|---|
| AA | 4.5:1 | 3:1 | 3:1 |
| AAA | 7:1 | 4.5:1 | — |
| High Contrast iOS | ~7:1 | ~5.5:1 | 4.5:1 |
| High Contrast Android | ~10:1 | ~10:1 | 7:1 |
Para verificação automática da taxa de contraste em uma aplicação web, pode-se usar JavaScript. Quando o modo High Contrast está ativo, é aconselhável destacar elementos que não atendem ao padrão AA. Abaixo está um exemplo de cálculo de luminância relativa e taxa de contraste em JavaScript.
// Cálculo da taxa de contraste conforme WCAG 2.2
class ContrastChecker {
// Conversão de sRGB para espaço linear
linearize(channel) {
const s = channel / 255
return s <= 0.04045
? s / 12.92
: Math.pow((s + 0.055) / 1.055, 2.4)
}
// Luminância relativa
relativeLuminance(r, g, b) {
const R = this.linearize(r)
const G = this.linearize(g)
const B = this.linearize(b)
return 0.2126 * R + 0.7152 * G + 0.0722 * B
}
// Taxa de contraste entre duas cores
getContrastRatio(hex1, hex2) {
const rgb1 = this.hexToRgb(hex1)
const rgb2 = this.hexToRgb(hex2)
const L1 = this.relativeLuminance(rgb1.r, rgb1.g, rgb1.b)
const L2 = this.relativeLuminance(rgb2.r, rgb2.g, rgb2.b)
const lighter = Math.max(L1, L2)
const darker = Math.min(L1, L2)
return (lighter + 0.05) / (darker + 0.05)
}
hexToRgb(hex) {
const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex)
return result ? {
r: parseInt(result[1], 16),
g: parseInt(result[2], 16),
b: parseInt(result[3], 16),
} : null
}
// Verificação de nível AA (4.5:1)
passesAA(hex1, hex2) {
return this.getContrastRatio(hex1, hex2) >= 4.5
}
// Verificação de nível AAA (7:1)
passesAAA(hex1, hex2) {
return this.getContrastRatio(hex1, hex2) >= 7.0
}
}
// Uso
const checker = new ContrastChecker()
console.log(checker.getContrastRatio("#333333", "#FFFFFF"))
// → 13.2:1 (AAA)
console.log(checker.passesAA("#999999", "#FFFFFF"))
// → false (2.8:1)A classe ContrastChecker em JavaScript implementa um cálculo completo da taxa de contraste conforme WCAG 2.2: conversão de sRGB para espaço linear, cálculo de luminância relativa com pesos Rec.709 e comparação com os limites AA/AAA. Esta ferramenta é útil para auditoria automatizada de paleta de cores ao desenvolver aplicações web com suporte a High Contrast.
Para verificar a taxa de contraste em uma aplicação finalizada, use Accessibility Scanner (Android), Xcode Accessibility Inspector (iOS) ou axe DevTools (web). Essas ferramentas encontram automaticamente elementos com contraste abaixo do WCAG AA e os destacam. O modo High Contrast deve estar ativado durante a auditoria — isso mostrará se o aumento de contraste do sistema é suficiente para atingir 7:1.
A função de mídia CSS prefers-contrast permite que páginas web adaptem estilos com base na configuração de contraste do sistema do usuário. A função aceita os valores: no-preference (padrão), more (usuário ativou High Contrast), less (usuário prefere contraste reduzido) e custom (ajuste fino). É suportada por todos os navegadores modernos desde 2022.
prefers-contrast: more — um sinal para desenvolvedores web: aumentar a taxa de contraste do texto, substituir fundos semitransparentes por opacos, reforçar bordas de elementos interativos e remover imagens de fundo de baixo contraste. O Safari iOS e o Chrome Android transmitem o valor more quando o modo High Contrast do sistema (Increase Contrast / High Contrast Text) está ativado.
Quando prefers-contrast: more está ativo, a página web deve minimizar o número de cores e preferir uma paleta preto e branco com cores de acento para destaque. Abaixo está um exemplo de adaptação CSS com substituição de cores, remoção de transparência e reforço de bordas.
/* Estilos base (no-preference) */
.card {
background: rgba(255, 255, 255, 0.9);
border: 1px solid rgba(0, 0, 0, 0.1);
color: #333;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
}
.button {
background: #0066CC;
color: #FFFFFF;
border: none;
padding: 12px 24px;
}
/* Alto contraste: more */
@media (prefers-contrast: more) {
.card {
background: #FFFFFF;
border: 2px solid #000000;
color: #000000;
box-shadow: none;
}
.button {
background: #004499;
outline: 2px solid #000000;
outline-offset: 2px;
}
.muted-text {
color: #000000; // Era #666 — agora preto
}
.overlay {
background: rgba(0, 0, 0, 0.8); // Era 0.4 — aumentado
}
}
/* Contraste reduzido: less */
@media (prefers-contrast: less) {
.card {
border: 1px solid rgba(0, 0, 0, 0.05);
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.04);
}
}No exemplo de CSS com prefers-contrast: more, o cartão recebe um fundo branco opaco, uma borda preta de 2px, o texto fica preto (#000 em vez de #333), e o botão fica azul escuro com um contorno preto para visibilidade. Com prefers-contrast: less (um caso raro — o usuário prefere cores suaves), o contraste é reduzido em vez disso.
Para adaptação completa de acessibilidade, prefers-contrast é combinado com prefers-color-scheme (tema claro/escuro). Quando prefers-color-scheme: dark e prefers-contrast: more estão ambos ativos, as cores devem ser branco sobre preto com acentos brilhantes. No modo claro — preto sobre branco. A combinação dessas funções de mídia produz 4 combinações que precisam ser testadas para cobertura completa de acessibilidade.
Perguntas Frequentes
High Contrast — um modo de acessibilidade que aumenta o contraste de cores dos elementos da interface para pessoas com deficiências visuais. No iOS, a configuração é chamada Increase Contrast (Settings > Accessibility > Display & Text Size), e no Android — High Contrast Text (Configurações > Acessibilidade). O modo substitui as cores por cores de alto contraste, remove a transparência e reforça as bordas.
Para verificar High Contrast no iOS, use UIAccessibility.isDarkerSystemColorsEnabled (Bool). Para rastrear alterações, inscreva-se em UIAccessibility.darkerSystemColorsStatusDidChangeNotification. O UIKit altera dinamicamente as cores quando o modo é ativado — use cores UIColor do sistema (systemBackground, label, secondaryLabel) para adaptação automática.
Android High Contrast Text aplica um esquema de cores invertido — texto branco sobre fundo preto com maior negrito. O modo usa uma sobreposição de tema e ColorMatrix para aumentar o contraste. O Material Design 3 adapta automaticamente as cores quando o High Contrast está ativo — os desenvolvedores só precisam usar componentes MD3 e Dynamic Color do Android 12+.
WCAG define taxas de contraste: o nível AA requer 4.5:1 para texto normal e 3:1 para texto grande (a partir de 18px ou 14px negrito). Nível AAA — 7:1 para texto normal e 4.5:1 para texto grande. O cálculo é realizado através da fórmula (L1 + 0.05) / (L2 + 0.05) usando a luminância relativa dos canais sRGB com pesos Rec.709.
A função de mídia CSS prefers-contrast: more permite que páginas web aumentem o contraste quando o High Contrast do sistema está ativo: substituir fundos rgba por opacos, reforçar bordas para 2px, tornar o texto preto sobre branco e desativar box-shadow. É combinado com prefers-color-scheme para adaptação completa sob tema escuro + High Contrast. Suportado por todos os navegadores modernos desde 2022.
Resumo
Vamos desenvolver um aplicativo móvel chave na mão
A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.
Leia também