Они не являются синонимами.
display:none
удаляет элемент из обычного потока страницы, позволяя заполнять другие элементы.
visibility:hidden
оставляет элемент в обычном потоке страницы таким образом, что он все еще занимает место.
Представьте, что вы в очереди, чтобы прокатиться в парке развлечений, и кто-то в очереди становится настолько хулиганом, что его срывает охрана. Все в очереди будут двигаться вперед на одну позицию, чтобы заполнить пустую ячейку. Это как display:none
.
Сравните это с аналогичной ситуацией, но тот, кто перед вами, надевает плащ-невидимку. При просмотре строки будет выглядеть, как будто есть пустое пространство, но люди не могут заполнить это пустое пространство, потому что кто-то еще там. Это как visibility:hidden
.