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.
安装与使用
请根据来源仓库和你的 AI 工具说明安装此技能。先阅读技能文件和依赖要求,再添加到工作流。
查看来源 ↗使用指南技能说明
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
使用示例
查看来源仓库中的使用示例与配置说明。
查看来源 ↗来源历史
- 收录时间
- 2026-01-20
- 索引更新时间
- 2026-02-04
- Branch
- main
收录与同步日期属于本站记录。源码修改历史请查看来源仓库。
GitHub ↗chat Comments (0)
Sign in to join the discussion and leave a comment.
No comments yet. Be the first to share your thoughts!