From 2be799b19d2e0abe827519e18cc9265f970a6add Mon Sep 17 00:00:00 2001 From: Max Ronzhin Date: Mon, 3 Aug 2026 01:56:27 +0300 Subject: [PATCH] =?UTF-8?q?fix(room):=20=D1=8D=D0=BC=D0=BE=D0=B4=D0=B7?= =?UTF-8?q?=D0=B8-=D0=BF=D0=BE=D0=BF=D0=BE=D0=B2=D0=B5=D1=80=20=D0=B2=20?= =?UTF-8?q?=D1=87=D0=B0=D1=82=D0=B5=20=E2=80=94=205-=D1=8F=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BB=D0=BE=D0=BD=D0=BA=D0=B0=20=D0=B2=D1=8B=D0=BB=D0=B5=D0=B7?= =?UTF-8?q?=D0=B0=D0=BB=D0=B0=20=D0=B7=D0=B0=20=D1=80=D0=B0=D0=BC=D0=BA?= =?UTF-8?q?=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Настоящая причина (подтверждена вживую через getBoundingClientRect): `.chat-input-row button` (стиль круглой кнопки «Отправить», width/height 42px) красил размер и кнопкам эмодзи внутри поповера — они тоже лежат в .chat-input-row. Сетка на 5 колонок по 42px требовала ~238px при фиксированной ширине попапа 220px, лишнее уезжало вправо за рамку. Явные width/height: auto на .chat-emoji-option перебивают унаследованный размер нужной специфичностью, дальше квадрат считает aspect-ratio от реальной ширины колонки (~36px). Заодно — max-width на попап и overflow:hidden/white-space:nowrap на кнопки как общая страховка от переполнения на очень узких экранах. --- frontend/src/styles/room.css | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/frontend/src/styles/room.css b/frontend/src/styles/room.css index 1a548bc..dc1543c 100644 --- a/frontend/src/styles/room.css +++ b/frontend/src/styles/room.css @@ -605,13 +605,18 @@ video[data-lk-source='screen_share'] { object-fit: contain; background: #000; } .chat-emoji-wrap .chat-emoji-trigger:disabled { opacity: 0.5; cursor: default; } /* 5 колонок × 6 строк — ровно 30 эмодзи в EMOJI_OPTIONS (ChatPanel.tsx), без - неполной последней строки. */ + неполной последней строки. `max-width` — страховка на случай совсем узкого + viewport: фикс-ширина 220px без потолка сама по себе не переполняется при + текущей раскладке (триггер у левого края панели, попап растёт вправо в + свободное место — проверено геометрией и вживую), но фиксированный размер + совсем без ограничителя — плохая практика сама по себе. */ .chat-emoji-popover { position: absolute; bottom: calc(100% + var(--space-2)); left: 0; z-index: 50; width: 220px; + max-width: calc(100vw - 2 * var(--space-4)); display: grid; grid-template-columns: repeat(5, 1fr); gap: 4px; @@ -622,14 +627,30 @@ video[data-lk-source='screen_share'] { object-fit: contain; background: #000; } box-shadow: var(--shadow-room-panel); } .chat-emoji-popover .chat-emoji-option { + /* Настоящая причина переполнения (найдена по факту, не по догадке — + `getBoundingClientRect` показал кнопки 42×42px при колонке ~36px): + `.chat-input-row button` (специфичность 0,1,1) задаёт ВСЕМ кнопкам + формы `width/height: 42px` — это правило круглой кнопки «Отправить», + а кнопки эмодзи в поповере тоже лежат внутри `.chat-input-row` + (см. комментарий выше про гонку специфичности, она чинилась для + цвета в 0.0.19, но не для размера). Без явного `width`/`height` здесь + побеждает тот 42px, сетка на 5 колонок раздувается за 220px попапа, + и последняя колонка уезжает вправо за рамку. `min-width: 0` сам по + себе НЕ помогает — конфликт не в авто-минимуме грида, а в explicit + width, который обязательно нужно перебить явно. */ + width: auto; + height: auto; + min-width: 0; aspect-ratio: 1; display: flex; align-items: center; justify-content: center; + overflow: hidden; background: none; border: none; font-size: 20px; line-height: 1; + white-space: nowrap; border-radius: var(--radius-md); cursor: pointer; }