Обернуть block2 и maindiv еще каким-нибудь div с position=relative, например. Тогда положение block2 и block2:before будет отсчитываться от него, а не от края экрана. Также везде использовать одинаковую размерность, например, если ширина в %, то и положение высчитывать в %. А лучше использовать bootstrap или что-то подобное, не нужно будет ничего высчитывать.