Здравствуйте.
Все варианты имеют место в решении задачи. Однако, нужно понять, чего вы хотите.
- Все ли строки сетки должны быть заполненными?
- Насколько важен порядок постов?
- Можно ли менять размер поста, чтобы он органичнее входил в сетку?
- Насколько "свободными" могут быть действия пользователя?
Вообще, подобные ресурсы делают адаптивный дизайн. Как же решается эта задача? Просто делают float-блоки со статическими размерами (Вот хорошая статья на тему:
www.artlebedev.ru/tools/technogrette/html/thumbnails/) и указывают у каждого поста требуемый стиль, задающий ширину. Например, у the-village есть CSS стили "post-block-superfeature-content" и "post-block-featured". А также, у них есть CSS классы на высоту поста. Проблема первого варианта решается пустой ячейкой в "сетке". Почему в "сетке"? Потому что явной сетки там нет.
Но представим, что идеальным решением задачи является то, в котором алгоритм автоматически компонует посты и пользователь может изменять сгенерированную сетку, причём так, чтобы не поломать вёрстку.
Предлагаю некоторый "Вариант 5", в котором алгоритм компонует посты в соответствии с размером и приоритетностью постов. Сначала отображаются посты с более высоким приоритетом, и если пост не влазит в ячейку, то заполняем ячейку сетки постом с меньшим приоритетом. Если таких постов нет, то оставляем пустую ячейку.
Если нужны заполненные все строки сетки, то тут две ситуации. В первой ситуации у нас статическое число постов, а значит их можно статически заранее расставить для статической или динамической ширины сетки. Вторая ситуация - это динамическое число постов. Тут можно просто не указывать неполную строку.
Про реализацию.
На этом всё. Желаю удачи с решением задачи ;)