а) лучше использовать первый вариант, потому что так принято. Когда вы нажимаете указателем мыши по кнопке в любой популярной ОС ничего не происходит. Происходит только тогда, когда вы отпустите указатель находясь на той же кнопке. Это даёт вам, например, шанс передумать и убрать указатель с кнопки. Тогда действие не произойдет. Отклонение от такого поведения будет восприниматься странным.
Кажется, я понял. Вам необходимо сделать, чтобы в четных строках было на один элемент меньше, чем в нечетных и при этом элементы были бы выровнены по-центру.
Если я правильно понял, то средствами CSS этого добиться не возможно для переменного числа элементов в строке (т.е. при изменении размеров окна), поскольку в nth-child() вы пишете 9n-3 исходя из того, что у вас 5 элементов в нечетных строках + 4 в четных.
Но можно реализовать с помощью простого скрипта: codepen.io/benderskiy/pen/Iqefr
Получить полный путь файла вы не сможете из соображений безопасности. Так же вы не сможете выполнить сравнение содержимого файлов на клиенте. Если вы боитесь, что файлы с одинаковыми именами и размером — разные по содержанию, сравните еще lastModifiedDate... Если у вас паранойя — сравните файлы на сервере))
б) return false; в вашем случае не сработает. Почитайте тут: nazz.me/return-false-preventdefault-stoppropagation