Erstellen Sie in Quarto eine Funktion, die dem festen Tabellenkopf in RMarkdown ähnelt
P粉366946380
P粉366946380 2023-08-29 17:12:38
0
1
633
<p>Ich habe versucht, einen Sticky-Table-Header aus dem R-Paket <code>table1</code> zu rendern, was mir auch in RMarkdown gelungen ist. Allerdings scheint Quarto meine CSS-Datei nicht zu erkennen, oder (wahrscheinlicher) ich übersehe etwas. </p> <p>Ich habe die CSS-Dateien mit .rmd und .qmd eingefügt, um sie reproduzieren zu können. Ich habe auch Inline-HTML-Code eingefügt, um ein Bildlauffeld zu erstellen, damit der Tabellenkopf fixiert ist. </p> <p>style.css:</p> <pre class="brush:php;toolbar:false;">.Rtable1 th { Rand: 0; Textausrichtung: Mitte; Polsterung: 0,5ex 1,5ex; Rand: 0; Hintergrundfarbe: #D3D3D3; Farbe: Schwarz; Position: klebrig; oben: 0; Rand oben: 2pt einfarbig schwarz; Rand unten: 1pt einfarbig schwarz; }</pre> <p>car.rmd:</p> <pre class="brush:php;toolbar:false;">--- Titel: "Autos" Ausgabe: html_document: CSS: Styles.css --- „{r setup, include=FALSE} knitr::opts_chunk$set(echo = FALSE, message = FALSE) „ „{r} Bibliothek(Tabelle1) Bibliothek(tidyverse) Autos <- mtcars car$cars <- rownames(cars) Autos <- Autos |> mutieren( Gang = Faktor (Gang) ) „ <div style="height:450px; width:500; border:1.5px solid grey" „{r} Tabelle1::Tabelle1( ~ Autos |. Ausrüstung, Daten = Autos ) „ </div></pre> <p>car.qmd:</p> <pre class="brush:php;toolbar:false;">--- Titel: Autos Format: html: Inhaltsverzeichnis: wahr CSS: Styles.css Stricker: opts_chunk: Echo: falsch Nachricht: falsch --- „{r} Bibliothek(Tabelle1) Bibliothek(tidyverse) Autos <- mtcars car$cars <- rownames(cars) Autos <- Autos |> mutieren( Gang = Faktor (Gang) ) „ <div style="height:450px; width:500; border:1.5px solid grey" „{r} Tabelle1::Tabelle1( ~ Autos |. Ausrüstung, Daten = Autos ) „ </div></pre> <p>Dies ist die erste Frage, die ich gepostet habe, daher hoffe ich, dass ich einen guten Reprex eingereicht habe. Vielen Dank, dass Sie sich die Zeit zum Lesen genommen haben. Ich hoffe auf einen guten Rat. wünsche dir das Beste! </p>
P粉366946380
P粉366946380

Antworte allen(1)
P粉235202573

需要注意的一件事是,与R-markdown不同,quarto生成的HTML输出中,无论从代码块中生成什么,都会用两个连续的div包装起来,这两个div具有类名cellcell-output-display

而类cell-output-display具有CSS属性overflow-x设置为auto,这是表头的position: sticky不起作用的主要原因(点击这里查看原因)。

因此,我们只需要覆盖类cell-output-display的这个属性即可解决问题。

cars.qmd

---
title: Cars
format: 
  html:
    toc: true
    css: styles.css
knitr:
  opts_chunk: 
    echo: false
    message: false
---

```{r}
library(table1)
library(tidyverse)

cars <- mtcars
cars$cars <- rownames(cars)
cars <-
  cars |> 
  mutate(
    gear = factor(gear)
  )
```

::: {.sticky-table}

```{r}
table1::table1(
  ~ cars | gear,
  data = cars
)
```

:::

(请注意,我使用了pandoc divs而不是内联html标签来定义一个我们将要覆盖该属性的类。)

styles.css

.sticky-table {
  height:450px; 
  width: 500; 
  overflow:auto; 
  border:1.5px solid gray;
  padding:1.5%
}

.sticky-table .cell-output-display {
  overflow-x: unset !important;
}


.Rtable1 th {
  border: 0;
  text-align: center;
  padding: 0.5ex 1.5ex;
  margin: 0;
  background-color: #D3D3D3;
  color: black;
  position: sticky;
  top: 0;
  border-top: 2pt solid black;
  border-bottom: 1pt solid black;
}


Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage