如何为不同颜色的不同Rmarkdown kable表着色

时间:2015-12-29 10:34:50

标签: css r knitr r-markdown

以下是我正在使用的代码。唯一的问题是我的桌子都是相同的颜色,这是我的第二个颜色代码(#ffff99)。如何保持两个表的背景不同。

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

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

1 个答案:

答案 0 :(得分:3)

HTML / CSS不会以您隐式假设的方式呈现。如果渲染遵循以下过程,您的代码将按预期工作:

  
      
  • 设置:“表格为绿色”
  •   
  • 输出绿表
  •   
  • 设置:“表格为黄色”
  •   
  • 输出黄表
  •   

但事实并非如此。实际发生的是:

  
      
  • 设置:“所有表格都是绿色”
  •   
  • 输出表1
  •   
  • (表1为绿色)
  •   
  • 设置:“所有表格都是黄色”
  •   
  • 输出表2
  •   
  • (表1 表2为黄色)
  •   

作为解决方案,您可以使用两个不同的类:

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

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

(最好,类名应该描述原因为什么要使用该类,而不是类目前的样子,但没有进一步的信息“lightgreen”和“yellow”是最好的我提出的名字。)

现在你需要告诉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>