css 发光数据表中的标题方向

mkh04yzy  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(115)

我已经在我闪亮的应用程序中使用DT有一段时间了。我想知道是否有任何选项(简单的方法)当文本很长时更改表格标题方向(例如将所有列名旋转45度或其他),这是一个问题,当你在一个表中有很多列时。谢谢,这里有一个简短的例子:

library(shiny)
library(DT)
ui <- fluidPage(
  mainPanel(
    tabsetPanel(
      tabPanel("Table", br(),
               dataTableOutput("myTable"))
    ), width = 9
  )
)

server <- function(input, output) {
  output$myTable <- renderDataTable({
  test <- data.frame(1:20, letters[1:20], stringsAsFactors = FALSE)
  colnames(test) <- c("This is a long name", "This column name is much more longer!")
  datatable(test, rownames = FALSE, options = list(autoWidth = TRUE, searching = TRUE, lengthMenu = list(c(5, 10, 25, 50, -1), c('5', '10', '25', '50', 'All')), pageLength = 10)) # %>% formatStyle(names(test))
  })
}

shinyApp(ui, server)

字符串

nom7f22z

nom7f22z1#

这里有一种方法可以将标题旋转90度。

library(DT)
library(shiny)

headerCallback <- c(
  "function(thead, data, start, end, display){",
  "  var $ths = $(thead).find('th');",
  "  $ths.css({'vertical-align': 'bottom', 'white-space': 'nowrap'});",
  "  var betterCells = [];",
  "  $ths.each(function(){",
  "    var cell = $(this);",
  "    var newDiv = $('<div>', {height: 'auto', width: cell.height()});",
  "    var newInnerDiv = $('<div>', {text: cell.text()});",
  "    newDiv.css({margin: 'auto'});",
  "    newInnerDiv.css({",
  "      transform: 'rotate(180deg)',",
  "      'writing-mode': 'tb-rl',",
  "      'white-space': 'nowrap'",
  "    });",
  "    newDiv.append(newInnerDiv);",
  "    betterCells.push(newDiv);",
  "  });",
  "  $ths.each(function(i){",
  "    $(this).html(betterCells[i]);",
  "  });",
  "}"
)

ui <- fluidPage(
  DTOutput("table")
)

server <- function(input, output){
  output[["table"]] <- renderDT({
    datatable(iris,  
              options = list(
                headerCallback = JS(headerCallback),
                columnDefs = list(
                  list(targets = "_all", className = "dt-center")
                )
              ))
  })
}

shinyApp(ui, server)

字符串


的数据

mmvthczy

mmvthczy2#

我有和OP一样的问题,但不想使用接受的答案,因为我想在我的用例中尽可能减少代码(我不明白它是如何工作的!)使用Stéphane Laurent的答案加上来自herehere的一些信息,我可以使用这个方法从第2列开始旋转我的标题:

library(DT)
library(shiny)

ui <- fluidPage(
  DTOutput("table")
)

server <- function(input, output){
  output[["table"]] <- renderDT({
    datatable(iris,  
              options = list(
              initComplete = JS(# JS to modify the table headers
                 "function(settings, json) {",
                 "$('#scenario_param_compare thead tr th:gt(0)').css({'writing-mode':'vertical-rl','text-align':'right'})",
                 "}")
          ))
  })
}

shinyApp(ui, server)

字符串
gt(0)将css应用于所有大于0的列,所以不是第一列,请参阅here
CSS也可以打包在一个源代码.css文件中,你可以用.addClass('your-new'class')替换.css(...),这使得它更整洁。
我不确定我的方法是否能做到Stephane的方法所能做到的一切,但它对我很有效,我认为它涵盖了最初的Q。

相关问题