Горизонтальная прокрутка на телефоне: как найти причину на сайте

Как отличить прокрутку таблицы от переполнения всей страницы, найти проблемный блок и проверить исправление без скрытия важного содержимого

В этой статье

Если сайт двигается вправо и влево на телефоне, сначала определите, что прокручивается: отдельная таблица или вся страница — исправление зависит от источника переполнения

Скрыть боковую прокрутку одним правилом CSS кажется быстрым решением — но вместе с полосой можно потерять столбец таблицы, часть текста или доступ к кнопке

Ниже — порядок диагностики для владельца сайта и ориентиры для разговора с разработчиком — точное изменение кода выбирается после воспроизведения ошибки

Когда прокрутка является нормальным поведением

Большая сравнительная таблица может прокручиваться внутри своего блока — это допустимое проектное решение, если посетитель понимает, что есть продолжение, и может прочитать все значения

При этом шапка, основной текст и нижние блоки остаются на месте — если сдвигается весь сайт и рядом возникает пустое поле, вероятно, какой-то элемент расширяет страницу

Проверьте это отдельно на таблице и на обычном абзаце — одинаковый жест пальцем в разных областях помогает описать наблюдение, но сам по себе не называет CSS-причину

Карусель, сравнение и широкая схема тоже могут иметь локальное горизонтальное движение — их поведение нужно оценивать по назначению, а не запрещать любую прокрутку

Генеративная иллюстрация: широкая таблица сравнения на экране телефона
Генеративная иллюстрация KEIVO — вымышленный интерфейс, не снимок клиентского сайта и не результат измерения

Как повторить ошибку

Запишите точный URL, браузер, телефон и ориентацию — откройте страницу заново и отметьте, появляется ли проблема сразу или после загрузки изображения, открытия меню либо поворота экрана

Найдите первый блок, около которого заметно смещение — сделайте снимок и сохраните действия, а не только итоговый пустой край

Если проблема возникает в одном встроенном сервисе, проверьте и страницу без взаимодействия с ним — внешняя карта, виджет или видео могут иметь собственные ограничения

В общем журнале мобильной проверки для этого есть поля — к задаче полезно приложить также момент, когда ошибка исчезает при увеличении ширины

Какие причины проверить разработчику

Частые кандидаты — фиксированная ширина, длинная неразрывная строка, широкое медиа, отступы поверх заданной ширины и элементы сетки, которые не могут сжаться до доступного пространства

Это список направлений диагностики, а не диагноз по внешнему виду — похожий пустой край может возникать у разных элементов и только в определённом состоянии

Наблюдение Что проверить Какой результат нужен
Широкая фотография Размер изображения и контейнера Изображение помещается, пропорции сохранены
Длинный адрес или код Правила переноса и назначение текста Текст можно прочитать или прокрутить в своём блоке
Таблица расширяет сайт Обёртку и минимальные размеры Все столбцы доступны без смещения страницы
Карточка не сжимается Минимальную ширину элемента flex/grid Сетка перестраивается без обрезки содержимого
Ошибка только при меню Ширину и положение открытой панели Панель доступна и не создаёт лишнего полотна
Ошибка после вставки виджета Размеры встроенного элемента Сервис помещается или имеет согласованный fallback

У flex- и grid-элементов автоматическая минимальная ширина иногда определяется содержимым — это поведение описано в справке MDN о min-width

Из этого не следует, что min-width: 0 нужно добавить всем элементам — правило помогает в конкретной модели компоновки и требует проверки текста и соседних блоков

Как разработчику сузить поиск

Сначала верните страницу к левому краю и воспроизведите нужное состояние — если ошибка появляется после открытия меню, оставьте его открытым — затем начинайте измерение

Шаг 1 — подтвердить, что расширяется документ

В DevTools откройте Console — следующие выражения только читают размеры текущей страницы, не отправляют данные и не меняют её код

({
  available: document.documentElement.clientWidth,
  content: document.documentElement.scrollWidth
})

В учебном примере результат может быть available: 360, content: 640 — доступная область уже содержимого, поэтому документу действительно требуется лишняя горизонтальная ширина

Если размеры равны, вернитесь к области жеста — возможно, двигается только таблица или карусель, а не документ — измерение нужно сопоставлять с тем, что вы наблюдали на экране

MDN определяет scrollWidth как ширину содержимого, включая часть, которая не видна из-за переполнения — это показатель размера, а не название виновного CSS-правила

Шаг 2 — найти кандидатов за границей

Выберите подозрительный блок инструментом выбора элемента в DevTools — на панели Elements посмотрите его размеры и расположение — начните с таблицы, изображения или панели, рядом с которыми заметили смещение

Для длинной страницы можно получить список элементов, чьи прямоугольники выходят за область просмотра — этот вспомогательный пример возвращает первые 30 кандидатов

(() => {
  const width = document.documentElement.clientWidth;
  return [...document.querySelectorAll('body *')]
    .map(node => ({ node, box: node.getBoundingClientRect() }))
    .filter(({ box }) => box.width > 0 &&
      (box.left < -1 || box.right > width + 1))
    .slice(0, 30)
    .map(({ node, box }) => ({
      node,
      left: Math.round(box.left),
      right: Math.round(box.right)
    }));
})()

Раскройте результат и перейдите к элементу на панели Elements — getBoundingClientRect показывает геометрию относительно области просмотра

Список не равен списку ошибок — в нём могут оказаться родительские обёртки, содержимое локально прокручиваемой таблицы, намеренно вынесенное за экран закрытое меню или декоративный элемент — псевдоэлемент вообще не является отдельным узлом этого списка

Задача этого шага — найти небольшой участок для проверки — если за экраном находятся контейнер, строка и таблица внутри него, начните с самой конкретной широкой части, а не удаляйте весь контейнер

Шаг 3 — проверить правило, которое задаёт лишний размер

В Styles или Computed у выбранного элемента найдите width, min-width, правила переноса, отступы и положение — затем посмотрите, какое из них действительно действует в текущем диапазоне ширины

Временно отключите одно подозрительное правило галочкой в DevTools — после этого снова сравните размеры документа и убедитесь, что содержимое осталось доступно

Если отключить сразу несколько правил или скрыть весь блок, причина останется неясной — вы увидите только исчезновение симптома вместе с частью страницы

Запишите подтверждение в задаче: какой элемент выбран, какое правило меняли, что стало с шириной и содержимым — временное изменение в DevTools ещё нужно перенести в исходный компонент и проверить в сборке

Разбор двух типичных причин

Широкая таблица внутри гибкой колонки

Учебная страница имеет основной материал и боковую колонку — внутри материала находится таблица с шестью столбцами — на телефоне таблица требует 640 пикселей и растягивает всю страницу

Добавление прокрутки вокруг таблицы может оказаться недостаточным, если сама flex-колонка не сжимается из-за своего минимального размера — тогда разработчик проверяет и таблицу, и её родителя

Для такой конкретной структуры решение может выглядеть так

.main-column {
  flex: 1;
  min-width: 0;
}

.comparison-scroll {
  max-width: 100%;
  overflow-x: auto;
}

.comparison {
  min-width: 640px;
}

Здесь .main-column — элемент flex-компоновки, .comparison-scroll — обёртка, а .comparison — сама таблица — имена и структура приведены для учебного разбора, это не изменение действующего сайта

Смысл решения: основная колонка может занять доступное место, таблица сохраняет необходимую ширину и прокручивается в своей области — все шесть столбцов остаются в документе

При приёмке проверьте не только жест пальцем, но и доступ к прокручиваемой области с клавиатуры — её назначение должно быть понятно, а последний столбец достижим

Изображение или строка шире своего блока

Другой учебный случай — в статье вставили иллюстрацию с фиксированной шириной 960 пикселей, хотя колонка на телефоне значительно уже — соседние абзацы помещаются, а общий документ расширяется после появления картинки

Выберите изображение, проверьте его фактический размер и действующее правило ширины — если причина подтверждена, исправление должно ограничить показ доступной областью и сохранить пропорции

Для длинной строки последовательность похожа, но само решение другое — нужно определить, допустим ли перенос текста или ему нужна локальная прокрутка, как у фрагмента кода

При этом нельзя менять значение адреса или артикула ради красивой строки — перенос относится к отображению, а копируемое содержание должно сохраняться

В обоих случаях повторите проверку после полной загрузки страницы — снимок до появления изображения или внешнего блока может ошибочно показать отсутствие переполнения

Как проверить, что найден именно источник

Верните временно отключённое правило — если прежняя ошибка снова появилась в тех же условиях, связь с этим правилом стала понятнее — затем повторите выбранное исправление и проверьте сохранность содержимого

Не останавливайтесь на одном совпадении — например, скрытие меню может уменьшить общую ширину, но проблема может находиться в широкой дочерней ссылке, а не в размере всей панели

В задаче полезно сохранить цепочку: состояние страницы → выбранный элемент → действующее правило → изменение размера → проверка текста и действий

После переноса исправления в исходники повторите измерение на собранной странице — временная правка в DevTools не подтверждает, что изменён нужный компонент или диапазон ширины в рабочем коде

Какой вывод сохранить после разбора

Для таблицы результатом может быть запись «все данные сохранены, прокручивается только блок сравнения» — для изображения «показ ограничен колонкой, соотношение сторон прежнее»

Это разные критерии — общее требование «убрать горизонтальный скролл везде» могло бы привести к обрезке таблицы, хотя изображения действительно должны помещаться целиком

Когда таблице нужен другой мобильный вид

Иногда переполнение вызвано не случайной ошибкой, а объёмом данных — шесть содержательных столбцов нельзя сделать удобными, просто сжав каждый до нескольких букв

Сначала уточните, как посетитель использует таблицу — сравнивает несколько вариантов по одному признаку или читает все условия одного варианта подряд

В первом случае сохранение общей таблицы может быть полезнее — важно видеть связь строк и столбцов, понимать наличие продолжения и добираться до края

Во втором случае можно обсудить карточки или последовательные группы — но при таком преобразовании каждое значение должно сохранить свою подпись, иначе читаемая карточка потеряет смысл исходной таблицы

Задача посетителя Что обсудить с исполнителем Что проверить после решения
Сравнить варианты по одной характеристике Общую таблицу с локальной прокруткой Понятны заголовки, доступны все столбцы
Прочитать условия одного варианта Карточки или группы с подписями Ни одно значение не потеряло своё название
Найти нужную строку в большом наборе Порядок, группировку или предусмотренный поиск Исходные данные сохранены, нужную запись можно найти
Посмотреть небольшую таблицу Обычную перестройку размеров и переносов Текст остаётся читаемым без ненужного движения

Такое решение лучше согласовать до CSS-правки — скрытие «второстепенных» столбцов на телефоне может удалить именно условие, ради которого человек открыл страницу

Если владелец выбрал новое представление, добавьте его в критерии приёмки — разработчик должен понимать, что теперь проверяется не только отсутствие лишней ширины, но и соответствие двух представлений данных

Как закрыть задачу учебной таблицы

В исходной записи сохранены ширина документа, состояние и шесть столбцов — после исправления проверяющий снова открывает тот же пример, измеряет документ и доходит до последней ячейки

Для выбранной локальной прокрутки результат записывается по двум уровням: основной документ помещается в экран, а область сравнения сохраняет собственное широкое содержимое

Затем проверяются соседняя ширина, клавиатура и другой адрес с тем же компонентом — если данные сохранились только на первой странице, общий компонент ещё нельзя считать принятым

В итоговой строке остаются фактические размеры и результат прохода — учебные 360 и 640 служили объяснением метода, а в реальной задаче должны быть собственные значения

Почему overflow-x: hidden не является готовым исправлением

overflow задаёт поведение содержимого, которое не помещается в контейнер — MDN различает обрезку и прокрутку, а не объявляет скрытие универсальным способом адаптации

Если спрятать всё выходящее за край у корня страницы, визуальный симптом может исчезнуть — при этом посетитель потеряет доступ к части интерфейса

Обрезка бывает намеренной у декоративного элемента — тогда нужно убедиться, что за пределами области нет текста, действий и видимого индикатора фокуса

Учебный пример: правая колонка с ценой вышла за экран — после overflow-x: hidden сайт перестал двигаться, но цена осталась за границей — такая правка не проходит приёмку

Как поставить задачу без назначения неверного CSS

Запишите наблюдение и требуемое поведение — не требуйте конкретного свойства, если причина ещё не найдена

Пример задачи: «На странице сравнения при узкой ширине вся страница прокручивается вправо — таблица содержит шесть столбцов — сохранить все данные и ограничить горизонтальную прокрутку областью таблицы, остальные блоки должны помещаться в экран»

Если бизнесу важнее сравнение без бокового движения, понадобится другое представление данных — это уже продуктовое или дизайнерское решение, которое следует согласовать отдельно

Для такого случая используйте матрицу адаптивной вёрстки — она помогает записать, какое поведение выбрано, до внесения изменений

Как проверить, что исправление закончено

Соберите короткую матрицу повторного прохода — она помогает не ограничиться одним удачным снимком

Условие Действие Признак исправления
Исходный телефон и ориентация Повторить шаги появления ошибки Документ помещается в доступную ширину
Узкая соседняя ширина Дочитать длинный текст и открыть таблицу Содержимое читается, данные не спрятаны
Поворот и возврат Дождаться перестроения и повторить жест Не остаётся лишняя ширина от прежнего состояния
Открытое меню Открыть, перейти, закрыть Панель не создаёт новое переполнение
Таблица с клавиатуры Дойти до области и последнего столбца Доступны заголовки и все значения
Полная загрузка Дождаться изображений и встроенных блоков Ошибка не возвращается после появления ресурса

Если исправлялся общий компонент таблицы или медиа, добавьте другой адрес с тем же компонентом — локально подобранная высота или обрезка могут выглядеть удачно только на одном содержимом

На странице вёрстки KEIVO описаны работы с интерфейсом — для обсуждения локальной проблемы достаточно начать с карточки ошибки, без предположения о полном редизайне

Скачать карточку ошибки переполнения — с учебным примером и отдельной проверкой сохранности данных

Что должно быть в карточке

Текстовая самопроверка: условия воспроизведения, область смещения, сохранность содержимого и соседние ширины — чек-лист не ищет CSS-ошибку автоматически

Источники проверены 31 октября 2026 года — примеры и порядок диагностики подготовлены редакцией KEIVO

Сохраните план перед обсуждением проекта

Вернуться в журнал