Ankhena, Антон Литвиненко, я не придал этому значения, может быть зря. Тут скорее вопрос про то, правильно ли я позиционировал, мне надо было это написать.
Я видел это так, что либо надо между каждым рядом ставить br (хотя мне это решение не нравится, для позиционирования CSS же), либо ограничивать ширину div.photos так, чтобы он вмещал только два блока .photo с их отступами.
Но если бы я оставлял display: block для div.photos и ограничивал его по ширине, пришлось бы блокам .photo делать display: inline-block. Но тогда max-width 520px не работало бы, ведь между инлайн блоками невидимые отступы, которые превышают max-width, и чтобы их убрать пришлось бы делать font-size: 0. Но всё равно если уменьшить margin до 10px у .photo, блоки будут слева и придётся снова высчитывать max-width, и только justify-content: center для флексов может это исправить, так что флексы тут выглядят лучше.
Про семантику не знаю, хотите сказать для них лучше элемент figure даже без figcaption?