Максим Ленский, с учётом разной ширины, то я думаю, что-то типа такого: узнать общую ширину контейнера, потом считать, сколько занимает каждый элемент, затем складывать полученные значения друг с другом, начиная с первого элемента. Если есть переполнение строки по ширине, значит, предыдущий сложенный элемент — последний в строке, а текущий (с которого начинается переполнение) — первый в следующей.
А так я видел варианты, если заранее известны размеры элементов. Да и с помощью CSS тогда можно обойтись.
На тот же древний IE приходится ~10 процентов в среднем. Иногда доходит аж до 15 процентов.