スキル一覧に戻る
streamlit

using-streamlit-layouts

by streamlit

A collection of agent skills for development of Streamlit apps.

6🍴 1📅 2026年1月23日
GitHubで見るManusで実行

SKILL.md


name: using-streamlit-layouts description: Structuring Streamlit app layouts. Use when placing content in sidebars, columns, containers, or dialogs. Covers sidebar usage, column limits, horizontal containers, dialogs, and bordered cards. license: Apache-2.0

Streamlit layout

How you structure your app affects usability more than you think.

The sidebar should only contain navigation and app-level filters. Main content goes in the main area.

# GOOD
with st.sidebar:
    date_range = st.date_input("Date range")
    region = st.selectbox("Region", ["All", "US", "EU", "APAC"])
    st.caption("App v1.2.3")
# BAD: Too much content in sidebar
with st.sidebar:
    st.title("Dashboard")
    st.dataframe(df)  # Don't put main content here
    st.bar_chart(data)

What goes in sidebar:

  • Global filters (date range, user selection, region)
  • App info (version, feedback link)

What stays out:

  • Main content, charts, tables, results

Columns: max 4, set alignment

Don't use too many columns—they get cramped.

# GOOD
col1, col2 = st.columns(2)

# OK with alignment
cols = st.columns(4, vertical_alignment="center")

# BAD: Too many, cramped
col1, col2, col3, col4, col5, col6 = st.columns(6)

Horizontal containers for button groups

Use st.container(horizontal=True) instead of columns for button groups:

with st.container(horizontal=True):
    st.button("Cancel")
    st.button("Save")
    st.button("Submit")

Aligning elements

Use horizontal_alignment on containers to position elements:

# Center elements
with st.container(horizontal_alignment="center"):
    st.image("logo.png", width=200)
    st.title("Welcome")

# Right-align elements
with st.container(horizontal_alignment="right"):
    st.button("Settings", icon=":material/settings:")

# Distribute evenly (great for button groups)
with st.container(horizontal=True, horizontal_alignment="distribute"):
    st.button("Cancel")
    st.button("Save")
    st.button("Submit")

Options: "left" (default), "center", "right", "distribute"

Bordered containers

Use border=True on containers for visual grouping. See building-streamlit-dashboards for dashboard-specific patterns like KPI cards.

with st.container(border=True):
    st.subheader("Section title")
    st.write("Grouped content here")

Dialogs for focused interactions

Use @st.dialog for UI that doesn't need to be always visible:

@st.dialog("Confirm deletion")
def confirm_delete(item_name):
    st.write(f"Are you sure you want to delete **{item_name}**?")
    if st.button("Delete", type="primary"):
        delete_item(item_name)
        st.rerun()

if st.button("Delete item"):
    confirm_delete("My Document")

When to use dialogs:

  • Confirmation prompts
  • Settings panels
  • Forms that don't need to be always visible

Spacing

Control spacing between elements with gap on containers:

# Remove spacing for tight list-like UIs
with st.container(gap=None, border=True):
    for item in items:
        st.checkbox(item.text)

# Explicit gap sizes
with st.container(gap="small"):
    ...

Add vertical space with st.space:

st.space("small")   # Small gap
st.space("medium")  # Medium gap
st.space("large")   # Large gap
st.space(50)        # Custom pixels

Width and height

Control element sizing:

# Stretch to fill available space (equal height columns)
cols = st.columns(2)
with cols[0].container(border=True, height="stretch"):
    st.line_chart(data)
with cols[1].container(border=True, height="stretch"):
    st.dataframe(df)

# Shrink to content size
st.container(width="content")

# Fixed pixel sizes
st.container(height=300)

References

スコア

総合スコア

55/100

リポジトリの品質指標に基づく評価

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

+10
説明文

100文字以上の説明がある

0/10
人気

GitHub Stars 100以上

0/15
最近の活動

3ヶ月以内に更新がある

0/10
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

0/5
タグ

1つ以上のタグが設定されている

0/5

レビュー

💬

レビュー機能は近日公開予定です