Как изменить мой CSS, чтобы высота текстовой области всегда соответствовала высоте его контейнера div?

У меня есть текстовая область внутри div, и я хочу, чтобы высота текстовой области соответствовала высоте контейнера div.

В настоящее время ширина идеально подходит, однако текстовое поле (которое начинается пустым) заполняет только около 20% высоты div.

И когда вызов ajax захватывает некоторый текст и заполняет текстовое поле, высота текстового поля остается примерно на 20% от div и обеспечивает полосу прокрутки.

Как я могу изменить свой CSS, чтобы высота текстовой области всегда соответствовала высоте его контейнера div?

#answerBox {
  width: 100%;
  height: 100%;
  box-sizing: border-box;
  margin: 5px auto;
  padding: 5px;
  font-size: 10px;
  text-align: left;
  position: relative;
}

#answerBoxDiv {
  width: 90%;
  min-height: 50%;
  margin: 5px auto;
  border: 4px solid #00bfb6;
  padding: 5px;
  font-size: 10px;
  text-align: left;
  position: relative;
}
<div id = "answerBoxDiv">
  <textarea id = "answerBox"></textarea>
</div>
Типы ввода HTML: Лучшие практики и советы
Типы ввода HTML: Лучшие практики и советы
HTML, или HyperText Markup Language , является стандартным языком разметки, используемым для создания веб-страниц. Типы ввода HTML - это различные...
Узнайте, как использовать теги &lt;ul&gt; и &lt;li&gt; для создания неупорядоченных списков в HTML
Узнайте, как использовать теги <ul> и <li> для создания неупорядоченных списков в HTML
HTML предоставляет множество тегов для структурирования и организации содержимого веб-страницы. Одним из наиболее часто используемых тегов для...
CSS Flex: что должен знать каждый разработчик
CSS Flex: что должен знать каждый разработчик
CSS Flex: что должен знать каждый разработчик Модуль flexbox, также известный как гибкий модуль разметки box, помогает эффективно проектировать и...
Введение в раздел &quot;Заголовок&quot; в HTML
Введение в раздел "Заголовок" в HTML
Говорят, что лучшее о человеке можно увидеть только изнутри, и это относится и к веб-страницам HTML! Причина, по которой некоторые веб-страницы не...
Как React Helmet спасает меня при разделении файлов CSS?
Как React Helmet спасает меня при разделении файлов CSS?
Многие новички могут столкнуться с проблемой, когда одна страница с CSS наследует свойства от другой страницы с другим CSS. У меня было много проблем,...
Селекторы CSS - Селекторы классов
Селекторы CSS - Селекторы классов
Селекторы классов CSS - это селектор CSS, используемый для применения стиля к определенному элементу. Селекторы классов определяются путем добавления...
1
0
62
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Попробуйте сохранить минимальную высоту текстовой области как 100% или около того или попробуйте использовать object-fit: contain(or cover) в текстовой области

Спасибо, перешел на min-height и попробовал object-fit, но к сожалению в данной ситуации они не помогли.

sw123456 14.02.2023 12:49

Попробуй object-fit: cover

Hrushal 14.02.2023 12:54

Или, возможно, используйте этот #answerBox::after{ min-height: 100% }

Hrushal 14.02.2023 12:55

К сожалению, ни один из них не работает для меня.

sw123456 14.02.2023 12:58

Вы можете попробовать это

#answerBox {
  height: 100%;
  resize: none;
}

Спасибо, но, к сожалению, в моей ситуации это не помогло.

sw123456 14.02.2023 12:48

Позвольте мне посмотреть на это, когда я вернусь домой

bela jonas 14.02.2023 12:54

Укажите конкретный height для родительского блока #answerBoxDiv. Таким образом, вы получите соответствующую высоту для этого div.

<div class = "parent-div" style = "height: 100%;">
    <div id = "answerBoxDiv">
        <textarea id = "answerBox"></textarea>
    </div>
</div>
Ответ принят как подходящий

Вам нужно явно установить высоту родительского контейнера (независимо от того, находится ли он в px или rem и т. д.) - таким образом, высота: 100% текстовой области будет заполнена до контейнера.

Расширение текстового содержимого не может быть выполнено с помощью простого css — вам нужен js, чтобы определить высоту содержимого и соответствующим образом настроить родительский контейнер.

Единственный способ сохранить высоту: 100% в родительском контейнере — это его предок имеет установленную высоту (например, 100vh) — таким образом браузер может определить высоту каждого элемента DOM и размер текстовой области соответственно.

ОБНОВЛЕНИЕ. Я добавил функцию js для автоматического увеличения высоты родительского контейнера на входе. (текстовое поле автоматически увеличивается в высоту, так как оно составляет 100% от родительского. Это потребует массажа, но когда вы вводите текстовое поле, высота автоматически увеличивается.

function setHeight(element) {
  const container = document.getElementById("answerBoxDiv");
  const height = element.scrollHeight;
  if (height > 100) {
    container.style.height = (element.scrollHeight)+"px";
    }
}
#answerBoxDiv {
  width: 90%;
  height: 100px; **// this is needed - but can be in px / rem / vh or other but NOT % unless its parent has its height set.**
  margin: 5px auto;
  border: 4px solid #00bfb6;
  padding: 5px;
  font-size: 10px;
  text-align: left;
  position: relative;
}

#answerBox {
  width: 100%;
  height: 100%; 
  box-sizing: border-box;
  padding: 5px;
  font-size: 10px;
  text-align: left;
  position: relative;
  resize: vertical;
  overflow: hidden
}
<div id = "answerBoxDiv">
   <textarea id = "answerBox" oninput = "setHeight(this)"></textarea>
</div>

Glaf вам это нравится - обратите внимание, что я обновил ответчик, чтобы обеспечить функцию автоматического расширения для текстовой области при вводе - например, она начинается с 150 пикселей - затем при вводе пользователем - когда она превышает эту высоту - она ​​повторно установит высоту на обоих контейнер и текстовое поле. В качестве забавы - это также автоматически уменьшит текстовое поле, когда пользователь удалит содержимое из ввода. Надеюсь, это поможет :)

gavgrif 14.02.2023 13:26

Вы можете использовать высоту CSS: 100%; свойство элемента textarea, чтобы он заполнил всю высоту своего родительского контейнера, #answerBoxDiv. Кроме того, вы можете удалить свойство min-height из #answerBoxDiv, чтобы высота контейнера всегда равнялась высоте его содержимого.

Вот обновленный CSS:

#answerBox {
  width: 100%;
  height: 100%;
  box-sizing: border-box;
  margin: 0;/*keep it zero*/
  padding: 5px;
  font-size: 10px;
  text-align: left;
  position: relative;
}

#answerBoxDiv {
  width: 90%;
  margin: 5px auto;
  border: 4px solid #00bfb6;
  padding: 0px;/*keep it zero*/
  font-size: 10px;
  text-align: left;
  position: relative;
}

И обновленный HTML:

<div id = "answerBoxDiv">
  <textarea id = "answerBox"></textarea>
</div>

Как мне сделать контейнер div большей высоты?

sw123456 14.02.2023 13:16

Чтобы увеличить высоту контейнера div, вы можете использовать свойство CSS height и установить для него желаемое значение. Например, вы можете установить высоту контейнера div на 600 пикселей, добавив следующий код CSS: .container { height: 600px; }Это сделает контейнер div высотой 600 пикселей. Вы можете отрегулировать значение по мере необходимости для достижения желаемой высоты. Имейте в виду, что если содержимое внутри div-контейнера превысит указанную высоту, оно переполнится, и вам может потребоваться использовать дополнительный CSS для обработки переполнения.

Infinity 14.02.2023 13:22

Процентная высота не работает с родителем минимальной высоты, вам нужно либо указать родительскую высоту, либо вы можете использовать flex:

html,
body {
  height: 100%;
  margin: 0;
}

#answerBox {
  flex-grow:1;
  width: 100%;
  box-sizing: border-box;
  margin: 5px auto;
  padding: 5px;
  font-size: 10px;
  text-align: left;
  position: relative;
}

#answerBoxDiv {
  width: 90%;
  min-height: 50%;
  margin: 5px auto;
  border: 4px solid #00bfb6;
  padding: 5px;
  font-size: 10px;
  text-align: left;
  position: relative;
  display: flex;
  flex-direction: column;
}
<div id = "answerBoxDiv">
  <textarea id = "answerBox"></textarea>
</div>

Другие вопросы по теме