Top.Mail.Ru
Ответы

Как сделать минимальный отступ по вертикали в CSS?

я пыбтаюсь сделать свой сайт на streamlit, мне надо, чтобы не было гигантского отступа по вертикали в сообщени. пример в фото

могу скинуть текущий код, может ли кто-то помочь поправить его?

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
st.markdown("""
    <style>
        /* Ограничиваем ширину интерфейса 960px */
        .main > div[data-testid="stBlock"] {
            max-width: 960px;
            margin: 0 auto;
        }
        
        .block-container {
            padding-top: 2rem;
            padding-bottom: 2rem;
            max-width: 960px;
        }

        /* Общие стили для пузырей сообщений */
        .message-bubble {
            padding: 10px 10px !important;
            border-radius: 20px;
            word-wrap: break-word;
            overflow-wrap: break-word;
            white-space: pre-wrap;
            margin: 0 !important; /* Убрали margin-bottom, теперь управляем через обертку */
            color: #FFFFFF;
            font-family: 'Helvetica Neue', Arial, sans-serif;
            line-height: 1.35;
            display: inline-block;
            width: auto !important;
            max-width: 900px !important;
            min-width: 50px;
            height: auto !important;
            min-height: auto !important;
        }
        
        /* Мои сообщения (справа) - #333333 */
        .my-message {
            background-color: #333333;
            border-bottom-right-radius: 1px;
        }
        
        /* Чужие сообщения (слева) - #4d4d4d */
        .other-message {
            background-color: #4d4d4d;
            border-bottom-left-radius: 1px;
        }

        /* Контейнер для сообщений */
        .messages-container {
            width: 100%;
            overflow: hidden;
            margin-bottom: 0px; /* Уменьшили */
        }

        /* Имя пользователя */
        .username-tag {
            font-weight: bold;
            color: #AAAAAA;
            margin-right: 5px;
        }

        /* Блок файла внутри сообщения */
        .file-container {
            margin-top: 5px;
            padding-top: 5px;
            border-top: 1px solid rgba(255, 255, 255, 0.2);
            display: flex;
            align-items: center;
            gap: 15px;
            font-size: 0.9em;
            flex-wrap: nowrap;
            min-width: 250px;
            max-width: 100%;
        }

        .file-info-text {
            display: flex;
            flex-direction: column;
            flex: 1;
            min-width: 0;
            overflow: hidden;
        }

        .file-name {
            font-weight: bold;
            color: #FFFFFF;
            word-break: break-word;
            white-space: normal;
        }

        .file-size {
            color: #CCCCCC;
            font-size: 0.85em;
            white-space: nowrap;
        }

        /* Контейнер для сообщения с файлом и кнопкой */
        .file-message-wrapper {
            display: inline-block;
            width: auto;
            max-width: 900px;
            margin-bottom: 4px !important; /* НАСТРОЙКА: Отступ снизу для файлов */
            margin-top: 4px !important;    /* НАСТРОЙКА: Отступ сверху для файлов */
        }
        
        /* Выравнивание вправо для моих сообщений */
        .file-message-wrapper.right {
            float: right;
            clear: both;
            text-align: right;
        }
        
        /* Выравнивание влево для чужих сообщений */
        .file-message-wrapper.left {
            float: left;
            clear: both;
            text-align: left;
        }

        /* Контейнер для кнопки скачивания */
        .download-btn-wrapper {
            display: inline-block;
            width: auto !important;
            min-width: fit-content !important;
            margin-top: 0;
            margin-bottom: 0; /* Убрали лишний отступ */
        }

        /* Убираем отступы у кнопки Streamlit */
        .stDownloadButton {
            width: auto !important;
            min-width: fit-content !important;
            display: inline-block;
            margin: 0 !important;
            padding: 0 !important;
        }

        .stDownloadButton > button {
            background-color: rgba(255, 255, 255, 0.1);
            color: white;
            border: 1px solid rgba(255, 255, 255, 0.3);
            padding: 8px 12px;
            border-radius: 8px;
            font-size: 0.9em;
            white-space: nowrap;
            width: auto !important;
            min-width: fit-content !important;
            transition: all 0.2s ease;
            margin: 0 !important;
        }
        .stDownloadButton > button:hover {
            background-color: rgba(255, 255, 255, 0.2);
            border-color: rgba(255, 255, 255, 0.5);
        }

        /* Системные сообщения */
        .system-message {
            display: flex;
            justify-content: center;
            align-items: center;
            margin: 15px 0;
            color: #888;
            font-size: 0.85em;
            clear: both;
        }
        .system-message hr {
            flex: 1;
            margin: 0 10px;
            border: none;
            border-top: 1px solid #444;
        }
        
        /* Настройки формы отправки */
        .chat-form {
            max-width: 960px;
            margin: 20px auto;
            padding: 0 10px;
            clear: both;
        }
        
        .stFileUploader {
            width: 100%;
        }
        .stFileUploader > div {
            width: 100%;
        }
        .stFileUploader label {
            width: 100%;
        }
        .stFileUploader [data-testid="stFileUploaderDropzone"] {
            width: 100%;
            min-height: 38px;
            padding: 3px 10px;
        }
        
        /* Стили для textarea (авто-высота) */
        .stTextArea textarea {
            background-color: #3a3a3a;
            color: #FFFFFF;
            border: 1px solid #555;
            border-radius: 8px;
            padding: 10px 12px;
            font-family: 'Helvetica Neue', Arial, sans-serif;
            font-size: 16px;
            resize: none;
            min-height: 20px;
            overflow-y: hidden;
            transition: border-color 0.2s;
            width: 100%;
        }
        .stTextArea textarea:focus {
            border-color: #777;
            outline: none;
        }
        /* Убираем лишний отступ у контейнера */
        .stTextArea {
            width: 100%;
        }

        /* Поднимаем кнопку отправки выше и выравниваем по центру */
        .stFormSubmitButton > button {
            margin-top: 0 !important;
            height: 46px !important;
            align-self: center;
        }
        
        /* Выравнивание элементов формы по вертикали */
        div[data-testid="column"] {
            display: flex;
            align-items: center;
        }
        /* Для колонки с файлом тоже */
        div[data-testid="column"]:nth-child(2) {
            align-items: center;
        }

        /* Очистка float */
        .clearfix::after {
            content: "";
            clear: both;
            display: table;
        }
        
        /* Контейнер для текстовых сообщений */
        .text-message-wrapper {
            display: inline-block;
            margin-bottom: 4px !important; /* НАСТРОЙКА: Отступ снизу для текста */
            margin-top: 4px !important;    /* НАСТРОЙКА: Отступ сверху для текста */
        }
        .text-message-wrapper.right {
            float: right;
            clear: both;
        }
        .text-message-wrapper.left {
            float: left;
            clear: both;
        }
        
        /* ID для автопрокрутки */
        #chat-bottom {
            clear: both;
        }

        /* === ГЛАВНОЕ ИСПРАВЛЕНИЕ === */
        /* Streamlit по умолчанию добавляет большие отступы к блокам. 
        Это правило принудительно уменьшает их для всех блоков внутри чата */
        div[data-testid="stVerticalBlock"] > div {
            margin-bottom: 1px !important;
            margin-top: 1px !important;
        }
        
        /* Если сообщения рендерятся через st.markdown, убираем их стандартные отступы */
        .stMarkdown {
            margin-bottom: 0px !important;
            margin-top: 0px !important;
        }
    </style>
    """, unsafe_allow_html=True)

По дате
По рейтингу
Аватар пользователя
Мастер
1мес

у тебя проблема не в .message-bubble, а в самом streamlit, он пихает отступы через внутренние блоки

ты почти правильно копаешь, но главный виновник вот этот контейнер:
stVerticalBlock + element-container

streamlit добавляет margin не к твоим div, а к обертке вокруг них.

добавь в конец css вот это 👇 (это обычно фиксит гигантские вертикальные зазоры):

123456789101112131415161718
/* убираем реальные отступы streamlit */
div[data-testid="element-container"] {
    margin-bottom: 0rem !important;
    margin-top: 0rem !important;
    padding-bottom: 0rem !important;
    padding-top: 0rem !important;
}

/* иногда именно тут сидит зазор */
div[data-testid="stVerticalBlock"] {
    gap: 0rem !important;
}

/* markdown контейнер */
div[data-testid="stMarkdownContainer"] {
    margin: 0 !important;
    padding: 0 !important;
}

еще момент (очень важный):
у тебя используются float:left/right, а streamlit плохо с ними живет → он резервирует лишнюю высоту блока.

если хочешь идеально плотный чат, лучше заменить float на flex:

123456789101112
.text-message-wrapper {
    display: flex;
    width: 100%;
}

.text-message-wrapper.right {
    justify-content: flex-end;
}

.text-message-wrapper.left {
    justify-content: flex-start;
}

коротко почему лагало:
streamlit считает каждый markdown отдельным блоком + float ломает расчет высоты → появляется "воздух".

после этих 2 фиксов обычно отступ становится буквально 1-2px как в мессенджерах.

Аватар пользователя
Ученик
1мес

понял, спасибо, все заработало

Аватар пользователя
Ученик
1мес

чоэто хз там же есть адаптивный режим

Аватар пользователя
Ученик
1мес

у нейросети есть контекст диалога если что

Аватар пользователя
Ученик
1мес

так он тупой и ниче не исправляет если что



Видео по теме