なぜdisplay:block;width:auto;
私のテキスト入力にdiv要素のように動作し、コンテナの幅を埋めていませんか?
divは自動幅のブロック要素にすぎないという印象を受けました。次のコードでは、divと入力が同じ寸法であってはなりませんか?
幅を満たす入力を取得するにはどうすればよいですか?入力にパディングとボーダーがあるため、100%の幅は機能しません(最終的な幅は1ピクセル+ 5ピクセル+ 100%+ 5ピクセル+ 1ピクセルになります)。固定幅はオプションではなく、もっと柔軟なものを探しています。
回避策に直接回答することをお勧めします。これはCSSの癖のようであり、理解すると後で役立つ場合があります。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>width:auto</title>
<style>
div, input {
border: 1px solid red;
height: 5px;
padding: 5px;
}
input, form {
display: block;
width: auto;
}
</style>
</head>
<body>
<div></div>
<form>
<input type="text" name="foo" />
</form>
</body>
</html>
私はラッパーの回避策ですでにこれを行うことができることを指摘しなければなりません。このページのセマンティクスとCSSセレクター関係のねじ込みとは別に、問題の性質と、INPUT自体の性質を変更することで解決できるかどうかを理解しようとしています。
わかりました、これは本当に奇妙です!解決策は、単にを使用max-width:100%
して入力に追加することwidth:100%;padding:5px;
です。ただし、これによりさらに多くの質問(別の質問で質問します)が発生しますが、幅は通常のCSSボックスモデルを使用し、最大幅はInternet Explorerのボーダーボックスモデルを使用しているようです。とても奇妙です。
OK、最後の1つはFirefox 3のバグのようです。InternetExplorer 8とSafari 4は、最大幅を100%+パディング+ボーダーに制限しています。最後に、Internet Explorerは問題を解決しました。
なんてこった、これは素晴らしい!これで遊んでいる過程で、そして由緒ある教祖ディーン・エドワーズと多くの助けを借りて試し Erik Arvidssonの 3つの個別のソリューションをつなぎ合わせて、任意のパディングとボーダーを持つ要素の真のクロスブラウザーを100%の幅にしました。以下の回答を参照してください。このソリューションでは、追加のHTMLマークアップは必要ありません。レガシーInternet Explorerのクラス(またはセレクター)とオプションの動作のみが必要です。
input
CSS 2.1仕様を順守していないように見える要素の問題を扱っていますが、リンクした質問は、CSS 2.1仕様の範囲内で完全に発生するボックスのオーバーフローを防ぐ方法を尋ねています。質問とその解決策の両方が重複していますが、それらを正確な重複と呼ぶことは単に間違っています。