Geralmente, as áreas de texto são retangulares ou quadradas, assim:
Mas eu quero uma área de texto com formato personalizado, como este, por exemplo:
Como isso é possível?
javascript
jquery
html
css
Paranóico
fonte
fonte
<div>
para armazenar texto não é uma boa solução. Pode ajudar no design e pode até ser aceitável para texto somente leitura (o que anula completamente a finalidadecontenteditable
), mas não é bom para a entrada de texto de um usuário. Uma div (mesmo que seja editável por conteúdo) não é um elemento de entrada padrão como um elemento de formulário normal; portanto, não será tratado como um e, portanto, seu conteúdo não será salvo pelos navegadores em caso de falhas. O uso de uma div leva à perda de dados . Veja este exemplo .Respostas:
Introdução
Primeiro, existem muitas soluções propostas em outros posts. Eu acho que este é atualmente (em 2013) o que pode ser compatível com o maior número de navegadores, porque não precisa de nenhuma propriedade CSS3. No entanto, o método não funcionará em navegadores que não suportam
contentdeditable
, tenha cuidado.Solução com uma div
contenteditable
Conforme proposto pelo @Getz , você pode usar uma div com
contenteditable
e depois modelá- la com alguma div. Aqui está um exemplo, com dois blocos que flutuam no canto superior esquerdo e no canto superior direito da div principal:Como você pode ver, você precisa brincar um pouco com as bordas se quiser o mesmo resultado que solicitou em sua postagem. A div principal tem a borda azul em todos os lados. Em seguida, os blocos vermelhos devem ser colados para ocultar as bordas superiores da div principal e você deve aplicar bordas a elas somente em lados específicos ( inferior e esquerda para o bloco direito, inferior e direita para a esquerda).
Depois disso, você pode obter o conteúdo via Javascript, quando o botão " Enviar " é acionado, por exemplo. E acho que você também pode lidar com o resto do CSS (
font-size
,color
, etc.) :)Exemplo de código completo
fonte
You can't apply a border color for the editable section keeping the two corner div's background-color:white
. Não é? Ainda isso vai ganhar. 1bad things
apenas sobre isso . Esses seriam os efeitos colaterais da situação que acabei de perguntar e o que você fez no violino. Mas certamente é uma solução muito boa. Thanx pelo esclarecimento.Num futuro próximo, podemos usar os chamados
css-shapes
para conseguir isso. Uma div com ocontenteditable
atributo definido comotrue
combinadocss-shapes
pode transformar uma área de texto em qualquer tipo de forma.Atualmente, o Chrome Canary já suporta
css-shapes
. Um exemplo possível com css-shapes é:Aqui eles estão usando uma forma de polígono para definir o fluxo de texto. Deve ser possível criar dois polígonos para corresponder à forma desejada para a área de texto.
Mais informações
css-shapes
foram escritas em: http://sarasoueidan.com/blog/css-shapes/Polígono criado com: http://betravis.github.io/shape-tools/polygon-drawing/
Resultado
http://jsfiddle.net/A8cPj/1/
fonte
Talvez seja possível com o Conteúdo Editável ?
Não é uma área de texto, mas se você conseguir criar uma div com essa forma, ela poderá funcionar.
Eu acho que não é possível com apenas textarea ...
Um pequeno exemplo: http://jsfiddle.net/qgfP6/5/
fonte
Você pode trabalhar com uma div editável por conteúdo, com duas divs de cantos:
fonte
Você também pode fazer isso com regiões CSS
(Plataforma Web)
[Atualmente suportado no WebKit Nightly, Safari 6.1+ e iOS7 e já utilizável no chrome e opera depois de ativar o sinalizador: enable-experimental-web-platform-features - caniuse , Web Platform ]
FIDDLE
Assim, você pode criar a forma da área de texto fluindo o texto por 2 regiões e editá-lo adicionando conteúdo editável ao conteúdo.
Marcação
CSS (relevante)
O resultado:
Para obter mais informações sobre regiões - aqui está um bom artigo: Regiões CSS3: layout de página avançado com HTML e CSS3
fonte
Uma longa linha de texto na caixa deixará o cursor passar pelas bordas do meio e não consigo consertar isso.
fonte
Isso não é possível senhor! Uma área de texto geralmente é uma caixa retangular ou quadrada, onde você pode digitar.
No entanto, para criar algo assim, você pode usar 2 áreas de texto e, em seguida, fornecer a elas uma largura e altura especificadas. Caso contrário, eu não acho que isso vai acontecer!
O segundo método seria criar um elemento editável.
http://jsfiddle.net/afzaal_ahmad_zeeshan/at2ke/
O código é:
Com isso, você pode tornar qualquer elemento editável! Você pode dar dimensões a ele, e vai funcionar! Você o obterá como uma área de texto.
Referência: https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Content_Editable
fonte
div
s em vez de textarea. Porque a área de texto não pode ser modificada em forma! :) @Markasoftware Então, você está errado ao votar esta resposta! .. uma vez que esta é apenas a mesma resposta que a dele. A única coisa que não está presente aqui é a imagem e o código para criar a div editável com essa forma!Se você combinar formas CSS com
contenteditable
isso, isso poderá ser feito nos navegadores do kit da web.Primeiro você precisa habilitar o sinalizador: enable-experimental-web-platform-features
Em seguida, reinicie o navegador do webkit e verifique este FIDDLE !
Este método também funcionará para formas fora do padrão.
Marcação
CSS
Então, como diabos eu consegui essa forma de polígono?
Vá para este site e crie seu próprio formato personalizado!
Notas sobre como ativar a sinalização: ( daqui )
fonte
box-sizing
.)Você pode usar a ferramenta de web designer do Google para criar formas complexas usando
HTML5-canvas and CSS
.Além disso, você terá outras ferramentas, como ferramentas de digitação, para inserir textos nessas formas.
Como o arquivo de saída contém muito código, fornece uma amostra de uma demonstração de exemplo criada usando a ferramenta Google Web Designer
DEMO FIDDLE >>
fonte
<textarea>
(ou seja, uma caixa de texto editável), mas com uma forma não retangular. Sem a parte "editável", há muito pouco desafio aqui - as pessoas têm feito texto corrido em HTML desde a introdução de imagens flutuantes no HTML 2.0.Se, por qualquer motivo, você realmente precisar oferecer suporte a navegadores que não possuem
contenteditable
, provavelmente poderá fazer a mesma coisa em JavaScript usando eventos, embora essa seja uma solução muito confusa.Pseudo-código:
fonte