更改 bslib 卡角半径

Change bslib Card Corner Radius

提问人:Curtis 提问时间:11/17/2023 更新时间:11/19/2023 访问量:48

问:

我希望使 bslib 卡的一角更圆润。这里有 3 张卡片,我使用 class 参数来更改卡片的元素,前两张是边框半径,最后一张是背景颜色。

library(shiny)
library(bslib)
# UI logic
    ui <- page_fluid(
      card(
        max_height = 200,
        card_header("Card 1"),
        card_body("STUFF"),
        class = "card-border-radius: 50rem;"
      ),
      card(
        max_height = 200,
        card_header("Card 2"),
        card_body("STUFF"),
        class = "border-radius: 20%;"
      ),
      card(
        max_height = 200,
        card_header("Card 3"),
        card_body("STUFF"),
        class = "bg-dark"
      )
    )

# Server logic
    server <- function(input, output, session) {
        
    }

shinyApp(ui, server)
r 闪亮的 bslib

评论


答:

4赞 Kat 11/17/2023 #1

更新

我没有注意到卡头中的颜色延伸到卡边框之外。为了解决这个问题,我添加了另一个类,以便它强制标头继承自其父级。

这个新课程遵循与我原始答案相同的解释。

library(shiny)
library(bslib)

# UI logic
ui <- page_fluid(
  tags$style(HTML(".card2 {border-radius: 2rem;}
                   .card2h {  /* force inheritance */
                        border-top-left-radius: inherit !important;
                        border-top-right-radius: inherit !important;
                  }")), # creating class style
  card(
    max_height = 200,
    card_header("Card 1"),
    card_body("STUFF")
  ),
  card(
    max_height = 200,
    card_header("Card 2", class = "card2h"),
    card_body("STUFF"),
    class = "card2"       # <<<----- applying the new class
    ),
  card(
    max_height = 200,
    card_header("Card 3"),
    card_body("STUFF"),
    class = "bg-dark"
  )
)

# Server logic
server <- function(input, output, session) {}

shinyApp(ui, server)

enter image description here



原文是这样写的

您可以使用的一种方法是 和 添加基于类的样式。tags$style(HTML("

在解释中,它表示这是 CSS 的位置,但只有特定的预编程文本连接到在后台运行的类标签。因此,您可以研究您要查找的内容是否是预先编写的众多类之一或者您可以创建自己的类。bslib::cardclassbslib

以下示例说明了如何创建和应用自己的类样式。

library(shiny)
library(bslib)

# UI logic
ui <- page_fluid(
  tags$style(HTML(".card2 {border-radius: 2rem;}")), # creating class style
  card(
    max_height = 200,
    card_header("Card 1"),
    card_body("STUFF")
  ),
  card(
    max_height = 200,
    card_header("Card 2"),
    card_body("STUFF"),
    class = "card2"       # <<<----- applying the new class
    ),
  card(
    max_height = 200,
    card_header("Card 3"),
    card_body("STUFF"),
    class = "bg-dark"
  )
)

# Server logic
server <- function(input, output, session) {}

shinyApp(ui, server)

enter image description here

如果您有任何问题或遇到任何问题,请告诉我。

评论

0赞 Curtis 11/18/2023
太棒了 - 谢谢!看起来必须单独定义标头,因为有一个灰色部分仍然具有旧的半径。将此 card2 传递给标头类似乎不起作用。使用 inspect 查看卡片和标题的 HTML,看起来更改起来可能并不简单。
0赞 Kat 11/19/2023
直到你指出来,我才注意到那里的浅灰色。我也将添加一个更新来解决这个问题。
0赞 Curtis 12/1/2023
一个真正很棒的答案,谢谢!