Почему ломается верстка при 767px и как это исправить
В вашем коде описаны медиа-запросы для разных разрешений, но при достижении ширины экрана 767px и ниже макет перестаёт быть корректным. Это типичная ситуация, когда CSS-правила конфликтуют или не учитывают все изменения. Давайте разберём основные причины и способы их устранения.
Основные причины поломки адаптива на 767px
Чаще всего проблема кроется в неправильном порядке медиа-запросов или в том, что некоторые стили не переопределяются при уменьшении экрана. В вашем случае есть несколько ключевых моментов:
- Конфликт свойств
flex-direction: для.motivation-cardи.motivation-item:nth-child(even) .motivation-cardуказаноflex-direction: column-reverse, что может ломать порядок элементов. - Недостаточная настройка
grid-template-columns: на 767px вы ставите 2 колонки для.training-types-list, но если контент не помещается, сетка может вылезти за границы. - Отсутствие
box-sizing: если не заданbox-sizing: border-box, паддинги и бордеры увеличивают ширину блоков, вызывая горизонтальный скролл.
Как исправить: пошаговая инструкция
1. Проверьте порядок медиа-запросов
Убедитесь, что запросы идут от большего разрешения к меньшему (или наоборот, но последовательно). В вашем коде сначала 1919px, потом 1280px, затем 1024px и 767px - это правильный нисходящий порядок. Однако следите, чтобы более специфичные правила не перезаписывались случайно.
2. Добавьте box-sizing: border-box для всех элементов
В начале CSS-файла пропишите:
*, *::before, *::after { box-sizing: border-box; }Это гарантирует, что паддинги не увеличат ширину блоков за пределы родителя.
3. Исправьте flex-direction для .motivation-card
На 767px у вас flex-direction: column-reverse для всех карточек и даже для чётных элементов. Это может переворачивать содержимое неожиданным образом. Попробуйте задать flex-direction: column для мобильной версии, а реверс оставьте только для конкретных случаев, если это действительно нужно.
4. Настройте сетку .training-types-list
На 767px вы используете grid-template-columns: repeat(2, 1fr). Если элементы слишком широкие, добавьте gap или overflow: hidden для родителя. Также проверьте, что у дочерних элементов нет фиксированной ширины, мешающей адаптации.
5. Проверьте высоту и отступы
В медиа-запросе для 767px у .header-menu-link высота 32px, а для 1024px - 50px. Убедитесь, что все тексты и иконки помещаются в эти размеры. Если нужно, используйте min-height вместо height.
Дополнительные советы для стабильного адаптива
- Используйте относительные единицы (
%,vw,rem) вместо пикселей. - Для изображений всегда ставьте
max-width: 100%иheight: auto. - Тестируйте каждое разрешение в инструментах разработчика браузера.
- Избегайте вложенных медиа-запросов - это усложняет поддержку.
После внесения этих правок проверьте верстку на 767px и ниже. Если проблема осталась, вероятно, какой-то элемент имеет фиксированную ширину или неправильный position. Пересмотрите весь CSS для мобильной версии и убедитесь, что каждый блок адаптируется корректно.