テキスト自体を透明にするための CSS3 ソリューションを次に示します。
color: rgba(0,0,0,0);
テキストの色属性を設定します
唯一の問題は、キャレットが見えなくなることです。簡単な検索を行ったところ、キャレットとそのスタイリングは完全にブラウザーで自由に使用できることがわかりました。そのため、私が考えることができる唯一のオプションは、Javascript を使用してシミュレートされたキャレットを入力内容の最後に追加することです。
私はこれを行う方法のアイデアを持っていますが、それは面倒であり、理想的とは言えません.
- ページに非表示のラベルを追加する
- 隠されていることを確認してください
display: none;
(実際の幅になるように)
white-space: nowrap;
すべてを1行に保持するように設定します)
- テキストがテキストエリアのテキストとまったく同じスタイルであることを確認してください
<span id="caret">|</span>
textarea の直前に
要素を追加します(仕様の残りの部分では、これをキャレットと呼びます)
- その位置をに設定します
position: relative;
- z-index を増やしてオーバーレイにします
- 実際のキャレットの最初の位置がどこにあるかの上に設定するために右にシフトします
- テキストエリアの値を取り込み、キャレットの位置に対してテキストエリアの幅をチェックする関数を作成します (これを行う方法がわからない場合は、selectionStart を参照してください)。
- ここでの問題は、文字が常に同じ長さであるとは限らず、他のフォントの対応する文字と常に同じ長さではないことです
- これを解決するには、テキストがテキストエリアに入力されると、ステップ 1 で作成した非表示のラベルでそれを模倣する必要があります。
- テキストエリアの先頭からキャレットの現在の位置までのテキストのみを模倣する
- 各文字 (スペースを含む) を独自のスパンでラップする
- 次に、関数を呼び出して、ラベルの幅とテキストエリアの幅を比較する必要があります
- ラベルの幅がテキストエリアよりも小さい場合は、非表示のラベルの最後のスパンの幅を取得し、キャレットをその幅だけ右にシフトしてから、手順 4 に進みます。
- これは、テキストが入力されると実行される関数であるため、一度に 1 文字ずつ実行されます。
- ここで、キャレットが最後または最後に近い位置にあるときに、キャレットがテキストエリアの外に出ないように注意してください
- ラベルがテキストエリアより広い場合:
- テキストエリアの幅に達するまで、ラベルの文字 (スパン) の幅を一度に 1 つずつ追加します。
- キャレットの位置をフォントの高さだけ下に移動し、水平の開始位置に戻します (キャレットの位置は相対的であるため、左の位置を元の位置に戻すだけです)。
(0 + offsetToACTUALCaretPosition)
- フラグ (例: ) を使用
class="break"
して、前の行の最後のスパン (文字) をマークします
- 幅比較関数を再度呼び出します
- 各「行」の最後に追加したフラグをチェックする条件が含まれていることを確認してください (存在する場合)。
- まだ行っていない場合は、必要な CSS スタイルをキャレット スパンに適用し、テキストエリアのテキストの色を次のように変更します。
color: rgba(0,0,0,0);
警告:
- これは、実行する小さなジョブに対して多くのオーバーヘッドが発生します
- パディングを考慮してこのメソッドを調整する必要があります
- このメソッドを調整して、文字を削除し、キャレットを前の位置 (左) に移動するためのサポートを追加する必要があります。
- テキストエリアをスクロール可能のままにしておく場合は、そのサポートを追加する必要があります(同様の設定、テキストがスクロールしたり、画面から/テキストエリアの可視領域の外に移動したりする静的な高さなど)
前に言ったように、この解決策が非常に大まかであることはわかっていますが、誰かがより良い解決策を考え出すのに役立つかもしれません.
幸運を!