Чтобы разместить один блок над другим в HTML, можно использовать CSS свойство "display" с значением "block" или "inline-block", а также задать нужные параметры положения блоков при помощи CSS свойств "position", "top", "left", "right" и "bottom". Например:
HTML:
```html
<div class="block1">Первый блок</div>
<div class="block2">Второй блок</div>
```
CSS:
```css
.block1 {
display: block;
width: 200px;
height: 100px;
background-color: red;
}
.block2 {
display: block;
width: 200px;
height: 100px;
background-color: blue;
margin-top: 20px;
}
```
Чтобы блоки передвигались после копирования кода, можно использовать возможности JavaScript. Например, можно при помощи JavaScript изменять значение CSS свойства "top" для каждого блока, чтобы они располагались друг под другом с нужными отступами.
Что касается упрощения кода и уменьшения количества блоков, это сильно зависит от конкретных требований и дизайна, которые вы пытаетесь достичь. Но в общем случае, можно обратить внимание на следующие пункты:
1. Использование классов и наследование свойств CSS. Если у блоков есть общие свойства, можно задать их в общем классе и использовать его для всех блоков. Таким образом, можно избежать повторения кода.
2. Использование CSS флексбоксов или CSS гридов. Они позволяют более гибко управлять положением и расположением блоков без необходимости добавления множества дополнительных дивов для создания макета.
3. Использование CSS препроцессоров, таких как Sass или Less, которые позволяют использовать переменные, миксины и циклы, что значительно упрощает написание и поддержку CSS кода.
Однако, для оптимального упрощения кода и уменьшения количества дивов, рекомендуется провести анализ конкретного дизайна и требований к функциональности для нахождения наиболее эффективного подхода.