Как покрасить разные таблицы Rmarkdown в разные цвета

Ниже приведен код, который я использую. Единственная проблема заключается в том, что обе мои таблицы имеют одинаковый цвет, что является моим вторым цветовым кодом (#ffff99). Как я могу сохранить фон обеих таблиц разным.

<style>
table {
background-color:#eff8e5;
}
</style>
``` {r}
kable(df1)
```

<style>
table {
background-color:#ffff99;
}
</style>
``` {r}
kable(df2)
```

1 ответ

Решение

HTML/CSS не отображается так, как вы неявно предполагаете. Ваш код будет работать так, как ожидается, если рендеринг будет следовать такой процедуре

  • набор: "столы зеленые"
  • выходной зеленый стол
  • набор: "столы желтые"
  • выходной желтый стол

Но это не так. Что на самом деле происходит:

  • установить: "все столы зеленые"
  • выходная таблица 1
  • (таблица 1 зеленая)
  • установить: "все таблицы желтые"
  • выходная таблица 2
  • (таблица 1 и таблица 2 желтые)

В качестве решения вы можете использовать два разных класса:

<style>
.lightgreen {
  background-color:#eff8e5;
}

.yellow {
  background-color:#ffff99;
}
</style>

(Оптимально, имена классов должны описывать причину, по которой класс используется, а не то, как класс выглядит в настоящее время, но без дополнительной информации "светло-зеленые" и "желтые" являются лучшими именами, которые я придумал).

Теперь вам нужно сказать kable что таблицы должны получить эти классы.

Опция 1:

kable(df1, format = "html", table.attr = "class=\"lightgreen\"")
kable(df2, format = "html", table.attr = "class=\"yellow\"")

Однако это лишает большую часть (вероятно желаемого) стандартного макета таблицы.

Вариант 2. Добавьте контейнер вокруг таблиц и таблиц стилей в этом контейнере.

<style>
.lightgreen table {
  background-color:#eff8e5;
}

.yellow table {
  background-color:#ffff99;
}
</style>

<div class = "lightgreen">

```{r}
library(knitr)

df1 <- data.frame(a=1:10, b=2:11)
kable(df1)
```

</div>

<div class = "yellow">
```{r}
df2 <- data.frame(a=1:10, b=2:11)
kable(df2)
```

</div>
Другие вопросы по тегам