Textareaのrows
属性は、Firefoxの行数と一致しません。例えば:
<textarea rows=4 cols=40>
1
2
3
4
this line is visible in FF
</textarea>
例: http://jsfiddle.net/Z7zXs/6/
この問題を修正するにはどうすればよいですか? textareaは、rows=4
に対して(5行ではなく)4行のみを表示する必要があります。
Firefoxは常にテキストフィールドの後に余分な行を追加します。一定の高さにしたい場合は、CSSを使用します。例:
textarea {
height: 5em;
}
EDIT:@-moz-document url-prefix
FirefoxブラウザーのみをターゲットとするCSS拡張。例
@-moz-document url-prefix() {
textarea {
height: 5em;
}
}
たくさんの答えがありますが、私には向いていませんでした。
height: 5em;
)は、rows
属性を完全にオーバーライドするため、柔軟ではありません「バグ」があります: TEXTAREAはROWS =およびCOLS =を誤って適用しています
だからここに私の解決策があります:
FFはTextAreaに高さを追加して、スクロールバーの場所を予約します。
水平スクロールバーは必要ないので、問題の修正に役立ちます。次のCSSルールをtextareaに追加できます。
overflow-x: hidden;
ここに例があります 。 rows=1
でも動作します。
JavaScriptを使用して高さを修正できます(または_4x1.2 = 4.8em
_の高さをハードコードします)。
例(JQuery)、各テキストエリアの問題を修正します。
_$("textarea").each(function(){
var lineHeight = parseFloat($(this).css("line-height"));
var lines = $(this).attr("rows")*1 || $(this).prop("rows")*1;
$(this).css("height", lines*lineHeight);
});
_
_line-height
_ CSSプロパティの値は、各行(「行」)の高さに等しくなります。したがって、row
を定義すると、このコードは高さを修正します。
rows
属性が設定されていない場合、コードはデフォルト値(.prop("rows")
)を確認します。
私は同じ問題を一度抱えており、CSSを使用できませんでしたので、JavaScriptが唯一の方法です:これを行うMootoolsとjQueryの方法は次のとおりです:
Mootools:
window.addEvent('domready', function() {
if (Browser.firefox) {
$$('textarea[rows]').each(function(el) {
if (!el.retrieve('ffRowsFixed')) {
var rows = el.get('rows').toInt();
if (rows > 1) el.set('rows', (rows - 1));
el.store('ffRowsFixed', true);
}
});
}
});
jQuery:
$(document).ready(function() {
if ($.browser.mozilla) {
$('textarea[rows]').each(function(i, el) {
if (!$(el).data('ffRowsFixed')) {
var rows = parseInt($(el).attr('rows'));
if (rows > 1) {
$(el).attr('rows', (rows - 1));
}
$(el).data('ffRowsFixed', true);
}
});
}
});
ブラウザがFirefoxであるかどうかを確認し、Firefoxである場合は、行がすでに修正されているかどうかを確認し、そうでない場合は修正されます。