Мысль вот в чем - если указать размеры, браузер выделит под изображение место на странице и когда оно загрузится не будет скачкообразного смещения элементов. При использовании качественных, объемных изображения, пользователь может уже начать изучать текстовую информацию на странице и тут вдруг бац, браузер дошел до картинки, текст который читал пользователь сместился, пользователь вынужден искать где он читал. Однако непосредственно в html указывать размеры не нужно. Это можно сделать в css и уже там реализовывать адаптивность. Закономерный вопрос - скачкообразное смещение в этом случае все же может возникнуть. Для того чтобы этого гарантировано избежать есть различные методики. Например critical path css. Возвращаясь к html, с введением тега picture html то же получил инструменты для адаптивности. Рекомендую изучить.
Сложно... Мое предложение такое - сделать свою тень, а не использовать box-shadow. https://codepen.io/aliencash/pen/vjJVgm?editors=1100
Тут я создаю подложку и размываю ее с помощью filter: blur. Расчеты размеров, адаптивность пожалуйста сами, я только принцип показал.
Вам нужно каждой ячейке дать обертку с фиксированным шириной и высотой. Обертке дать position: relative, а вложенным элементам position: absolute; https://jsfiddle.net/xdt50yd6/1/
Не будет работать. Т.к. :visited ограничен грубо говоря только значениями цвета текста и фона. Максимум что можно сделать задать одинаковый цвет фону и тексту, но цвет фона должен быть определен заранее в селекторе a:link. Иначе не сработает.