原始答案出现在hr下方;为了清楚起见,问题的答案似乎是box-sizing(及其供应商前缀变体)的组合,以便在定义的元素width 中包含border-width 和padding ) (而不是它们的宽度是定义宽度 + 边框宽度 + 填充)和 font-size: 0 用于父元素,这消除了两个 input 元素之间的错误空间(尽管空间在技术上仍然存在;它只是没有任何大小来影响周围元素的位置)。
所以,CSS 就是下面第二个示例中的 CSS:
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 Fiddle demo.
原答案如下:
一种方法似乎是:
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 Fiddle demo.
box-sizing(以及以供应商为前缀的变体)的用途是简单地将元素的border 以及任何已分配的padding 包含在元素的定义宽度内。
我在链接的演示中使用了自关闭标签input,因为input 元素,据我所知,没有关闭标签</input>。
我已经稍微修改了上面的内容,以消除错误空间的问题(在.name 元素中的兄弟input 元素之间需要任意更正以允许它们都在同一行上(因此奇怪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 Fiddle demo.
编辑以删除固定宽度的测量值,并替换为基于相对、百分比、基于单位的单位(如原始问题中所示):
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 Fiddle demo.
不幸的是,默认情况下无法将input 元素的宽度设置为100%,同时仍允许同级input 元素具有不同的宽度。或者,有,但它更尴尬,并且需要您明确地将两个兄弟姐妹标识为,尽管可以使用 + 或 ~ 组合符选择第二个或以后的兄弟姐妹,但无法选择 first 兄弟姐妹,基于其具有后续兄弟姐妹(没有 JavaScript 或其他脚本语言,无论是客户端还是服务器端)。