Chromeの気の利いたtextareaサイズ変更コントロールが好きです。ただし、1つの例外は、textareaにハードmin-height / min-width設定があり、!important修飾子を使用しても、カスタムcssを介して変更できないように見えることです。
textarea#myTextArea{min-height:0 !important;min-width:0 !important}
おそらくjQueryを介してこれをオーバーライドすることは可能ですか?
Chromeの気の利いたtextareaサイズ変更コントロールが好きです。ただし、1つの例外は、textareaにハードmin-height / min-width設定があり、!important修飾子を使用しても、カスタムcssを介して変更できないように見えることです。
textarea#myTextArea{min-height:0 !important;min-width:0 !important}
おそらくjQueryを介してこれをオーバーライドすることは可能ですか?
これらの「min-height
/ 」は、属性min-width
に依存しています。例えば。が欠落しているか 1 未満の場合、デフォルト値は 20 であるため、最小幅は 20 文字幅になります。cols
rows
cols
(参照http://www.w3.org/TR/html5/forms.html#the-textarea-element )
初期サイズ以下でサイズを変更できないという事実はtextarea
、バグ ( https://code.google.com/p/chromium/issues/detail?id=94583 ) として報告されていますが、
ユーザー エージェントは、サイズ変更の範囲を、要素の元の書式設定されたサイズと、要素のすべてのコンテンツを包含するのに十分な大きさなど、適切なものに制限する場合があります。
http://www.w3.org/TR/css3-ui/#resize
残念ながら、今のところこの動作を変更する方法はないようです。
ここにあなたが探している答えがあります。これは私のオリジナルのソリューションなので、最初にここで見ました!!
以下で実行したコードは、最も基本的な形式です。説明しなければならない他のカスタムのものと一緒に通常使用するJavascriptライブラリを削除するために、それを単純化しました. これは、外部ライブラリなどを必要としないソリューションです。
マウスカーソルが上にある間にテキストエリアのサイズが変更されたかどうかを確認する間隔を追加します。変更された場合、ユーザーがドラッグしたことがわかるため、テキスト領域のサイズを強制的に 1 ピクセル x 1 ピクセルにします。これにより、ユーザーには非常にわずかなちらつきが生じますが、サイズをドラッグしているため、すぐにドラッグ先のサイズに戻りますが、1px x 1px まで縮小されます。
デモ: http://jsfiddle.net/greatbigmassive/zJ4z5/5/
function TA_start(id){
var ta = document.getElementById(id);
if(typeof(ta.resizeCheckStarted) == "undefined"){
ta.resizeCheckStarted = true;
ta.resizeUpdated = false;
var cs = window.getComputedStyle(ta,null);
ta.originalH = cs.getPropertyValue("height");
ta.originalW = cs.getPropertyValue("width");
ta.originalM = cs.getPropertyValue("margin");
ta.style.width = ta.originalW;
ta.style.height= ta.originalH;
ta.style.margin= ta.originalM;
ta.resizeCheck = setInterval("TA_checkMe('"+id+"')",100);
}
}
function TA_checkMe(id){
var ta = document.getElementById(id);
if(ta.originalW != ta.style.width || ta.originalH != ta.style.height){
ta.resizeUpdated = true;
ta.originalW = ta.style.width;
ta.originalH = ta.style.height;
ta.style.width="1px";
ta.style.height="1px";
clearInterval(ta.resizeCheck);
}
}
function TA_stop(id,init){
var ta = document.getElementById(id);
if(typeof(init)=="undefined"){
if(typeof(ta.stopResizeCheck)=="undefined"){
ta.stopResizeCheck = setTimeout("TA_stop('"+id+"',true)",500);
}
} else {
clearInterval(ta.resizeCheck);
if(ta.resizeUpdated != true){
delete ta.resizeCheckStarted;
}
}
}
修正:
a)。最初は収縮しません b)。追加の CSS は必要ありません
別の JavaScript ソリューション:
デモ: http://jsfiddle.net/nz8ut/2/
function resizableStart(e){
this.originalW = this.clientWidth;
this.originalH = this.clientHeight;
this.onmousemove = resizableCheck;
this.onmouseup = this.onmouseout = resizableEnd;
}
function resizableCheck(e){
if(this.clientWidth !== this.originalW || this.clientHeight !== this.originalH) {
this.originalX = e.clientX;
this.originalY = e.clientY;
this.onmousemove = resizableMove;
}
}
function resizableMove(e){
var newW = this.originalW + e.clientX - this.originalX,
newH = this.originalH + e.clientY - this.originalY;
if(newW < this.originalW){
this.style.width = newW + 'px';
}
if(newH < this.originalH){
this.style.height = newH + 'px';
}
}
function resizableEnd(){
this.onmousemove = this.onmouseout = this.onmouseup = null;
}
var els = document.getElementsByClassName('resizable');
for(var i=0, len=els.length; i<len; ++i){
els[i].onmouseover = resizableStart;
}
上記のソリューションでは、 and を使用してmouseover
andmouseout
をトリガーresizableStart
しresizableEnd
ます。問題は、サイズ変更される要素に子がある場合、マウスが子の上に置かれると、要素がmouseout
イベントを受け取り、その直後に、mouserover
子からバブリングするイベントを受け取ることです。
これらのイベントを回避するために、イベントを使用して別のソリューションを実装しmouseenter
ましたmouseleave
。