Чи є спосіб розтягнути текстове поле відповідно до його вмісту без використання PHP або JavaScript?


95

Я наповнюю текстову область вмістом для редагування користувачем.

Чи можна змусити його розтягнутись, щоб вмістити вміст за допомогою CSS (як overflow:showдля div)?


1
Хіба ніхто не має відповіді, в якій немає помилок, які не використовують фреймворк? :-(
— starbeamrainbowlabs

Я просто використовую css max-width: 100%, і він автоматично поміщається в коробку. Будь-яка проблема з цим?
— yashas123

Відповіді:



210

лише один рядок

<textarea name="text" oninput='this.style.height = "";this.style.height = this.scrollHeight + "px"'></textarea>

8
як це має лише два голоси. це неймовірний Мартін. Я просто витрачаю 30 хвилин, намагаючись це вирішити. Чудова робота.
— Філіп Даффні

30
Це чудово. Я просто хотів би додати, що зміна this.scrollHeight + "px"на this.scrollHeight + 3 + "px"робить текстову область досить великою, щоб вона не відображала смугу прокрутки.
— marten

Проблема. Коли користувач пише достатньо для прокрутки вниз, він скидає положення прокрутки кожного разу, коли він додає новий рядок за допомогою Enter.
— Коста

5
Я знаю, що це старе запитання, але у мене є текстова область на сторінці редагування, і вона має значення вже при завантаженні сторінки, як я можу змусити її розширитись відповідно до вмісту?
— Arootin Aghazaryan

1
@ArootinAghazaryan - Можливо, ви вже придумали рішення, але для когось іншого: просто створіть функцію із кодом зміни розміру, замість того, щоб вбудовувати її в HTML. Тоді ви можете викликати ту саму функцію при завантаженні сторінки.
— Магнус Ерікссон,

6

Ось функція, яка працює з jQuery (лише для висоти, а не ширини):

function setHeight(jq_in){
    jq_in.each(function(index, elem){
        // This line will work with pure Javascript (taken from NicB's answer):
        elem.style.height = elem.scrollHeight+'px'; 
    });
}
setHeight($('<put selector here>'));

Примітка. У програмі попрошено рішення, яке не використовує Javascript, однак це має бути корисним для багатьох людей, які стикаються з цим запитанням.


5

Це дуже просте рішення, але воно працює для мене:

<!--TEXT-AREA-->
<textarea id="textBox1" name="content" TextMode="MultiLine" onkeyup="setHeight('textBox1');" onkeydown="setHeight('textBox1');">Hello World</textarea>

<!--JAVASCRIPT-->
<script type="text/javascript">
function setHeight(fieldId){
    document.getElementById(fieldId).style.height = document.getElementById(fieldId).scrollHeight+'px';
}
setHeight('textBox1');
</script>


2
Висота вікна збільшується з кожним натисканням клавіші, а не лише з новими рядками. Навіть зворотний простір і видалення призводять до збільшення висоти. Виправте, і ви повернете голос за.
— Birrel

деякі браузери, такі як IE, не зовсім правильно обчислюють висоту прокрутки, що може спричинити такі проблеми. неважливо, що це відбувається і для мене в Chrome ...
— KthProg

1
ось рішення (редагувати чергу заповнена): в <style> textarea { resize: none; overflow: auto; } </style> <!--TEXT-AREA--> <textarea onkeyup="setHeight.call(this);">Hello World</textarea> <!--JAVASCRIPT--> <script type="text/javascript"> function setHeight(){ this.style.height = '1px'; this.style.height = this.scrollHeight + 'px'; } </script>основному ви повинні встановити висоту 1px перше, з - за цього: stackoverflow.com/questions/10722058 / ...
— KthProg

3

Ще одне просте рішення для динамічного управління текстовими ділянками.

<!--JAVASCRIPT-->
<script type="text/javascript">
$('textarea').on('input', function () {
            this.style.height = "";
            this.style.height = this.scrollHeight + "px";
 });
</script>

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.