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