- выводим все блоки с абсолютным позиционированием
- скриптом определяем сколько блоков помещается в ширину на странице
- рассчитываем координаты каждого блока пробегаясь в цикле по элементам.
Вот так.
Если нужно могу скинуть код скрипта, я его сам писал, а еще лучше поискать готовые библиотеки, если нет времени самому писать
Если открыть исходный пример codepen.io/sergealmazov/pen/ByLvGR в Mozilla, то разница будет видна сразу. Там блоки с padding-box уже, т.к. не включают в себя border
Если кликнули на любой элемент, который находится в меню, то ничего не делаем,
если кликаем в любое другое место, то закрываем меню.
$('body').on('click', function(event){
var $menu = $('#menu'),
$target = $(e.target);
//если кликнули в любом другом месте, вне меню - скрываем его
if (!$menu.find($target).length) $menu.hide();
});