percentage-based snapping

still some bugs