Автоматическое изменение размера элемента textarea
В данном уроке представлено решение задачи автоматического изменения размера элемента textarea
в соответствии с содержанием, которое может быть загружено динамически с помощью AJAX. Размер содержания не известен, а элемент textarea
не изменяет размера естественным образом, как другие элементы HTML. Поэтому нужно использовать JavaScript для изменения высоты элемента каждый раз при обновлении содержания.
Казалось бы - простая задача. Но если поискать плагины или скрипты, которые посвящены данной теме, то обнаружится неприятный сюрприз - они все оказываются чрезмерно сложными для решения такого простого вопроса. Большинство из них использует сложные математические вычисления, хотя есть более простой способ.
Используем скрытый клонирующий элемент.
Элемент <div>
естественным образом растягивается , чтобы все содержание (предполагаем, что отключено обтекание текста или используется абсолютное позиционирование). То есть, чтобы получить высоту элемента textarea
, нужно сделать следующее:
- Взять содержимое элемента
textarea.
- Создать невидимый клонирующий элемент
div.
- Задать для клона такие же типографические свойства и ширину, как и у элемента
textarea
. - Поместить содержание в клон.
- Получить высоту клона.
- Использовать полученное значение для изменения высоты элемента
textarea
.
Код
Ключевым моментом данного решения является код CSS. Как уже упоминалось, невидимый клон должен иметь такие же типографические свойства, как и элемент textarea
. В список включается не только font-size
и font-family
, но и свойства white-space
и word-wrap
, так как клон должен имитировать все, что происходит внутри элемента textarea.
Для элемента textarea
код CSS будет следующим:
textarea { width: 500px; min-height: 50px; font-family: Arial, sans-serif; font-size: 13px; color: #444; padding: 5px; } .noscroll { overflow: hidden; }
Обратите внимание на отдельный класс со свойством overflow: hidden
, который используется для предотвращения появления полоски прокрутки. Обычно, отключение полоски прокрутки у элемента textarea
является плохой идеей, но мы изменяем его с помощью JavaScript. Данный класс будет добавляться кодом JavaScript, поэтому при отключенном JavaScipt элемент textarea
будет функционировать нормально (с прокруткой).
Следующий код CSS используется для скрытого клонирующего элемента:
.hiddendiv { display: none; white-space: pre-wrap; width: 500px; min-height: 50px; font-family: Arial, sans-serif; font-size: 13px; padding: 5px; word-wrap: break-word; }
Мы используем свойство display: none
, чтобы сделать элемент невидимым для пользователя. Скорее всего, такое решение подходит и для программ читалок с экрана.
Также используется свойство white-space
со значением “pre-wrap”, для корректного переноса строк. Ширина элемента клона равна ширине элемента textarea
. Кроме того одинаковыми задаются несколько других свойств, в том числе и min-height.
А теперь код JavaScript (используется jQuery):
$(function() { var txt = $('#comments'), hiddenDiv = $(document.createElement('div')), content = null; txt.addClass('noscroll'); hiddenDiv.addClass('hiddendiv'); $('body').append(hiddenDiv); txt.bind('keyup', function() { content = txt.val(); content = content.replace(/\n/g, '<br>'); hiddenDiv.html(content); txt.css('height', hiddenDiv.height()); }); });
Данный код предполагает, что у нас используется только один элемент textarea
на странице. Если имеется несколько элементов textarea
на странице, то нужно изменить селектор в первой строке для выбора нужных.
Высота динамически изменяется при обработке события jQuery keyup
. Код легко изменить для работы с AJAX, если содержание меняется таким образом.
Использование события keyup
также является хорошим примером, потому что данный элемент часто используется при ввода данных пользователем.
А что происходит в IE6-8?
Решение в чистом виде не работает в IE6-8. Причина - плохая обработка внутреннего HTML содержания. Решение, которое действует почти во всех случаях заключается в следующей строке JavaScript кода:
// Решение проблемы в обработкой внутреннего HTML содержания в IE content = content.replace(/\n/g, '<br>');
Однако длинные строки без переносов продолжают вносить ошибки в процесс. Поэтому надо использовать свойство word-wrap: break-word
для клонирующего элемента.
Источник: http://feedproxy.google.com/~r/ruseller/CdHX/~3/ZHSp_gu1Zvc/lessons.php
Дайджест новых статей по интернет-маркетингу на ваш email
Новые статьи и публикации
- 2024-04-22 » Комментирование кода и генерация документации в PHP
- 2024-04-22 » SEO в России и на Западе: в чем основные отличия
- 2024-04-22 » SEO для международного масштабирования
- 2024-04-22 » Как использовать XML-карты для продвижения сайта
- 2024-04-22 » Цифровой маркетинг: инструменты для продвижения и рекламы в 2024 году
- 2024-04-22 » Что такое CSS-модули и зачем они нам?
- 2024-04-17 » 23 сервиса для эффективного экспресс-аудита любого сайта
- 2024-04-08 » Яндекс переходит на новую версию Wordstat
- 2024-04-08 » Яндекс интегрировал в свой облачный сервис эмпатичную нейросеть
- 2024-04-08 » Новая версия нейросети Claude превзошла по мощности аналоги Google и OpenAI
- 2024-04-08 » Как пользоваться GPT 4 и Claude бесплатно и без VPN
- 2024-03-13 » Стратегии SEO на 2024 год
- 2024-03-13 » Как использовать анимацию с помощью JavaScript-библиотеки GSAP
- 2024-03-13 » Использование GSAP 3 для веб-анимации
- 2024-03-13 » Cогласование топографической съёмки с эксплуатирующими организациями
- 2024-02-19 » Теряются лиды? Как настроить сквозную аналитику
- 2024-02-17 » Мерч и IT: на что обратить внимание в 2024 году
- 2024-02-16 » Копируем с RSync: основные примеры синхронизации файлов
- 2024-02-15 » Лучшие noCode AI платформы для создания диалоговых ботов
- 2024-02-14 » Факторы ранжирования Google 2024 — исследование Semrush
- 2024-02-12 » Перенос сайта на другой хостинг
- 2024-02-05 » В России сформирован реестр хостинг-провайдеров
- 2024-02-04 » Использование SSH для подключения к удаленному серверу Ubuntu
- 2024-02-03 » Подключаемся к серверу за NAT при помощи туннеля SSH. Простая и понятная инструкция
- 2024-02-02 » Настройка CI/CD для Gitlab-репозитория: схемы и гайд по шагам
- 2024-02-01 » GitLab CI Pipeline. Запуск сценария через SSH на удаленном сервере
- 2024-01-29 » Introduction to GitLab’s CI/CD for Continuous Deployments
- 2024-01-26 » Настройка GitLab CI/CD
- 2024-01-25 » Установка shell gitlab runner
- 2024-01-25 » Установка и регистрация gitlab-runner в docker контейнере
Там, где речь заходит об очень больших деньгах, разумно не доверять никому. |
Мы создаем сайты, которые работают! Профессионально обслуживаем и продвигаем их , а также по всей России и ближнему зарубежью с 2006 года!
Как мы работаем
Заявка
Позвоните или оставьте заявку на сайте.
Консультация
Обсуждаем что именно Вам нужно и помогаем определить как это лучше сделать!
Договор
Заключаем договор на оказание услуг, в котором прописаны условия и обязанности обеих сторон.
Выполнение работ
Непосредственно оказание требующихся услуг и работ по вашему заданию.
Поддержка
Сдача выполненых работ, последующие корректировки и поддержка при необходимости.