Для того чтобы изменить высоту родительского элемента так, чтобы она учитывала высоту внутреннего элемента, можно использовать CSS свойство `height: auto;` для родительского элемента. Таким образом, высота родительского элемента будет автоматически подстраиваться под высоту его дочерних элементов.
Чтобы улучшить функционирование аккордеона без использования setTimeOut, можно использовать событие transitionend. При нажатии на "Кликабельный родитель" можно добавить класс, который будет устанавливать максимальную высоту для выпадающего элемента (например, высоту его содержимого). Затем при последующем нажатии на "Нажать" можно убрать этот класс, что вызовет событие transitionend и позволит элементу анимированно свернуться до минимальной высоты.
Пример кода на CSS и JavaScript:
HTML:
```html
<div class="accordion">
<div class="parent">
Кликабельный родитель
<div class="child">Скрытый контент</div>
</div>
</div>
```
CSS:
```css
.parent {
transition: height 0.3s;
overflow: hidden;
}
.child {
max-height: 0;
transition: max-height 0.3s;
}
.expanded {
max-height: 1000px; /* Высота содержимого */
}
```
JavaScript:
```javascript
const parent = document.querySelector('.parent');
parent.addEventListener('click', () => {
const child = parent.querySelector('.child');
if (child.classList.contains('expanded')) {
child.classList.remove('expanded');
} else {
child.classList.add('expanded');
}
});
```
Таким образом, при нажатии на "Кликабельный родитель" содержимое будет плавно разворачиваться и сворачиваться без использования setTimeOut.