2025, Nov 11 09:01
Динамический фон valuebox в Quarto по RGB: правильный способ
Разбираем, почему color в valuebox не принимает CSS и как корректно задать фон в Quarto по RGB: конвертируем в hex и передаем строку. Пример кода на Python.
Задать цвет фона valuebox в Quarto кажется простым, пока не пытаешься управлять им динамически через RGB. Если передать в поле color CSS-декларацию, бокс её не воспримет. Ниже — как подключить всё корректно, не вступая в конфликт с фреймворком.
Проблема
У вас есть дашборд Quarto, и вы хотите задать фон valuebox с помощью RGB. Записать в свойство color строку в стиле CSS кажется логичным, но это не работает как ожидается.
---
title: "Sample"
format: dashboard
---
```{python}
#| содержимое: valuebox
#| заголовок: "Пример бокса"
dict(value=10, color="background-color: rgb(255,0,0)")
```
Что именно идёт не так
Поле color у valuebox — это не строка со стилем CSS. Передача декларации вида background-color: rgb(255,0,0) избыточна и синтаксически неуместна для этого поля. Использование rgb(255,0,0) напрямую выглядит разумно, но и оно здесь не даёт ожидаемого результата. Надёжный путь — передавать цвет в формате, который компонент стабильно распознаёт.
Решение
Преобразуйте тройку RGB в шестнадцатеричный цвет и передайте эту hex-строку в поле color. Значение останется динамическим и будет соответствовать тому, что valuebox принимает без сбоев.
---
title: "Sample"
format: dashboard
---
```{python}
#| содержимое: valuebox
#| заголовок: "Пример бокса"
dict(value=10, color='#%02x%02x%02x' % (255, 0, 0))
```
Это выражение форматирования для указанных RGB даёт #ff0000 и корректно задаёт фон.
Почему это важно
Дашбордам часто нужно раскрашивать метрики на основе данных. Если цвет нельзя надёжно контролировать, условные визуализации, пороги и предупреждения начинают вводить в заблуждение. Формат hex обеспечивает предсказуемый рендеринг без попыток парсить CSS в поле, которое не принимает стилевые декларации.
Выводы
Когда нужны динамические фоны для valuebox в дашборде Quarto, не передавайте CSS-декларации. Конвертируйте RGB в hex и подставляйте hex-строку в свойство color. Этот подход прост, стабилен и избавляет от сюрпризов при рендеринге.