@kirill-93

Из чего расчитывает высота, когда выставляется height:auto?

Пытаюсь сделать динамическое изменение высоты в textarea при наборе текста. Сначала поле маленькое, а по мере того, как пользователь вводит данные, поле растет в ширину.
Использую для этого вот такой код:
<!DOCTYPE html>
<html>
<head>
	<style type="text/css">
		textarea {
		  height: 30px;
		  border: 1px solid #dedede;
		  border-radius: 4px;
		  width: 400px;
		  outline: none;
		  box-sizing: border-box;
		  padding: 6px;
		  overflow: hidden;
		}
	</style>
</head>
<body>
<div>
  <textarea></textarea>
</div>

<script type="text/javascript"> 
	let textarea = document.querySelector('textarea');

	textarea.onkeyup = e => {
	  textarea.style.height = 'auto';
	  textarea.style.height = textarea.scrollHeight + 'px';
	}
</script>
</body>
</html>

Суть в том, что в момент ввода в текстовое поле, у него устанавливается высота 'auto', то есть оно растягивается в высоту на высоту контента. Затем эту высоту получаю через scrollHeight и устанавливаю этому текстовому полю в качестве значения heught.
Все отлично работает, кроме ситуации, когда я все стер. Когда я все стер и поле пустое, выставляется значение height:auto и scrollHeight равен 42. Почему 42, мне неясно. Высота блока по умолчанию 30. Как это можно исправить, чтобы если поле пустое, высота была 30?
Вот codepen с кодом.
  • Вопрос задан
  • 63 просмотра
Пригласить эксперта
Ответы на вопрос 1
Povedli
@Povedli
Из того что знаю могу только посоветовать переделать и написать не height: 30px; а max-height: 30px;
Да, тогда не будет увеличиваться окно, но зато некогда не выйдет за рамки.
А почему 42 пикселя? Скорее всего какой то стандарт но я точно не знаю(((
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы