Уберите у обёртки указание ширины (это блочный элемент, он и так растянется на всю доступную ширину) и добавьте отрицательный margin слева и справа, равный margin элементов. Вжух. Вполне нормальная практика.
Альтернатива - использовать гриды, либо исповедовать ваш способ, но не стоит писать руками, есть
специализированные инструменты для этого.
Стили получаются избыточные (хотя, в целом, не сильно больше, чем руками написать), зато работает железобетонно и с точки зрения DX великолепно.