Обычно текстовые области имеют прямоугольную или квадратную форму, например:
Но я хочу текстовую область нестандартной формы, например, такую:
Как это возможно?
javascript
jquery
html
css
параноик
источник
источник
<div>
для хранения текста не является хорошим решением. Это может помочь при разработке и даже может быть приемлемо для текста только для чтения (что полностью противоречит целиcontenteditable
), но не подходит для ввода текста пользователем. Div (даже contenteditable) не является стандартным элементом ввода, как обычный элемент формы, поэтому он не будет обрабатываться как один, и поэтому его содержимое не будет сохраняться браузерами в случае сбоев. Использование div приводит к потере данных . Смотрите этот пример .Ответы:
Введение
Во-первых, есть много решений, предложенных в других постах. Я думаю, что это в настоящее время (в 2013 году) тот, который может быть совместим с наибольшим количеством браузеров, потому что ему не нужны никакие свойства CSS3. Однако этот метод не будет работать в браузерах, которые не поддерживают
contentdeditable
, будьте осторожны.Решение с div
contenteditable
В соответствии с предложением @Getz , вы можете использовать div с,
contenteditable
а затем сформировать его с некоторым div на нем. Вот пример с двумя блоками, которые плавают в верхнем левом и правом верхнем углу основного div:Как видите, вам нужно немного поиграть с границами, если вы хотите получить тот же результат, который вы запрашивали в своем посте. Основной div имеет синюю рамку на каждой стороне. Далее, красные блоки должны быть прикреплены, чтобы скрыть верхние границы основного элемента, и вам нужно применить к ним границы только с определенных сторон ( внизу и слева для правого блока, снизу и справа для левого).
После этого вы можете получить контент через Javascript, например, при нажатии кнопки « Отправить ». И я думаю , что вы можете справиться с остальным CSS (
font-size
,color
и т.д.) :)Полный пример кода
источник
You can't apply a border color for the editable section keeping the two corner div's background-color:white
. Не так ли? Тем не менее это победит. +1bad things
только о них . Это будет побочным эффектом ситуации, о которой я только что спросил, и того, что вы сделали на скрипке. Но это, безусловно, действительно хорошее решение. Спасибо за разъяснение.В ближайшее время мы можем использовать так называемые
css-shapes
для достижения этой цели. Div сcontenteditable
атрибутом, установленным вtrue
сочетании с,css-shapes
может сделать текстовую область любой формой.В настоящее время Chrome Canary уже поддерживает
css-shapes
. Пример того, что возможно с css-shape:Здесь они используют форму многоугольника для определения потока текста. Должно быть возможно создать два полигона, чтобы соответствовать форме, которую вы хотите для своей текстовой области.
Более подробная информация о
css-shapes
была написана на: http://sarasoueidan.com/blog/css-shapes/Полигон создан с помощью: http://betravis.github.io/shape-tools/polygon-drawing/
результат
http://jsfiddle.net/A8cPj/1/
источник
Может быть, это возможно с Content Editable ?
Это не текстовая область, но если вам удастся создать div с этой формой, это может сработать.
Я думаю, что это невозможно только с помощью textarea ...
Небольшой пример: http://jsfiddle.net/qgfP6/5/
источник
Вы можете работать с contenteditable div, с двумя углами div:
источник
Вы также можете сделать это с помощью CSS Regions
(Веб-платформа)
[В настоящее время поддерживается в WebKit Nightly, Safari 6.1+ и iOS7 и уже может использоваться в Chrome и Opera после включения флага: enable-эксперимент-web-platform-features - caniuse , Web Platform ]
FIDDLE
Таким образом, вы можете придать текстовой форме форму, пропустив текст через 2 области, и отредактировать его, добавив contenteditable к содержимому.
наценка
(Релевантно) CSS
Результат:
Для получения дополнительной информации о регионах - вот хорошая статья: регионы CSS3: богатый макет страницы с HTML и CSS3
источник
Длинная строка текста в поле будет опускать курсор за средние края, и я не могу это исправить.
источник
Это невозможно, сир! Текстовая область, как правило, представляет собой прямоугольник или квадрат, где вы можете ввести.
Однако, чтобы сделать что-то подобное, вы можете использовать 2 текстовые области, а затем дать им указанную ширину и высоту. В противном случае я не думаю, что это произойдет!
Второй способ - сделать редактируемый элемент.
http://jsfiddle.net/afzaal_ahmad_zeeshan/at2ke/
Код является:
Используя это, вы можете сделать любой элемент редактируемым! Вы можете дать размеры, и это будет работать! Вы получите это как текстовую область.
Ссылка: https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Content_Editable
источник
div
s вместо textarea. Потому что текстовая область не может быть изменена в форме! :) @Markasoftware Так что вы не правы при голосовании этого ответа! .. так как это тот же ответ, что и его. Единственное, чего здесь нет, это изображение и код для создания редактируемого div с этой формой!Если вы комбинируете формы CSS с
contenteditable
этим, это можно сделать в браузерах webkit.Сначала вы должны включить флаг: enable-экспериментальный-веб-платформа-функции
Затем перезапустите браузер WebKit , а затем проверьте эту FIDDLE !
Этот метод будет работать и для нестандартных фигур.
наценка
CSS
Так как же я получил эту форму многоугольника?
Зайдите на этот сайт и создайте свою собственную форму!
Примечания о включении флага: ( отсюда )
источник
box-sizing
.)Вы можете использовать инструмент веб-дизайнера Google для создания сложных форм с помощью
HTML5-canvas and CSS
.Более того, вы получите другие инструменты, такие как инструменты ввода текста для ввода текста внутри этих фигур.
Поскольку в выходном файле содержится много кода, можно использовать образец демонстрационного примера, созданного с помощью инструмента Google Web Designer.
FIDDLE DEMO >>
источник
<textarea>
(например, поле редактируемого текста), но непрямоугольной формы. Без «редактируемой» части здесь очень мало проблем - люди делали потоковый текст в HTML с момента появления плавающих изображений в HTML 2.0.Если по какой-либо причине вам действительно требуется поддержка браузеров, которые не имеют
contenteditable
, вы, вероятно, могли бы сделать то же самое в JavaScript, используя события, хотя это очень грязный обходной путь.псевдокод:
источник