元の回答はhr
;の下に表示されます。明確にするために、質問への答えは、box-sizing
(およびそのベンダーが事前に設定したバリアント)の組み合わせであると思われます。 -width + パディング) と、2 つの要素間の誤ったスペースを削除する親要素の場合(ただし、スペースは技術的にはまだ存在しますが、周囲の要素の位置に影響を与えるサイズはありません)。border-width
padding
width
font-size: 0
input
したがって、CSS は以下の 2 番目の例のものです。
fieldset input[type=text] {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
-ms-box-sizing: border-box;
-o-box-sizing: border-box;
box-sizing: border-box;
width: 350px;
}
fieldset div input[type=text] {
width: 105px;
margin: 0;
}
fieldset div input[type=text] + input[type=text] {
float: right;
width: 245px;
}
div.name {
font-size: 0;
}
JS フィドルのデモ。
元の答えは次のとおりです。
1つの方法は次のようです:
form {
width: 350px;
}
fieldset {
width: 100%;
}
fieldset input[type=text] {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
-ms-box-sizing: border-box;
-o-box-sizing: border-box;
box-sizing: border-box;
display: inline-block;
width: 350px;
}
fieldset div input[type=text] {
width: 105px;
margin: 0;
}
fieldset div input[type=text] + input[type=text] {
float: right;
width: 241px;
}
JS フィドルのデモ。
の使用box-sizing
(およびベンダー接頭辞付きのバリアント) は、単に要素の と、要素の定義された幅内にborder
割り当てられたものを含めることです。padding
私の知る限りinput
、要素には終了タグがないため、リンクされたデモでは自己終了タグを使用しました。input
</input>
上記を少し修正して、誤ったスペースの問題を取り除きました (input
要素内の兄弟要素の間.name
で、同じ行に両方を許可するために任意の修正が必要になることはありません (したがって、width: 241px
上記の CSS の奇妙な点):
form {
width: 350px;
}
fieldset {
width: 100%;
}
fieldset input[type=text] {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
-ms-box-sizing: border-box;
-o-box-sizing: border-box;
box-sizing: border-box;
display: inline-block;
width: 350px;
}
fieldset div input[type=text] {
width: 105px;
margin: 0;
}
fieldset div input[type=text] + input[type=text] {
float: right;
width: 245px;
}
div.name {
font-size: 0;
}
JS フィドルのデモ。
固定幅の測定値を削除するように編集し、相対、パーセンテージ、ベースの単位に置き換えました (元の質問のように):
form {
width: 350px;
}
fieldset {
width: 100%;
}
fieldset input[type=text] {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
-ms-box-sizing: border-box;
-o-box-sizing: border-box;
box-sizing: border-box;
display: inline-block;
width: 100%;
}
fieldset div input[type=text] {
width: 30%;
margin: 0;
}
fieldset div input[type=text] + input[type=text] {
float: right;
width: 70%;
}
div.name {
font-size: 0;
}
JS フィドルのデモ。
残念ながら、input
要素の幅を100%
デフォルトで に設定する方法はありませんが、兄弟input
要素に異なる幅を持たせることはできます。または、ありますが、かなり厄介で、両方の兄弟を明示的に識別する必要があります。2 番目以降の兄弟を+
または~
コンビネータで選択することは可能ですが、後続の兄弟を持つことに基づいて最初の兄弟を選択することはできません。 (クライアント側かサーバー側かを問わず、JavaScript やその他のスクリプト言語を使用しない場合)。