1. <section class="main">
Это не секция в любом случае.
Это либо div, который нужен для группировки не имеющей смысла, либо тег main для основного содержимого страницы.
2. <p>Название статьи:</p>
Это не p, это <label>.
Для подписей полей формы используют label и связывают его с инпутом. Во-первых, для скринридеров, во-вторых, чтобы клик по подписи ставил фокус в поле. https://developer.mozilla.org/en-US/docs/Learn/For...
3.
<a href="logout.php">
<button>Выйти</button>
</a>
Всегда проверяйте код валидатором https://validator.w3.org/nu/
Кнопки нельзя вкладывать в ссылки. И наоборот нельзя.
Выберите что-то одно. Видимо, в вашем случае ссылку.
4. Кнопки удобнее делать тегом button, а не input. Вам же легче будет стилизовать.
Вариант с input работающий но устаревший.
1. Иконки сжимаются, потому что забыли запретить это делать flex-shrink: 0
2. С центрированием вы ошибаетесь. Оно работает. Но дело в том, что родитель блоков .tab тоже флекс и его элементы занимают ширину по контенту. Соответственно, без разницы как вы там выравниваете внутренности, ведь свободного места для выравнивания всё равно нет и результат будет одинаковый при любом значении.
Если вы хотите выравнивать текст внутри tab__text, то для этого есть обычный text-align.
Когда не понятно что происходит, обводите элементы рамочками (полупрозрачный outline и отрицательный outline-offset на толщину обводки). Если сложно пользоваться инструментами разработчика.
p.s. эти иконки это не img.
Их нужно либо убрать в стили (псевдоэлементами - идеально) либо скрыть от скринридеров с помощью aria-hidden.
Подумайте сами.
Толщина границ: обычно не зависит от ширины вьюпорта. Как была задана дизайнером, например, в 1px, так и останется. (Бывают, конечно, разные случаи, но в большинстве так).
В чем будете задавать?
Карточки в каталоге: не знаем сколько поместится и пишем minmax(300px, 1fr). Это в чем? В px или в %?
Либо нужно выстраивать всегда по 4 карточки в ряд. Можем задать ширину по 25%, можем написать repeat(4, 1fr).
Можем, конечно и в пикселях и написать кучу media.
Так и разбирайте каждый блок. Что в нем и от чего зависит.
На всякий случай, кроме % и px полно других интересных единиц измерения.
А также функции min, max и clamp.
Рекомендую изучить перед тем как начать писать.
Если самостоятельно 100 не умножить на 1.1, то ок.
И если не подходят @media по aspect-ratio, min-aspect-ratio, max-aspect-ratio и orientation, то тоже ок.
Но успех в том, что теперь @media вам уже подходят. Это хорошо.
Возьмем горизонтальный вьюпорт. Т.е. минимальный размер это высота. 1rem = 1vmin = 1vh.
Считаем (для простоты даже забьем на min-height 100%):
wrapper
- padding - 4rem
лого
- высота 7.8
- margin 5
title
- 5строк по 10 = 50
колесо
- высота 62
Складываем и получаем 128.8vh
Каким образом, по вашей логике, это должно было поместиться в 100?
После раздумий можно вернуться к моим первым комментариям с инструментами, которые могут помочь.
Гриды, кстати, ещё с их min-content или minmax.
Павел Орловский, для начала прислушаться к просьбе из комментария: сделать песочницу с видимой проблемой на codepen.io
Добавить её в вопрос и потом позвать.
Этот-то как раз подходит в любом случае. (Тут скорее вопрос, можно ли решить без него. )
Например, плагины типа fittext.
Но, скорее всего придется допиливать для работы не только с шириной, но и с высотой.
Ещё вариант работающий всегда: это запихать всё в svg, задать contain, а текст доступно скрыть.
Поддерживаю всё, что сказал Сергей в ответе.
И плюс дополнительный вопрос: зачем вам нужно указывать ширину body. Если с ней ничего не делать, то и так всё будет хорошо. Нужно только обнулить margin у body
- отдельными псевдиками от элементов и расположить гридами/флексами со сдвигами или похуже абсолютами.