原始答案出现在hr
; 为了清楚起见,问题的答案似乎是box-sizing
(及其供应商前缀的变体)的组合,以便在元素的定义中包含border-width
and (而不是它们的宽度是定义的宽度 + 边框-width + padding)和父元素,它删除了两个元素之间的错误空间(尽管从技术上讲,空间仍然存在;它只是没有任何大小来影响周围元素的位置)。padding
width
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 小提琴演示。
原答案如下:
一种方法似乎是:
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
元素具有不同的宽度。或者,有,但它更尴尬,并且需要您明确地将两个兄弟姐妹标识为,尽管可以使用+
or~
组合器选择第二个或以后的兄弟姐妹,但不可能根据其具有后续兄弟姐妹来选择第一个兄弟姐妹(没有 JavaScript 或其他脚本语言,无论是客户端还是服务器端)。