如何在Shiny中将独立复选框(非复选框组)水平对齐
解决方案:将Shiny中每组复选框改为水平排列
针对你需要将每个条件对应的两个复选框(Control和Normalizing control)水平并排显示的需求,有两种简单可行的方式:
方法1:通过Flex布局直接调整UI生成逻辑
在生成每组复选框时,将两个checkboxInput包裹在一个使用Flex布局的容器中,直接实现水平排列,同时保留组间垂直间距。
修改server中output$control_checkbox的代码如下:
output$control_checkbox <- renderUI({ num_conds <- as.integer(input$num_conds) lapply(1:num_conds, function(i) { div( # 用flex布局让内部元素水平排列,gap控制复选框间距 style = 'display: flex; gap: 20px; padding-bottom: 7.62px;', checkboxInput(paste0("CTLcheckbox", i), label = paste0("Control ", i), value = FALSE), checkboxInput(paste0("normCTLcheckbox", i), label = paste0("Normalizing control ", i), value = FALSE) ) }) })
方法2:通过全局CSS统一设置
如果希望用CSS统一控制样式,可在ui的tags$style中添加规则,将每个复选框的容器设为行内块元素:
tags$style(' .checkbox { display: inline-block; margin-right: 20px; /* 调整复选框间的水平间距 */ } .shiny-options-group{ margin-top: 5px !important; } '),
该规则会让所有checkboxInput生成的容器水平排列,同时保留组与组之间的垂直分隔。
效果说明
两种方法都能实现每组内复选框的水平并排,且完全保留每个复选框独立绑定对应textInput内容的功能,无需改用checkboxGroupInput。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

