mukzer, span в данном случае не тег, а способ указать размер ячеек.
Вы указываете, что какой-то элемент занимает 2 колонки и пишете конкретные номера линий. Так элементы никуда не сдвинутся, потому что вынуждены выполнять эти указания.
Если вы укажете вместо этого grid-column: span 2, то они смогут перемещаться на свободное место с помощью dense
mukzer, у меня много терпения, но скоро начну ругаться
Сколько строк и колонок должны занимать элементы нужно задавать только через span, без указания номеров линий начала и конца.
просто либо span 2 либо span 3
у grid-column первое значение - число либо имя линии
но вам его не нужно указывать, вам нужно указать только сколько "клеточек" нужно занять
Думаю, в данном случае лучше использовать не grid, а flexbox. Там все картинки будут в одной последовательности, и при скрытии будут перестраиваться корректно.