You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Streamlit文本输入添加换行以对齐表单输入框?

解决Streamlit多行Label导致输入框不对齐的问题

针对同一行三个text_input因Label行数不同导致输入框错位的问题,有几种可行的解决方法:

方法1:利用HTML换行+允许HTML渲染

Streamlit的text_input支持在Label中使用HTML标签,开启unsafe_allow_html=True参数即可实现Label的强制换行。对于短Label的组件,可添加空换行标签占位,让所有Label高度统一:

import streamlit as st

cols = st.columns(3)

# 两行Label的组件
cols[0].text_input("bla bla bla<br>bla bla bla", unsafe_allow_html=True)
# 一行Label的组件,添加空换行占位
cols[1].text_input("bla bla bla<br>&nbsp;", unsafe_allow_html=True)
cols[2].text_input("bla bla bla<br>&nbsp;", unsafe_allow_html=True)

方法2:自定义CSS统一Label容器高度

注入自定义CSS,强制所有text_input的Label容器高度一致,无论Label内容多少,输入框都会自动对齐:

import streamlit as st

# 注入自定义CSS
st.markdown("""
<style>
div[data-testid="stTextInput"] div[data-testid="stMarkdownContainer"] {
    min-height: 48px; /* 调整高度适配两行Label的高度 */
    display: flex;
    align-items: flex-end;
}
</style>
""", unsafe_allow_html=True)

cols = st.columns(3)
cols[0].text_input("bla bla bla\nbla bla bla")
cols[1].text_input("bla bla bla")
cols[2].text_input("bla bla bla")

方法3:拆分Label与输入框布局

手动将Label和输入框分开布局,先统一放置所有Label,再在下方放置输入框,彻底避免Label行数影响输入框位置:

import streamlit as st

# 第一行放所有Label
label_cols = st.columns(3)
label_cols[0].markdown("bla bla bla<br>bla bla bla", unsafe_allow_html=True)
label_cols[1].text("bla bla bla")
label_cols[2].text("bla bla bla")

# 第二行放所有输入框
input_cols = st.columns(3)
input_cols[0].text_input("", label_visibility="collapsed")
input_cols[1].text_input("", label_visibility="collapsed")
input_cols[2].text_input("", label_visibility="collapsed")

注意:方法1中直接用\n换行无效,必须使用HTML的<br>标签并开启unsafe_allow_html;方法3中通过label_visibility="collapsed"隐藏输入框自带的Label,避免重复显示。

内容的提问来源于stack exchange,提问作者DarknessFalls

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 18:06:30