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

Đang mở Phù hợp với người mới
#15,304 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
2/5
Thời gian dự kiến
1-3 giờ
Mức phù hợp với người mới
82/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
sass, scss
Lĩnh vực
build-system

Hướng nghiên cứu

Bắt đầu với src/resources/formats/html/bootstrap/_bootstrap-variables.scss tại hai kiểm tra được liên kết trong issue, rồi so sánh chúng với kiểm tra null hiện có cho pre-color. Tái hiện vấn đề bằng các ví dụ custom.scss và index.qmd được cung cấp, sử dụng quarto render index.qmd. Công việc hoàn tất khi các theme khai báo $body-bg hoặc $body-color là null được render với các giá trị dự phòng đã được tài liệu hóa.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

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
Ngôn ngữ chính
JavaScript
Star
6.1k
Fork
478
Merge trung bình
17 giờ 53 phút
Pull request đã merge (30 ngày)
135

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của quarto-dev/quarto-cli

Tất cả issue của quarto-dev/quarto-cli

Issue tương tự

Thêm issue về JavaScript

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.