Theme compilation fails when a theme declares `$body-bg` or `$body-color` as `null`

Offen Anfängerfreundlich
#15,304 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Anfängerfreundlichkeit
82/100
Issue-Typ
Bug
Klarheit
Klar beschrieben
Aktivitätsstatus
Aktiv
Tech-Stack
sass, scss
Bereich
build-system

Rechercherichtung

Beginne mit src/resources/formats/html/bootstrap/_bootstrap-variables.scss bei den beiden im Issue verlinkten Prüfungen und vergleiche sie mit der vorhandenen Nullprüfung für pre-color. Reproduziere den Fehler mit den bereitgestellten Beispielen custom.scss und index.qmd mit quarto render index.qmd. Als erledigt gilt die Aufgabe, wenn Themes, in denen $body-bg oder $body-color als null deklariert sind, mit den dokumentierten Fallbacks gerendert werden.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

bootstrap bug themes
I have:
  • searched the issue tracker for similar issues
  • installed the latest version of Quarto CLI
  • formatted my issue following the Bug Reports guide
Bug description

Quarto's Bootstrap variables test variable-exists(body-bg) and variable-exists(body-color) to decide whether a theme has set them.
variable-exists() is true for a variable that holds null, so a theme that declares $body-bg: null !default; makes $body-contrast-bg null, and compilation stops.

The pre-color check a few lines above already handles this case with variable-exists(pre-color) and $pre-color != null:

A null declaration at the root is what Dart Sass itself recommends.
A theme that sets $body-bg only under some condition has to declare it first, or use !global inside the @if, which Dart Sass flags as deprecated:

DEPRECATION WARNING [new-global]: As of Dart Sass 2.0.0, !global assignments won't be able to declare new variables.

Recommendation: add `$body-bg: null` at the stylesheet root.

Following that advice breaks the render, so the theme is stuck with the deprecation.
I also tried $primary: null !default;, and that one renders.

Steps to reproduce

custom.scss:

/*-- scss:defaults --*/
$body-bg: null !default;

index.qmd:

---
title: "Null body-bg"
format:
  html:
    theme: [default, custom.scss]
---

Hello.

Run quarto render index.qmd.
Replace $body-bg with $body-color for the second error.

Actual behavior

With $body-bg: null !default;:

ERROR: Theme file compilation failed:

Error: $color: null is not a color.
    ╷
827 │   $red: _linear-channel-value(quarto-color.red($color));
    │                               ^^^^^^^^^^^^^^^^^^^^^^^^
    ╵
  ... 827:31   luminance()
  ... 837:13   quarto-contrast()
  ... 854:19   tone()
  ... 508:7    theme-contrast()

With $body-color: null !default; and the default theme:

Error: $color1: null is not a color.
Expected behavior

A null value counts as "not set", as it already does for $pre-color.
Quarto falls back to $white and $gray-900, and the document renders.

Your environment
  • IDE: none, command line.
  • OS: macOS 27.2.
Quarto check output

Reproduced with a development build of main at 089ba530b.
The two lines above are the same at the v1.11.9 tag.

Quarto 99.9.9
[✓] Checking environment information...
      Quarto cache location: /Users/mcanouil/Library/Caches/quarto
      Project: none found (single-file mode)
[✓] Checking versions of quarto binary dependencies...
      Pandoc version 3.10.0: OK
      Dart Sass version 1.107.1: OK
      Deno version 2.9.8: OK
      Typst version 0.15.1: OK
[✓] Checking versions of quarto dependencies......OK
[✓] Checking Quarto installation......OK
      Version: 99.9.9
      commit: 089ba530b3ed4ec156a355d41b6b7de2db3e44ea
      Path: /Users/mcanouil/Projects/quarto-dev/quarto-cli/package/dist/bin
[✓] Checking tools....................OK
      TinyTeX: v2026.07
      Chrome Headless Shell: (not installed)
      VeraPDF: (not installed)
[✓] Checking LaTeX....................OK
      Using: TinyTex
      Path: /Users/mcanouil/Library/TinyTeX/bin/universal-darwin
      Version: 2026
[✓] Checking Chrome Headless....................OK
      Using: Chrome from QUARTO_CHROMIUM
      Path: /Applications/Brave Browser.app/Contents/MacOS/Brave Browser
[✓] Checking basic markdown render....OK
Vorherrschende Sprache
JavaScript
Sterne
6.1k
Forks
478
Ø Merge
17 Std. 53 Min.
Gemergte PRs (30 T.)
135

Entwicklungsumgebung

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus quarto-dev/quarto-cli

Alle Issues in quarto-dev/quarto-cli

Ähnliche Issues

Weitere Issues zu JavaScript

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.