Since the built-in “Logo Inverse” field only works for sticky scroll, not for dark mode, here is an easy solution that worked for me:
1. Structure
Inside your header container (the one with your logo and navigation):
- Add a Div → name it
logo-wrapper - Inside the
logo-wrapperadd two Logo elements:- Logo 1 (normal / light mode) → add class:
hide-on-dark - Logo 2 (inverse / dark mode) → add class:
hide-on-light
- Logo 1 (normal / light mode) → add class:
Logo settings (both logos):
- Width: same value (e.g. 260px)
- Height: Auto
logo-wrapper settings (recommended):
- Display: Flex
- Align main axis: Center
- Align cross axis: Center
2. CSS (Global)
Go to Bricks → Settings → Custom Code → Custom CSS and paste:
/* Dark Mode Logo Switching */
html[data-brx-theme="dark"] .hide-on-dark,
body.bricks-is-frontend html[data-brx-theme="dark"] .hide-on-dark {
display: none !important;
}
html:not([data-brx-theme="dark"]) .hide-on-light,
body.bricks-is-frontend html:not([data-brx-theme="dark"]) .hide-on-light {
display: none !important;
}
Remember to click “Save” after pasting the CSS.
3. Final Steps
Note: In the builder canvas you will only see the light logo. Preview/Render the site to see both logos switching correctly.
- Open the rendered page (Preview).
- Hard refresh the page (
Ctrl/Cmd + Shift + R) - Test with the native Toggle – Mode element
Done. Works with Auto mode and remembers the user’s choice (localStorage).