Theme compilation fails when a theme declares `$body-bg` or `$body-color` as `null`
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ả
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
- Không có Dockerfile hay tệp Docker Compose
- Có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- 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.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của quarto-dev/quarto-cli
-
accessibility bug embed
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 85/100
quarto-dev/quarto-cli#15306 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
accessibility bug code-blocks html themes
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
quarto-dev/quarto-cli#15303 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
accessibility brand bug dark-mode
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
quarto-dev/quarto-cli#15301 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bootstrap bug html tables
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
quarto-dev/quarto-cli#15300 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug html
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
quarto-dev/quarto-cli#15297 ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của quarto-dev/quarto-cli
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 66/100
processing/p5.sound.js#132 ·
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
jellyfin/jellyfin-web#8791 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug triage
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 68/100
fjaeckel/seriesoftubes#306 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
ai bug good first issue
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 73/100
hugomrdias/playwright-test#753 ·
Maintainer thường phản hồi trong vòng 1 ngày