Chromeでのレンダリングで奇妙な種類の矛盾に遭遇しました。
この問題の簡単な例は、次のコードを使用して再現できます。
<html>
<head>
<style>
input, span {
border: 1px solid #CCC;
padding: 3px 4px;
height: 23px;
width: 120px;
display: block;
font-size: 13px;
}
</style>
</head>
<body>
<div><span>123</span></div>
<div><input type='text'/></div>
</body>
</html>
つまり、一言で言えば、span
とinput
は同じサイズである必要がありますが、Chromeは要素を異なる方法でレンダリングすることがわかります。
- スパンがレンダリングされるので、実際のサイズは
31px
- 入力はレンダリングされるので、実際のサイズは
23px
調査の結果、Chromeはspan
「内側」(境界線とパディングなし)のサイズが20ピクセルでinput
あるようにレンダリングされているように見えますが、「外側」のサイズは20ピクセルです。
実際のアプリケーションでは、コントロールは「インプレース編集」シナリオで使用されるため、ユーザーがスパンをクリックすると、スパンが非表示になり、その場所に入力が表示されます。ご覧のとおり、このようなサイズの違いがあるため、移行はスムーズではありません。Wjatの価値は、コントロールがテーブルセルに配置されることです。そのため、幅と高さの違いにより、テーブル全体のレイアウトが少し変更されます。
私はクロスプラットフォームアプリケーションに取り組んでいるので、IE9でも動作するはずです。input
問題は、IEが両方とspan
同じサイズをレンダリングするため、ページがIEとChromeでかなり異なって見えることです。私の生活をより困難にするために、これらのコントロールはASP.NETサーバーコントロールによってレンダリングされ、cssのみを変更できます。
Win7x64でChrome23.0.1271.91(投稿時点で最新)を使用しています。
したがって、実際には2つの質問があります。
- これを修正するにはどうすればよいですか?
- なぜそれが起こっているのですか?明らかな何かが欠けていますか?それは予想される動作ですか?