forced-colors
Също: High Contrast Mode, HCM, Windows High Contrast, Forced Colors Mode
CSS медия заявката, която открива режими на висок контраст, конфигурирани от потребителя — главно Windows High Contrast Mode, а също Chrome/Edge Forced Colors. Авторите я използват, за да адаптират рендирането, когато системните цветови предпочитания заменят стиловете на сайта.
forced-colors е CSS медия заявката, която открива кога потребителят е включил режим на принудителни цветове — обикновено Windows High Contrast Mode (HCM), при който уебсайтовете заменят избраните цветове с малка системна палитра, определена от потребителя (бяло на черно, черно на бяло, жълто на черно или потребителска палитра).
Режимът на принудителни цветове се използва широко от потребители с намалено зрение, по-специално тези с чувствителност към светлина или изключително високи изисквания за контраст. Ползва се и като лично предпочитание от потребители без документирано увреждане, които просто предпочитат висок контраст.
Какво всъщност прави HCM
Когато Windows High Contrast Mode е включен, операционната система заменя цветовете на сайта с малък набор от системни цветове:
Canvas— фонът на страницата.CanvasText— цветът на текста по подразбиране.LinkText— цветът на връзките.VisitedText— цветът на посетените връзки.ButtonText— текстът на бутоните.ButtonFace— фонът на бутоните.HighlightText/Highlight— цветовете на избрания текст.GrayText— деактивиран текст.Mark/MarkText— маркиран текст.
Браузърите в режим на принудителни цветове заменят повечето дефинирани от автора цветове с тези системни цветове. Премахват също фоновите изображения и нулират редица визуални свойства до системните стойности по подразбиране.
Това е умишлено: потребителят е избрал палитра с контраст, подходяща за него, и не желае сайтът да я отменя. Задачата на сайта е да съдейства, а не да се противопоставя.
CSS медия заявката
Авторът открива режима на принудителни цветове чрез:
@media (forced-colors: active) {
/* потребителят е в HCM или еквивалентен режим; адаптирайте CSS тук */
}
Свързаната стойност prefers-color-scheme е независима — потребител може да е в режим на тъмни принудителни цветове (системна палитра бяло на черно) и заявката му prefers-color-scheme все пак да върне light, защото не е избрал изрично „тъмен режим”.
Какво се обърква в production среда
- Фоновите изображения стават невидими. Принудителните цветове премахват фоновите изображения. Ако индикаторът „кликнете за разгъване” е SVG като фоново изображение без резервен текст, потребителят не вижда нищо. Решение: използвайте
<svg>или вградени икони сcurrentColor, за да приемат цветаCanvasText; или предоставете текстов заместител. - Рамките изчезват. Някои рамки се премахват или се заменят с рамки в цвят
CanvasText. Визуалната йерархия, основана на фини цветове на рамките, изчезва. Проверете рамките на компонентите в HCM. - Индикаторите на фокуса спират да работят. Потребителски пръстени на фокуса, нарисувани с
box-shadow, губят цвета си. Използвайтеoutline(който се запазва) или открийте принудителните цветове и предоставете заместител, съобразен със системните цветове. - Елементи, видими само при задържане, изчезват напълно. Компоненти тип подсказка, разчитащи на фонови изображения при задържане, се провалят.
forced-color-adjust: none. Някои дизайнери използват това CSS свойство, за да изключат обработката на принудителните цветове за конкретен елемент. Почти винаги е грешен избор — означава, че потребителят губи цветовете, поискани изрично от него. Прилагайте го пестеливо, само за чисто декоративни елементи, при които идентичността на дизайна е съществена (лога, специфични за марката икони), и никога за текст или интерактивни контроли.
Как да тествате
Windows: Настройки → Достъпност → Теми с контраст → изберете една от вградените палитри (Aquatic, Desert, Dusk, Night sky) и презаредете страницата. Chrome/Edge ще приемат системната настройка; Firefox използва собствен превключвател за принудителни цветове в настройките на браузъра.
Повечето проблеми се установяват при първоначалния преглед: липсващи икони, невидими рамки, счупени индикатори на фокуса. Отстранявайте ги чрез CSS, съобразен със системните цветове, в рамките на медия заявката forced-colors: active.