Puisque vous n'avez parlé que d'équarrissage, oui vous pouvez. Vous pourriez faire quelque chose comme ça :
function render(){
var inp = document.getElementById("box");
var data = `
<svg xmlns="http://www.w3.org/2000/svg" width="${inp.offsetWidth}" height="${inp.offsetHeight}">
<foreignObject width="100%" height="100%">
<div xmlns="http://www.w3.org/1999/xhtml"
style="font-family:monospace;font-style: normal; font-variant: normal; font-size:13.3px;padding:2px;;">
${inp.value} <i style="color:red">cant touch this</i>
</div>
</foreignObject>
</svg>`;
var blob = new Blob( [data], {type:'image/svg+xml'} );
var url=URL.createObjectURL(blob);
inp.style.backgroundImage="url("+URL.createObjectURL(blob)+")";
}
onload=function(){
render();
ro = new ResizeObserver(render);
ro.observe(document.getElementById("box"));
}
#box{
color:transparent;
caret-color: black;
font-style: normal;/*must be same as in the svg for caret to align*/
font-variant: normal;
font-size:13.3px;
padding:2px;
font-family:monospace;
}
<textarea id="box" oninput="render()">you can edit me!</textarea>
Cela fait en sorte qu'un textarea
rendra du html ! Outre le clignotement lors du redimensionnement, l'impossibilité d'utiliser directement les classes et le fait de devoir s'assurer que le div dans la section svg
a le même format que le textarea
pour que le signe d'insertion s'aligne correctement, ça marche !
0 votes
Le seul moyen d'y parvenir sera de superposer vos balises HTML au contenu de la balise textarea via des astuces de positionnement CSS. Rien ne vous aidera à convaincre le navigateur de rendre le contenu de la zone de texte différemment. (Pourquoi exactement avez-vous "besoin" de faire cela ?)
0 votes
J'ai juste besoin que l'utilisateur puisse ajouter des styles de mise en forme au texte qu'il saisit (un peu comme lorsqu'on écrit un article sur Wordpress). Je n'ai pas besoin de toutes les fonctions comme l'alignement du texte, etc., mais seulement de ces balises de base.