customizing-streamlit-theme
Customizing Streamlit app themes. Use when changing app colors or appearance. Covers config.toml theming, avoiding CSS, and targeted styling when necessary.
Installation
Suivez les instructions du dépôt pour votre agent. Consultez les fichiers et dépendances avant l’installation.
Voir la source ↗GuidesInstructions
Streamlit theming
Custom colors and styling. Stick to config.toml—avoid CSS.
Basic theme
Configure your app's colors in .streamlit/config.toml:
[theme]
base = "light" # or "dark"
primaryColor = "#FF4B4B"
backgroundColor = "#FFFFFF"
secondaryBackgroundColor = "#F0F2F6"
textColor = "#262730"
font = "sans serif"
Core options:
-
base→ Start from"light"or"dark"theme -
primaryColor→ Interactive elements (buttons, links, sliders) -
backgroundColor→ Main content area -
secondaryBackgroundColor→ Sidebar and widget backgrounds -
textColor→ All text -
font→"sans serif","serif", or"monospace"
Separate light and dark themes
Define both themes and let users choose:
[theme.light]
primaryColor = "#FF4B4B"
backgroundColor = "#FFFFFF"
secondaryBackgroundColor = "#F0F2F6"
textColor = "#262730"
[theme.dark]
primaryColor = "#FF6B6B"
backgroundColor = "#0E1117"
secondaryBackgroundColor = "#262730"
textColor = "#FAFAFA"
When both are defined, users can switch between them in the settings menu.
Sidebar styling
Style the sidebar separately:
[theme]
base = "light"
primaryColor = "slateBlue"
backgroundColor = "mintCream"
[theme.sidebar]
backgroundColor = "aliceBlue"
secondaryBackgroundColor = "skyBlue"
Detect current theme
if st.context.theme.base == "dark":
# Dark mode specific logic
chart_color = "#FF6B6B"
else:
chart_color = "#FF4B4B"
Use st.context.theme.base to detect if the user is in light or dark mode.
Avoid custom CSS/HTML
Custom CSS makes apps hard to maintain and breaks with Streamlit updates.
# BAD: Will break with updates
st.markdown("""
<style>
.stButton button {
background-color: #FF4B4B;
border-radius: 20px;
}
</style>
""", unsafe_allow_html=True)
# GOOD: Use config.toml
# [theme]
# primaryColor = "#FF4B4B"
When you must use CSS
If you absolutely need custom styling, use the key= parameter to create targetable CSS classes.
st.text_input("Username", key="username")
st.button("Submit", key="submit")
Generated CSS classes:
.st-key-username { ... }
.st-key-submit { ... }
Apply styles:
st.html("""
<style>
.st-key-submit button {
width: 100%;
}
</style>
""")
Only use this as a last resort.
References
Exemples
Consultez les exemples du dépôt source.
Voir la source ↗Historique source
- Date d’indexation
- 2026-01-20
- Mise à jour de l’index
- 2026-02-04
- Branch
- main
Les dates concernent ce répertoire. Consultez le dépôt pour l’historique du code.
GitHub ↗chat Comments (0)
Sign in to join the discussion and leave a comment.
No comments yet. Be the first to share your thoughts!