Dark Mode
How to use and customize dark mode in the Arsxy theme
The Arsxy theme includes a built-in dark mode feature that provides a comfortable reading experience in low-light environments. This documentation explains how to enable, configure, and customize dark mode.
Enabling Dark Mode
Dark mode is enabled by default in the Arsxy theme. Users can toggle between light and dark modes using the theme toggle button in the site header.
To control dark mode availability in your site configuration, use the following settings in your _config.yml
:
features:
dark_mode: true # Enable dark mode toggle button
auto_dark_mode: true # Respect user's system preferences
Respecting System Preferences
When auto_dark_mode
is set to true
, the theme will automatically switch to dark mode if the user’s operating system or browser is set to prefer dark color schemes. This is done using the prefers-color-scheme
media query.
Customizing Dark Mode Colors
The dark mode color scheme can be customized by modifying the CSS variables in your site’s stylesheets.
Default Dark Mode Variables
The default dark mode color scheme is defined in _sass/_dark-mode.scss
:
:root {
--dark-bg-color: #121212;
--dark-text-color: #f5f5f5;
--dark-link-color: #8ab4f8;
--dark-border-color: #333;
--dark-code-bg: #1e1e1e;
--dark-code-color: #f8f8f2;
--dark-blockquote-bg: #1e1e1e;
--dark-blockquote-border: #444;
--dark-header-bg: #1a1a1a;
--dark-header-text: #fff;
--dark-footer-bg: #1a1a1a;
--dark-footer-text: #ccc;
--dark-toc-bg: #1e1e1e;
--dark-toc-border: #333;
}
Customizing Dark Mode
To customize dark mode, create a _sass/_custom.scss
file in your site and override the default variables:
:root {
// Override dark mode variables
--dark-bg-color: #0d1117;
--dark-text-color: #e6edf3;
--dark-link-color: #58a6ff;
// Add more custom variables as needed
}
Then, import your custom SCSS file in your assets/css/main.scss
:
---
---
@import "variables";
@import "base";
@import "layout";
@import "typography";
@import "syntax-highlighting";
@import "dark-mode";
@import "custom"; // Import your custom styles last
Dark Mode JavaScript
The theme includes JavaScript to handle dark mode toggling and persistence. The dark mode setting is saved in the user’s localStorage so their preference is remembered between visits.
Here’s a simplified version of how the dark mode toggle works:
// Check for saved dark mode preference or system preference
const prefersDarkMode = window.matchMedia('(prefers-color-scheme: dark)').matches;
const storedTheme = localStorage.getItem('theme');
// Set initial theme
if (storedTheme === 'dark' || (storedTheme === null && prefersDarkMode)) {
document.documentElement.classList.add('dark-mode');
}
// Add event listener to theme toggle button
document.querySelector('.theme-toggle').addEventListener('click', () => {
document.documentElement.classList.toggle('dark-mode');
// Save preference to localStorage
const isDarkMode = document.documentElement.classList.contains('dark-mode');
localStorage.setItem('theme', isDarkMode ? 'dark' : 'light');
});
Advanced Dark Mode Customization
For advanced customization of dark mode, you can:
- Add additional dark mode variables for custom components
- Create dark mode variants of your images and swap them using CSS
- Implement transition effects when switching between modes
Example: Different Images for Dark Mode
<div class="logo-container">
<img src="/assets/images/logo-light.png" class="light-mode-image">
<img src="/assets/images/logo-dark.png" class="dark-mode-image">
</div>
.logo-container {
position: relative;
img {
height: 40px;
}
.dark-mode-image {
display: none;
}
.light-mode-image {
display: block;
}
}
.dark-mode {
.logo-container {
.dark-mode-image {
display: block;
}
.light-mode-image {
display: none;
}
}
}