说,我有以下无序列表。该按钮有width: auto
。如何设置元素的样式,以便#textField
尽可能地拉伸,因此#textField
的宽度和按钮的总和将达到100%?即#textField
的宽度==(宽度的100%) - (按钮的计算宽度)。
<ul>
<li>
<input id="textField" type="text" /><input type="button" />
</li>
</ul>
因此,例如,假设li
的100%宽度为100像素:如果按钮的计算宽度为30px,#textField
的宽度将为70px;如果按钮的计算宽度为25px,#textField
的宽度将变为75px。
答案 0 :(得分:51)
您可以使用float
和overflow: hidden
的混合物快速实现此效果:
<ul>
<li>
<input class="btn" type="button" value="Submit"/>
<div class="inputbox"><input id="textField" type="text" /></div>
</li>
</ul>
CSS:
ul {
list-style: none;
padding: 0; }
.btn { float: right; }
.inputbox {
padding: 0 5px 0 0;
overflow: hidden; }
.inputbox input {
width: 100%;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box; }
预览(带框尺寸):http://jsfiddle.net/Wexcode/E8uHf/546/
以下是没有框大小调整的外观:http://jsfiddle.net/Wexcode/E8uHf/
答案 1 :(得分:6)
试试这个:
<强> HTML 强>
<ul>
<li>
<input id="textField" type="text" /><input value="Button!" class="btn"type="button" />
</li>
</ul>
<强> CSS 强>
ul li {
width:100%;
}
#textField, .btn {
float:left;
}
#textField {
width:70%;
}
.btn {
width:auto;
}
这是一个演示:
http://jsfiddle.net/andresilich/RkCvf/
以下是我为您考虑的几个演示。
This演示使用CSS3的弹性框模型在没有给定宽度的情况下在其区域内拉伸input
字段。虽然IE8及以下版本不支持。
this演示只使用CSS来模仿表格。 IE8及以上版本支持它。
答案 2 :(得分:5)
使用带有CSS-2.x的用户代理中的CSS可以实现这一点 - 支持布局引擎:
…
<style type="text/css">
.full-width {
width: 100%;
}
.table {
display: table;
}
.row {
display: table-row;
}
.cell {
display: table-cell;
}
</style>
</head>
<body>
<ul class="table">
<li class="row">
<span class="cell full-width">
<input type="text" id="textField" class="full-width" />
</span>
<span class="cell">
<input type="button" value="foobar" />
</span>
</li>
</ul>
</body>
在以下浏览器中测试为阳性:
请注意,由于固定宽度,input
元素上的填充和边距会发生干扰。
但是:我可以看到没有充分的理由为什么你不在这里使用table
元素 (表格和CSS 做混合)。在语义上它是有意义的(表可序列化),并且兼容性很可能比上面的CSS display
属性值更好:
<body>
<ul>
<li>
<table class="full-width"
summary="Input text field with “foobar” button">
<tr>
<td class="full-width">
<input type="text" id="textField" class="full-width" />
</td>
<td>
<input type="button" value="foobar" />
</td>
</tr>
</table>
</li>
</ul>
</body>
您可能也应该首先使用 table
元素此处。
答案 3 :(得分:3)
我最终使用了一个表并拉伸包含文本字段的单元格:
<ul>
<li>
<table>
<tr>
<td width="100%"><input width="100%" id="textField" type="text" /></td>
<td><input type="button" width="auto" /></td>
</tr>
</table>
</li>
</ul>
答案 4 :(得分:-1)
这个怎么样?
<ul>
<li>
<input id='textField' style='width: 80%'/><input type='button' style='width: 20%'/>
</li>
</ul>
答案 5 :(得分:-1)
<ul>
<li style="position:relative; width:100%;">
<input id="textField" type="text" style="position:absolute; left:0px; right:80px" />
<input type="button" value="Submit" style="position:absolute; right:0; width:auto" />
</li>
</ul>
调整right:80px
以设置文本框和按钮之间的边距;
答案 6 :(得分:-1)
按照javascript进行操作。 取li的宽度减去按钮的长度,并将文本框的宽度设置为此。但请记住盒子模型。没有javascript我真的不是一个想法。
答案 7 :(得分:-1)
根本不需要表格和定位。答案是将一个元素向左浮动,另一个向右浮动。
http://jsfiddle.net/johnallan/HeUSN/
HTML:
<ul>
<li class="media attribution">
<button class="button" >Press Me</button>
<div class="copy">b blah blah blah blah blah blah blah blah blahblah blah blahblah blah blah blah blah blahblah blah blahblah blah blahblah blah blah blah blah blahlah blah blah</div>
</li>
</ul>
CSS:
.media{ border:1px solid black }
.media, .copy{overflow:hidden; _overflow:visible; zoom:1;}
.media .button{float:left; margin-right: 10px;}
答案 8 :(得分:-1)
如果您可以在输入框中定义maxlength,这可能会有所帮助:
/ * CSS * /
ul{
float:left;
border:1px solid #000;
padding:0;
position:relative;
width:20%;
height:25px;
}
ul li{
float:left;
margin:0;
padding:0;
border:0;
list-style-type:none;
width:100%; height:100%;
position:relative;
}
ul li input{
margin:0; padding:0; border:0;
}
ul li input[type='text']{
float:left;
width:100%; height:100%;
text-indent:10px;
}
ul li input[type='submit']{
position:absolute; right:0;
width:auto; height:100%;
}
/ * HTML * /
<body>
<ul>
<li>
<input type="text" /><input type="submit" value="Submit" />
</li>
</ul>
</body>
代码基本上将输入[type ='text']保持为100%的宽度,并将按钮绝对定位到父li。按钮的宽度为自动,高度为100%以覆盖文本框。然后,您可以在文本框中设置maxlength,以防止文本被按钮隐藏。
答案 9 :(得分:-1)
/* ROBOTICCSS*/
/* test in ff - works*/
ul{
width: auto;
padding: 0 80px 0 0;/* right padding >= button width */
list-style:none;
}
input.text_area{
width: 100%;
}
input.submit_button{
float: right;
margin: 0 -80px 0 0;/* match above value */
}
<!--HTML -->
<ul>
<li>
<input class="text_area" type="text" />
<input class="submit_button" type="button" value="Submit"/>
</li>
</ul>
答案 10 :(得分:-1)
这非常接近预期的结果:
<!DOCTYPE html>
<html lang="en">
<head>
<style>
li { width: 100%; border: 1px solid black; display: block; text-align: justify; }
span { display: inline-block; }
span { width: 100%; }
#foo { display: inline-block; width: 90%; border: 1px solid red; }
#foo input { display: block; width: 100%; }
</style>
</head>
<ul>
<li>
<object id="foo"><input type="text"></object> <object><input type="button" value="1234567890"></object>
<span></span>
</li>
</ul>
</html>