原始文章链接
http://shiny.rstudio.com/articles/css.html
写在前面
shiny 是基于Bootstrap 3.3.1,所以想使用其他css或者Bootstrap4 的样式,就需要自己添加了。
三种方法
一、在head中链接css文件
- 将css文件放到同级www文件夹下面,通过 theme = “bootstrap.css” 来引入css。如下图。但是如果你想用shinythemes 带的样式就要写成这样,theme = shinythemes::shinytheme(“cosmo”),这样我们只能选其一。

shinyUI(fluidPage(theme = "bootstrap.css",headerPanel("New Application"),sidebarPanel(sliderInput("obs", "Number of observations:",min = 1, max = 1000, value = 500)),mainPanel(plotOutput("distPlot"))))
- 当然还可以通过tags对象在head中链接CSS文件,没有上面提到的冲突。需要注意的一点是,www文件夹下面文件引入时,路径直接为“filename”,而不是“www/filename”,引入图片等都是这样。
shinyUI(fluidPage(tags$head(tags$link(rel = "stylesheet", type = "text/css", href = "bootstrap.css")),headerPanel("New Application"),sidebarPanel(sliderInput("obs", "Number of observations:",min = 1, max = 1000, value = 500)),mainPanel(plotOutput("distPlot"))))
对应的HTML就如下
<!DOCTYPE html><html><head><link type="text/css" rel="stylesheet" href="bootstrap.css"/></head><body></body></html>
二、直接在head中写入css样式
- 使用style标签
shinyUI(fluidPage(tags$head(tags$style(HTML("@import url('//fonts.googleapis.com/css?family=Lobster|Cabin:400,700');h1 {font-family: 'Lobster', cursive;font-weight: 500;line-height: 1.1;color: #48ca3b;"))),
- 使用函数 includeCSS,这种方法要求读入的css文件不必放在www文件夹下。这个方法和方法一中通过tags$link方法的区别是,此方法直接将css文件中所有的文本copy过来写入到head中,而不是一个链接。

shinyUI(fluidPage(includeCSS("styles.css"),headerPanel("New Application"),sidebarPanel(sliderInput("obs", "Number of observations:",min = 1, max = 1000, value = 500)),mainPanel(plotOutput("distPlot"))))
三、直接写在不同的元素中而不是全局的head中
例如想修改某一个h标签的样式。
headerPanel(h1("New Application",style = "font-family: 'Lobster', cursive;font-weight: 500; line-height: 1.1;color: #4d3a7d;")),
最后
注意css样式冲突时的优先级就行了。
